git submodule izleme son


136

(Büyük) projemizi git'e taşıyoruz ve alt modülleri kullanmayı düşünüyoruz. Planımız süper projede üç farklı kafaya sahip olmaktır: serbest bırakma, kararlı, en son. Proje liderleri, serbest bırakma ve istikrarlı dalları ele alacaktır. Alt modülleri gerektiği gibi hareket ettireceklerdir.

Sorun "en son" kafa. Süper proje "en son" başının tüm alt modüllerin ana dallarını (otomatik olarak) takip etmesini istiyoruz. Ve ayrıca alt modüle olan tüm taahhütlerin tarihini göstermesi harika olurdu.

Gitslave'e baktım, ama istediğimiz tam olarak bu değil. Baska öneri?


Siz bir araç isterken, aynı şeyi yapan tek gömlekleri toplayan bu soruyu bağlamak istiyorum: stackoverflow.com/questions/1030169/…
Tobu

Git artık en yeni alt modüllerle izleme olanağı sunuyor: düzenlenen cevabımı görün.
VonC

Yanıtlar:


235

Güncelleme Mart 2013

Git 1.8.2 şubeleri izleme imkanı ekledi.

" git submodule" , uzak dalın ucu ile entegre etmek için yeni bir mod öğrenmeye başladı (süper projenin gitlinkinde kaydedilen taahhüdün aksine).

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 

Halihazırda mevcut olan bir alt modülünüz varsa , bir dalı izlemek isteyip istemediğinizi " mevcut bir alt modülün bir dalı nasıl izleyeceğini " görebilirsiniz.

Ayrıca , alt modüller hakkında genel bilgi için Vogella'nın alt modüller hakkındaki eğiticisine bakın .

Not:

git submodule add -b . [URL to Git repo];
                    ^^^

Bkz. git submoduleSayfa :

Alt modüldeki dal adının, geçerli havuzdaki geçerli dal ile aynı ad olması gerektiğini. belirtmek için özel bir değeri kullanılır .


Bkz. Taahhüt b928922727d6691a3bdc28160f93f25712c565f6 :

submodule add: --branchVerilmişse,.gitmodules

Bu, yeni bir alt modül eklediğinizde bir submodule.<name>.branchseçeneği kolayca kaydetmenizi sağlar .gitmodules. Bu yama ile,

$ git submodule add -b <branch> <repository> [<path>]
$ git config -f .gitmodules submodule.<path>.branch <branch>

azaltır

$ git submodule add -b <branch> <repository> [<path>]

Bu, gelecekteki çağrıların

$ git submodule update --remote ...

alt modülü başlatmak için kullandığınız aynı daldan, genellikle istediğiniz gibi güncellemeler alır.

İmzalayan: W. Trevor King


Orijinal cevap (Şubat 2012):

Bir alt modül, bir üst repo tarafından başvurulan tek bir işlemdir.
Kendi başına bir Git deposu olduğu için, "tüm taahhütlerin tarihçesine" git logo alt modül içinden erişilebilir .

Bir ebeveynin, bir alt modülün belirli bir dalının en son taahhüdünü otomatik olarak izlemesi için şunları yapması gerekir:

  • alt modülde cd
  • git getirme / çekme sağ dalda en son taahhütlere sahip olduğundan emin olmak için
  • Ana depoda cd geri
  • alt modülün yeni taahhüdünü kaydetmek için ekleme ve taahhüt etme.

gitslave (zaten baktığınız) , taahhüt işlemi de dahil olmak üzere en uygun gibi görünüyor .

Doğru alt modül dalını kontrol etme, değişikliği yapma, taahhüt etme ve daha sonra süper projeye girme ve taahhüdü taahhüt etme (veya en azından alt modülü).

Diğer alternatifler burada detaylandırılmıştır .


1
Eğer alt modülün sağ kolu ödeme gerekir @BraveNewMath, sonra ana repo gidip yazın: git config -f .gitmodules submodule.<path>.branch <branch>. Her şeyi ekleyin, taahhüt edin ve itin.
VonC

2
@BraveNewMath ben detay bir alt modül bir şube izlemek yapmak için tüm adımları stackoverflow.com/a/18799234/6309 .
VonC

1
--remoteGüncelleme sırasında kopuk kafalar almak istemiyorsanız etiketi kullanmak önemlidir , yeni çektiğiniz kodun neden master'ın arkasında olduğunu merak ediyorsunuz!
Chris Watts

3
@DC_ "Bu cevaba" katılıyorum (yazdığımdan beri). "Bir şubeyi takip etme" özelliği, bir alt modülün bir şubenin en son işlemine güncellenmesi anlamına gelir. Bu yapıldıktan sonra, ana depoya yeni alt modül durumunu eklemeniz ve uygulamanız gerekecektir. Ve bir sonraki klon bu durumu kontrol eder (başsız).
VonC

3
@VonC Daha da açıklığa kavuşturmak için, "bir dalın izlenmesi" özelliği, git submodule updatekomutun davranışını yalnızca alt modülün otomatik olarak güncellenmesine neden olmayan alt modülü güncellemeyi taahhüt ettiğini söyleyerek (yani ana bilgisayarda en son taahhüt) söyleyerek davranışını etkiler. Taahhüt, klon zamanında alt modül tarafından işaret edilir?
christner
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.