SORU
5 EYLÜL 2009, CUMARTESİ


Git, bir depo ilgisiz bir şube tanıtan basit bir yolu var mı?

Git bir sorunu olan bir arkadaşım bugün yardım ederken, tanıtmak zorunda kaldım bir master daldan tamamen ayrı olması gereken şube. Bu şube içeriğini çok farklı bir kökeni vardı ama olacaktı master şube geliştirilen olmuştu daha sonra master şube birleşti.

John Wiegley Git from the bottom up okuma nasıl hatırladım dalları aslında belli bir izleyen bir taahhüt için bir etiket vardır bir dosya bir ağaca bağlanmış ve isteğe bağlı olarak kaydetme nasıl Kongre ve üst etmiştir. Bu taahhüt bir yetim oluşturmak için gittik mevcut depo gıt tesisatı kullanarak:

Dizindeki tüm dosyaları kurtulduk

$ git rm -rf .

... çıkarılan bir arşivini dizinleri ve dosyaları, eklenen bu dizin ...

$ git add .

... ve oluşturulan nesne bir ağaç

$ git write-tree

(git-write-tree bizi yaratan ağaç nesnenin sha1sum söyledi.)

O halde, ağaç, üst taahhüt belirtmeden işledik...

$ echo "Imported project foo" | git commit-tree $TREE

(git-commit-tree bize taahhüt oluşturulan nesnenin sha1sum söyledi.)

... ve yaratılmış bizim için yeni puan yeni bir şube oluşturuldu commit.

$ git update-ref refs/heads/other-branch $COMMIT

Son olarak, master şube çalışmaları orada devam etmek için döndük.

$ git checkout -f master

Bu planlı olarak çalışmış gibi görünüyor. Ama bu net değil prosedür sadece başlarken birisi için tavsiye ederim git kullanmak, en hafif deyimiyle.Orada bir yaratmanın daha kolay bir yolu yeni olan her şey tamamen ilgisiz şube depodaki o kadar uzağa?

CEVAP
26 Kasım 2010, Cuma


Herkes yeni bu soru geldi diye, yeni bir özellik (beri V1.7.Bu görev daha biraz daha yüksek seviye yapar 2) diğer cevabını.

git checkout şimdi destekler--orphanseçeneği. man page:

git checkout [-q] [-f] [-m] --orphan <new_branch> [<start_point>]

Bir yeni oluşturyetimadında şube &; new_branch> lt; başladı &; start_point> lt ve onu geçmek. Bu öncelikle bu yeni bir şube üzerinde yapılan taahhüt ve olacak hiçbir anne olacak yeni bir tarihi kökü tamamen tüm diğer bağlantı kesildi dalları ve taahhüt eder.

Böyle yapmaztam olaraksoru soran Endeksi doldurur, çünkü istedim, ne ve <start_point> Bu, tüm sonra, ödeme bir komut olduğundan) çalışan ağaç. Sadece başka bir eylem gerekli çalışma ağaç ve dizinden herhangi bir istenmeyen öğeleri kaldırmak için. Ne yazık ki, git reset --hard işe yaramıyor ama git rm -rf . yerine (bu diğer cevaplar rm .git/index; git clean -fdx verilen eşdeğer olduğuna inanıyorum) kullanılabilir.


Özet olarak:

git checkout --orphan newbranch
git rm -rf .
<do work>
git add your files
git commit -m 'Initial commit'

KAFA varsayılan olduğundan <start_point> belirsiz bıraktım, zaten umurumuzda değil. Bu sıra aslında sadece korkunç tesisat komutları başvurmadan Artem's answer komut dizisi ile aynı şeyi yapar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • pleated-jeans

    pleated-jean

    6 HAZİRAN 2013
  • spyib

    spyib

    9 Ocak 2007