İki deposu birbirine yapıştırmaya ve harici bir bağımlılığı yönetmek yerine bu şekilde görünmeye çalışıyorsanız, cevabın çok daha basit olduğu ortaya çıkıyor. Eski depolarınıza uzaktan kumanda eklemeniz, yeni ana verilerinizle birleştirmeniz, dosyaları ve klasörleri bir alt dizine taşımanız, taşımayı tamamlamanız ve tüm ek depolar için tekrarlamanız yeterlidir. Alt modüller, alt ağaç birleşmeleri ve süslü baslar biraz farklı bir sorunu çözmeyi amaçlıyor ve yapmaya çalıştığım şeyler için uygun değil.
İki deposu birbirine yapıştırmak için bir Powershell betiği:
# 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
git commit --allow-empty -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 --allow-unrelated-histories
# 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 --allow-unrelated-histories
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ı bunun yerine old_b'yi old_a (yeni birleşik repo haline gelir) ile birleştirebilirsiniz - betiği uygun şekilde değiştirin.
Devam eden özellik dallarını da getirmek istiyorsanız, bunu 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
Sürecin açık olmayan tek kısmı bu - bir alt ağaç birleşmesi değil, Git'e hedefi yeniden adlandırdığımızı ve Git'in her şeyi doğru bir şekilde hizalamasına yardımcı olan normal özyinelemeli birleştirme argümanı.
Burada biraz daha ayrıntılı bir açıklama yazdım .