2011-06-08 13 views
6

Son zamanlardagit submodule birleştirme: nasıl görselleştirilir?

git submodule summary 

ile ilgili bilgi verdiğimde oldukça mutluydum ve bu da bana bir alt modüle ait kontrol edilen işlemin devamında veya depoda referansın arkasında olduğunu gösterir.

Submodule çakışmalarıyla birleşimin ortasındayken, aynı komut yararlı çıktı üretmiyor. Ana ağacımdaki dalların incelendiği ağrılı bir diziye ihtiyacım var, cd'ing ile birlikte alt modüller, getiriler ve gitkler, sha1 değerlerini karşılaştırarak ...

Daha kolay bir yol olurdu. çatışmanın resmi?

cevap

2

Bir komut dosyası oluşturabilirsiniz. İşte böyle bir senaryonun çekirdeğidir:

git --git-dir=submodulepath/.git diff \ 
    $(git ls-tree HEAD submodulepath | cut -c 15-54) \ 
    $(git ls-tree MERGE_HEAD submodulepath | cut -c 15-54) 

Eğer günlüğüne ya da değişikliklerin neler olduğunu görmek için yardımcı olacak diğer komutların herhangi bir sayı ile fark değiştirebilir. Bir tanesi hızlı ileriye doğru bir birleşmenin olup olmayacağını görmek olacaktır; bu durumda, çatışmayı alt modül düzeyinde birleştirmeden hızlı bir şekilde çözebilirsiniz.

Ayrıca, bu tür konularda size yardımcı olacak bir gitslave vardır.

Bu yardımcı olur umarım.

+0

+1! Ama reklamdaki gerçeği, gitslave git-submodules ile değiştirmenin bir parçası olduğu gibi git-submodules ile size yardımcı olmayacaktır. Git-altmodulleri değiştirmek, akıl sağlığınız için çok yararlı olacaktır. –

+0

mükemmel fiş, Seth;) Alt modüller etrafında git katkıda bulunmayı umuyoruz. Alt ağaç birleştirme, git projesinde bulunan her şeyden cevap olup olmadığından emin değilim. –

+0

Gerçekten bu komut satırı fikrini anlamıyorum. "$ (Git ls-tree ...)", "cfa69f5. 8b7cc2b. 4871. 6133e C 8e9bfd" gibi bir şeye (tabii ki tam SHA1 kimlikleriyle) bakar. Bu, "git diff" için geçerli bir argüman olabilir mi? Benim için her durumda çalışmıyor, kullanıyorum: use: git diff ... – chrisxxx

0
Adam's answer aynı

ama endeksi ve kesim olmadan kullanarak:

sub="path/to/submodule" 
git --git-dir="$sub/.git" diff \ 
    $(git rev-parse ":2:$sub") \ 
    $(git rev-parse ":3:$sub") 

Açıklama:

bir çatışma, endekste bu konuda Git bilgileri depolar vardır. Bu aşamaları olarak adlandırılan birkaç farklı versiyonu saklar. Aşama 1 "temel" versiyonudur (ortak atası), 2. aşama "bizim" versiyonudur ve 3. aşama "onların" versiyonudur.

Dosya çakışmaları durumunda, dizin farklı sürümler için blob nesne kimliklerini içerir. Alt modüller söz konusu olduğunda, bu alt modülün kimlik kimlikleridir. Yukarıdaki komutta, :2:$sub, $sub yolunda alt modüle ait 2 (bizimki) aşamasına atıfta bulunmaktadır.

git ls-files --stage kullanarak dizin girişlerinin bir listesini aşamalarla görebilirsiniz. Gitslave için