Git deposunu başka bir git deposunun içinde tut


125

İşte istediğim şey:

REPO-A
  /.git
  /otherFiles
  /REPO-B
    /.git
    /moreFiles

Ben itmek isterler tüm UZAKTAN-A ve REPO-A'nın içindekiler sadece UZAKTAN-B'ye REPO-B.

Mümkün?

Yanıtlar:


104

Git alt modüllerini kullanmak istediğiniz gibi görünüyor .

Git, alt modülleri kullanarak bu sorunu giderir. Alt modüller, bir Git deposunu başka bir Git deposunun alt dizini olarak tutmanıza izin verir. Bu, projenize başka bir depoyu klonlamanıza ve taahhütlerinizi ayrı tutmanıza olanak tanır.


19
Tam olarak değil: o itmek olmaz tüm ECOVIC'den içeriğini: Sadece A artı B başvuru Ama cevabınızı eleştirmek değil, ben OP'ın sorusunu yeniden okuduğunda hemen hemen aynı yazma acele;)
VonC

1
Bu, alt modüller için hemen hemen bir kullanım durumudur. REPO-A ve REPO-B vb kendi onaylatabilirsiniz, kökenleri, tarih, ile, kendi başlarına git repo gibi davranılır
Damien Wilson

2
bu yüzden doğru okuyorsam, bir alt modül-d deposunu, içinde bulduğumun tamamen dışında bağımsız olarak kontrol edebilir miyim? Zaten var olan bir depoyu nasıl alıp başka bir projede alt modül olarak referans alabilirim?
JohnO

OP ile tam olarak aynı çözümü aramıyordum ve sanırım ortalama olarak bu, benzer bir sorunun cevabı için daha çok aranıyor: "git REPO-B'yi git REPO-A'nın içine yerleştirmek bir referansı veya tam bir kopyayı gömüyor mu? REPO-B'nin? ".
jaya

64

İki ayrı ve farklı depoyu korumak için her zaman sembolik bağlar kullandım.


8
git alt modülleri ve git alt ağacının ne kadar kafa karıştırıcı göründüğüne dair bu geçerli bir cevaptır.
Trevor Hickey

Bu aynı zamanda birden çok uzak depodan tek bir uygulamayı bir araya getirmek için çok kullanışlıdır
GeraldScott

22
İki ayrı ve farklı repoyu sürdürmek için, repo B'yi repo A'da tutmak ve repo A'ya repo B eklemek doğru olmaz .gitignoremı?
Fabien Snauwaert

1
Fabien'in önerdiği şeyi yapmayı düşünüyordum, bu şekilde yapmanın bir sorunu var mı?
theonlygusti

1
Git depolarını ayrı tutuyorum ve REPO-A'da yuvalanmış bir REPO-B kopyasında (.git olmadan) REPO-B'de yapılan değişiklikleri kopyalıyorum. Bunu rsync ile yapıyorum. rsync -avh --delete --exclude='.git' REPO-B/ REPO-A/REPO-B-copy/REPO-B'de herhangi bir değişiklik olduktan sonra koşuyorum
Shai

29

Evet, çizdiğiniz dosya hiyerarşisi ile tam olarak istediğinizi yapabilirsiniz. Repo-B bağımsız olacak ve Repo-A bilgisine sahip olmayacaktır. Repo-A kendi dosyalarındaki ve Repo-B dosyalarındaki tüm değişiklikleri takip edecektir.

Ancak bunu yapmanızı tavsiye etmem. Repo-B'de dosyaları her değiştirdiğinizde ve taahhüt ettiğinizde Repo-A'da işlem yapmanız gerekir. Repo-B'de dallanma Repo-A ile karışacak ve Repo-A'da dallanma riskli olacaktır (klasörleri kaldırmada sorun, vb.). Alt modüller kesinlikle gitmenin yoludur.


53
REPO-B'yi /REPO-A/.gitignore'a kolayca ekleyemez misiniz?
mikkelbreum

2
@mikkelbreum Ben de aynı fikirdeydim. Şu anda ana projemiz için subverion kullanıyoruz ve alt klasörlerden birinde bir git repo kullanıyoruz. SVN ile git repo içeren klasörü svn: ignore özelliğine ekledim ve kendime aynısını git ile yapıp yapamayacağımı soruyordum.
2ndkauboy

3
Ebeveyn deposunun yok sayma listesine iç içe geçmiş bir git deposu eklemenin neden işe yaramayacağını anlayamıyorum .. Ama aynı zamanda aklıma gelen bir şeyler olduğunu hissediyorum, çünkü bu yaklaşım nadiren önerildi ve birçok kişi iç içe geçmiş git depolarını caydırıyor.
mikkelbreum

18
Ben sadece bu senaryoyu uyguladım. Bir alt klasörde, uzak depoya gönderilmesini istemediğim bazı sıkıştırılmamış CSS dosyalarım var, bu yüzden .gitignore dosyamda. Ancak bu dosyalardaki değişiklikleri yerel olarak izlemek istiyorum. Klasörün içinde sıkıştırılmamış dosyalarla bir depo kurdum ve tüm dosyaları o depoya ekledim. Hala ana depo tarafından görmezden geliniyor ancak alt repo içerisindeki değişiklikleri takip edebiliyorum. Önerilsin ya da önerilmesin, bu çözüm bunun gibi belirli durumlar için anahtardır.
BrianVPS

1
Anladığım kadarıyla, bir depodaki dalları değiştirdiğinizde, diğeri bir sürü değişiklik görecek, ancak neden "Repo-A'da dallanma riskli olacak (klasörleri kaldırma sorunu vb.)"? Teşekkürler!
user2688151

2

"Git-subrepo" kullanarak istediğinizi elde edebilirsiniz (bu REPO-A deposu yalnızca referans yerine REPO-B klasöründekiler dahil tüm dosyaları içerir):

https://github.com/ingydotnet/git-subrepo

Katkıda bulunanlarınızdan bazılarında subrepo komutu yüklü değilse yine de çalışır; klasör yapısının tamamını görecek, ancak alt reposlarda değişiklik yapamayacaklar.

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.