SORU
23 EKİM 2012, Salı


Dosya geçmişi bozmadan iki Gıt depoları birleştirme

Yeni, üçüncü bir depo içine iki Gıt depoları birleştirmek istiyorum. Buldum, pek çok açıklamaları nasıl bu kullanarak bir ağacı birleştirme (örneğin Jakob Narębski cevap How do you merge two git repositories?) ve aşağıdaki şu talimatları çoğunlukla çalışır, bunun dışında ne zaman sana teslim ediyorum alt merge tüm dosyaları eski havuzları kaydedildiği gibi yeni eklenen dosyalar. git log, ben ne zaman eski depoları yapılanların özeti görebiliyorum ama eğer git log <file> ... Eğer tek bir dosya için taahhüt - alt birleştirme gösterir. Yukarıdaki cevap ile ilgili ifadelere bakılırsa, bu sorun görmeye yalnız değilim ama bunun için yayımlanan bir çözüm buldum.

Herhangi bir şekilde depoları birleştirme ve bireysel dosya geçmişi olduğu gibi bırak var mı?

CEVAP
22 Ocak 2013, Salı


Cevabı ise sadece iki havuzları tutkal ve bu şekilde tüm yerdeymiş gibi göstermek yerine dış bağımlılıkları yönetmek için çalışıyorsan çok daha basit olduğu ortaya çıktı. Sadece eski repos için uzaktan kumanda ekleyin, yeni efendin onları birleştirme, bir alt dosya ve klasörleri taşımak, hareket kaydetmek ve tüm ek repos için tekrar etmek gerekiyor. Alt modüller, alt birleştirir ve süslü rebases biraz daha farklı bir sorunu çözmek için tasarlanmıştır ve yapmaya çalıştığım şey için uygun değil.

İşte iki havuzları tutkal için örnek Powershell komut:

# Assume the current directory is where we want the new repository to be created
# Create the new repository
git init

# Before we do a merge, we have to have an initial commit, so we'll make a dummy commit
dir > deleteme.txt
git add .
git commit -m "Initial dummy commit"

# Add a remote for and fetch the old repo
git remote add -f old_a <OldA repo URL>

# Merge the files from old_a/master into new/master
git merge old_a/master

# Clean up our dummy file because we don't need it any more
git rm .\deleteme.txt
git commit -m "Clean up initial file"

# Move the old_a repo files and folders into a subdirectory so they don't collide with the other repo coming later
mkdir old_a
dir -exclude old_a | %{git mv $_.Name old_a}

# Commit the move
git commit -m "Move old_a files into subdir"

# Do the same thing for old_b
git remote add -f old_b <OldB repo URL>
git merge old_b/master
mkdir old_b
dir –exclude old_a,old_b | %{git mv $_.Name old_b}
git commit -m "Move old_b files into subdir"

Açıkçası eğer oldukça bu takım için komut dosyasını değiştirmek isterseniz old_a yeni kombine repo olur) içine old_b Birleştir yerine.

-Eğer ilerleme şubeleri de özellik getirmek istiyorsanız, bu kullanın:

# Bring over a feature branch from one of the old repos
git checkout -b feature-in-progress
git merge -s recursive -Xsubtree=old_a old_a/feature-in-progress

Bu kadar açık olmayan bir bölümü süreci - bu bir ağaç birleştirme, bir ya da daha çok değişken için normal özyinelemeli birleştirme söyler Gıt o adlandırdık hedefi ve yararı Gıt hat her şey doğru.

7 ** biraz daha detaylı açıklama yazdım.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • alex maybury

    alex maybury

    20 Aralık 2007
  • Austin Evans

    Austin Evans

    5 AĞUSTOS 2007
  • GoProTutorials

    GoProTutoria

    18 NİSAN 2011