Git deposunu geçmiş olmadan kopyalama


200

Şu anda halka açık yapmak istediğim özel bir depom var. Ancak bazı ilk taahhütler kamuya açıklamak istemediğim bilgiler içeriyor (sabit kodlu kimlik bilgileri, vb.).

Taahhüt tarihinin bir kısmını veya tamamını dahil etmeden en son taahhüdü herkese açık hale getirmek için en kolay yol nedir (kamu havuzunda önceki taahhütlere gerçekten ihtiyacım yok veya bunu istemiyorum)?


Neden sadece yeni bir depo oluşturmuyorsun?
Stephan

2
@Stephan Yeni bir depo oluşturmakta iyiyim, ancak eski depodaki en son durumu nasıl takıp yenisine nasıl ekleyebilirim?
Rafe

19
sadece .git klasörünü silebilir ve kaynaklarınızın bulunduğu klasöre tekrar bir git init yapabilirsiniz
Stephan

2
.Git klasörünü silmek, iki havuzunuzun uyumsuz olmasını sağlar, birinden diğerine birleştirilemez
Arnold Roa

Yeniden pazarlayamaz mısın? Kelimenin tam anlamıyla tüm eski taahhütleri eziyorsun ve sonra (zorla) itiyorsun.
xaxxon

Yanıtlar:


324

Klonlarken geçmişin derinliğini sınırlayabilirsiniz :

--depth <depth>
Create a shallow clone with a history truncated to the specified 
number of revisions.

Sınırlı geçmiş, ancak yine de biraz istiyorsanız bunu kullanın.


41
Bu adama bir kurabiye ver (bu cevabı doğru işaretleme şeklinde) :)
FateNuller

7
Bu, uzak, halka açık bir depoya gönderilebilecek, sorunun ima ettiği kullanım amacına yönelik değildir. Sığ bir klonu itmeye çalışmak sonuç verir shallow update not allowed.
Brad Knox

281

Aşağıdaki komutu kullanın:

git clone --depth <depth> -b <branch> <repo_url>

Nerede:

  • depthdahil etmek istediğiniz taahhüt tutarıdır. yani sadece en son taahhüt kullanımını istiyorsanızgit clone --depth 1
  • branchkopyalamak istediğiniz uzak dalın adıdır. yani masterşube kullanımından son 3 taahhütte bulunmak istiyorsanızgit clone --depth 3 -b master
  • repo_url deponuzun URL'si

7
Bu aslında Gautier ile aynı cevap ama daha eksiksiz ve bir örnek.
aled

3
Gerçekten öyle. Bazen gerekli olan örnek. Benim için, sorunu açıklığa kavuşturmak ne
Agam Rafaeli

3
Ana cevaba +1, ama aynı zamanda derinliğe hangi dalın uygulanacağını seçmeyi açıklamak için buna da - bunun klon komutunun bir parçası olduğunu biliyorum - ama basit aklımda hepsini güzelce bağlar ... ve bana basit gibi:)
code_fodder

7
Bu soruya nasıl cevap veriyor? Bütün bunlar yerel olarak sığ bir klon yaratmak, ama sonra ne olacak? Sınırlı geçmişe sahip bu yerel kopyayı yeni bir repoya nasıl kopyalarsınız?
BradDaBug

4
@BradDaBug geçerli bir nokta getiriyor. Derinliği 1 ile sınırlayan yukarıdaki talimatları izledim, sonra uzak menşei değiştirdim ve sonra yeni repoma zorlamaya çalıştım. Ancak, bir hata iletisi aldım shallow update not allowed. Bu yığın taşma cevabını bu örnekte yararlı buldum .
Craig Myles

18

.gitKlasörü silmek muhtemelen en kolay yoldur, çünkü geçmişi istemediğiniz / buna ihtiyacınız yoktur (Stephan'ın dediği gibi).

Böylece son taahhüdünüzden yeni bir repo oluşturabilirsiniz: ( Tüm tarih olmadan tohum / kick-start projesi nasıl klonlanır? )

git clone <git_url>

sonra silin .gitve daha sonra çalıştırın

git init

Ya da mevcut repo'nuzu tekrar kullanmak istiyorsanız : Geçerli depoyu Git deposundaki tek (ilk) taahhüdü mu?

Yukarıdaki adımları izleyin ve ardından:

git add .
git commit -m "Initial commit"

Reponuza zorla.

git remote add origin <github-uri>
git push -u --force origin master

6
#!/bin/bash
set -e

# Settings
user=xxx
pass=xxx
dir=xxx
repo_src=xxx
repo_trg=xxx
src_branch=xxx

repo_base_url=https://$user:$pass@bitbucket.org/$user
repo_src_url=$repo_base_url/$repo_src.git
repo_trg_url=$repo_base_url/$repo_trg.git

echo "Clone Source..."
git clone --depth 1 -b $src_branch $repo_src_url $dir

echo "CD"
cd ./$dir

echo "Remove GIT"
rm -rf .git

echo "Init GIT"
git init
git add .
git commit -m "Initial Commit"
git remote add origin $repo_trg_url

echo "Push..."
git push -u origin master

2
--depth 1geçmişi de olan silindiği için bu durumda gereksizdirrm -rf .git
rayphi

3
Sanırım şöyle yaparım:git clone --depth 1 -b $src_branch $repo_src_url $dir && cd ./$dir && git commit --amend --author "Some One <some@one.com>" -m "Initial Commit" && git remote set-url origin $repo_trg_url && git push -u origin master
rayphi

11
@rayphi evet --depth 1gereksizdir ama aynı zamanda zararsızdır ve biraz ağ bant genişliği tasarrufu sağlar (yine de silmek üzere olduğunuz bir geçmişi getirmenin anlamı yoktur)
Silas S. Brown

1
Depolarınızı uyumlu tutmak istiyorsanız bunu yapmanızı önermiyorum.
Arnold Roa

.Git kaldırıldığında tüm git kancaları da çıkarılır.
JudaPriest

0

Rebase'nin ezilmesi tam olarak bu değil mi? Sadece son taahhüt hariç her şeyi ezin ve sonra (zorlayın) itin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.