2012-06-13 7 views

答えて

15

編集探しものではありません。もちろん、簡単に明らかとオーバー - 工学無料回答はgit statuskostixnotesです。これの短所は、git statusが作業コピーと比較してインデックスの状態をチェックすることです。これは遅いですが、以下ではインデックスのチェックだけがはるかに高速です。

競合するファイルの名前を取得するには、git ls-files --unmergedを使用します。簡単にするために

$ git ls-files --unmerged 
100755 f50c20668c7221fa6f8beea26b7a8eb9c0ae36e4 1  path/to/conflicted_file 
100755 d0f6000e67d81ad1909500a4abca6138d18139fa 2  path/to/conflicted_file 
100755 4cb5ada73fbe1c314f68c905a62180c8e93af3ba 3  path/to/conflicted_file 

、私は私の~/.gitconfigファイル(私はクレジットを主張することはできませんが、私は元のソースを思い出すことができない)に次のようにあります

[alias] 
    conflicts = !git ls-files --unmerged | cut -f2 | sort -u 

これは私に与える:

$ git conflicts 
path/to/conflicted_file 
は、私はちょうど競合マーカーの =======一部に grepを使用したい、単一のファイルに競合の数を仕事にするには:

$ grep -c '^=======$' path/to/conflicted_file 
2 

あなたは上にあなたの~/.gitconfigなどconflicts行に以下を追加することができます。これはあなたを与えるだろう

[alias] 
    count-conflicts = !grep -c '^=======$' 
    count-all-conflicts = !grep -c '^=======$' $(git conflicts) 

$ git conflicts 
path/to/a/conflicted_file 
path/to/another/different_conflicted_file 

$ git count-conflicts path/to/a/conflicted_file 
2 

$ git count-all-conflicts 
5 
1

git statusがマージに失敗しているファイルを示しそのようなファイルの解決された状態を記録する方法のヒントと共に、自動的に衝突を起こします。

+0

はい、でも...競合するファイルのみを表示するスイッチはありますか? – shytikov

+0

@AlexeyShytikov、私はお手元にはわかりませんが、マニュアルからは 'git status --short'は2文字を使ってリストアップされた各ファイルの状態をコード化することができます。出力の関連するビットだけを 'sed'または' grep'するシェルスクリプトで 'git status --short'を呼び出すことは可能です。 – kostix

+1

一方、@me_andと答えた方は、とにかくスクリプトを書く必要がありますので、彼のアプローチをとることがより論理的かもしれません(そして独自の磁器コマンドを実装する)。 – kostix

0

これは、bash 4で動作する便利な機能です。これには、あらゆる種類の単一ファイルの統計情報を追加できます。競合の数を表すコード行数。

#!/usr/bin/env bash 

shopt -s globstar 
for theFile in ./**/*; do 
    if [ -f "$theFile" ] 
    then 
     conflicts=`grep -c '^=======$' "$theFile"` 
     if [ "$conflicts" != "0" ] 
      then 
      echo "$theFile $conflicts" 
     fi 
    fi 
done