2016-02-25 17 views
8

Erken çakışmayı algılama yöntemi olarak, benim ve diğerleri arasında ortak olan tüm değiştirilmiş dosyalar için git dalları aramak istiyorum. Git'in benim göründüğümü (veya kabuk komut dosyası aracılığıyla) yapmamı sağlayan bir yöntemi var mı?Genel olarak dosya için git dalları arayın

bir post-commit askı olarak şimdi is için düşündüm yöntemini: Ben ararken olacak tüm dosyaları

  1. ben varım daldaki bir git diff --name-only master gerçekleştirme belirlemek için diğer branşlarda Geri Gelen
  2. aranıyor/uzaktan depo üzerinde git diff --name-only origin/<remote branch> origin/master aracılığıyla herkesin diğer uzak branşta (önceki adımda) elde edilen ettik her dosya için grep'ing
  3. (çelişkili dalların bir listesini oluşturmak için) dosya t birini veya daha fazlasını içeren şube listesi arama/grep'imin sonuçlarına dayalı şapka çatışması.

cevap

4

mevcut yöntemlerin çoğu "How can I preview a merge in git?" Sözünü

İkinci adım (aslında hiç --no-ff ve --no-commit ile birleştirme gerçekleştirmek karşılaştırıldığında) hızlı biri

git diff --name-status origin/abranch 

olduğu listelenmiştir (varsayılan olarak HEAD ile karşılaştırılır)

Değiştirilmiş dosyaları (genellikle ortak dosyalar arasında arama yaptığınız için add a status filter yapabilirsiniz. değişiklikle birlikte)

İlk adım için gerek yok: ikincisi, HEAD ile karşılaştırılan ortak değiştirilmiş dosyaları doğrudan listeleyecektir.

git diff --name-status --diff-filter=M origin/abranch 
+0

Sorumu revize ettik ama http://stackoverflow.com/a/33267627/1034537 içinde komutlar esasen isterim bash komut bir örnektir senaryomda oluştur (hariç tüm uzak şubelere girerdim). – BLaZuRE

+0

@BLaZuRE, uzaktan izleme dallarınızı basitçe açıp, her birinde 'git diff --name-status --diff-filter = M origin/abranch' komutunu uygular. Ortak değiştirilmiş dosyalar listenizi (potansiyel çakışmalar için aday) alırsınız – VonC

3
potentially-conflicting-changes-between() { 
     local base=`git merge-base $1 $2` 
     { git diff --name-only $base $1 
      git diff --name-only $base $2 
     } | sort | uniq -d 
} 

çakışmaları inceleme amaçlı olduğu birleştirme tüm dosyaları gösterecektir, o zaman ref çalışan meselesi, en kolay Ayrıca düşük yapabilirsiniz

for other in `git branch -r`; do 
     printf '--- \n%s %s\n' master $other 
     potentially-conflicting-changes-between master $other 
done 

olabilir - aynı değişikliklerde yanlış pozitifleri ortadan kaldırmak için doğrudan birleştirme hazırlığı yapar, bu çok zaman kazandırabilir, ancak tüm olası çakışmalar için dizin ayrıntılarını listeleyecek ve birleştirmenin gerçekte mevcut çalışma tablonuzda gerçekten çalışıp çalışmadığını kontrol edecektir Ben belli değildi hissediyorum çünkü kararsız çalışmalarına omping

potentially-conflicting-changes-between() 
{ 
    (export GIT_INDEX_FILE=`git rev-parse --git-dir`/scratch-index; 
    git read-tree --empty; 
    git read-tree -m $(git merge-base $1 $2) $1 $2; 
    git ls-files -u) 
} 
+0

Nice script. +1 – VonC

+0

Teşekkürler. . . . hm. Benim için en sevdiğim komutun sadece bilet olduğu ortaya çıktı. – jthill

+0

git merge-base? (http://stackoverflow.com/a/24376032/6309) – VonC

İlgili konular