競合のリスト(競合するファイルの名前とその中の競合の数)を確認する方法はありますか?
私が発見した唯一のことは、事前に作成された.git/MERGE_MSG
ファイルを確認することです...しかし、これは私が実際に検索しているものではありません...
編集:もちろん、kostixが指摘git status
しているように、簡単で、明白で、過剰に設計された無料の答えはです。これの欠点は、作業コピーと比較してインデックスのステータスをチェックすることです。これは低速ですが、以下はインデックスのみをチェックするため、操作がはるかに高速になります。 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
1つのファイル内の競合の数を計算するには、競合マーカー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
git status
は、自動的にマージできず、競合しているファイルを、そのようなファイルの解決された状態を記録する方法のヒントとともに示しています。
このコマンドは、競合が発生したすべてのファイルと各ファイルの競合の数のリストを表示します。
git --no-pager diff --name-only --diff-filter=U |xargs grep -c '^=======$'
git --no-pager diff --name-only --diff-filter=U
これにより、マージされていないすべてのファイルのリストが表示されます(ソース)
git --no-pager diff --name-only --diff-filter=U | wc -l
git --no-pager diff --name-only --diff-filter=U |xargs grep -c '^=======$'
これにより、次のような出力が得られます(foo.txtには2つの競合があり、bar.txtには5つの競合があります)。
path/to/foo.txt:2
path/to/bar.txt:5
また、@ me_andが彼の回答で示唆しているように、エイリアスを作成することも役立つ場合があります。
これはbash4で機能する便利なものです。これにあらゆる種類の単一ファイル統計を追加できます。たとえば、競合の数を表すコードの行数などです。
#!/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