17

git diffたとえば、の一部のオプションでは--name-status、ファイル名の横にステータス レターが出力されます。彼らです:

A、C、D、M、R、T、U、X、B

…そして彼らは意味します

追加 (A)、コピー済み (C)、削除済み (D)、変更済み (M)、名前変更済み (R)、タイプ (通常のファイル、シンボリックリンク、サブモジュールなど) の変更 (T)、マージされていない (U)、不明 (X) )、またはペアリングが壊れています(B)。

質問:XとのステータスはどのようBに解釈されるべきですか? また、どのような状況でそれらが表示されるようになったのですか? の出力にそのようなステータスが表示されるまでの一連の手順とgit-diff、それらを修正する方法を教えてください。

4

1 に答える 1

18

B壊れたペア」ステータスは、出力に直接表示されることはありません。オプション( )も使用する場合--name-statusに、オプションの引数としてのみ役立ちます。これをフィルターとして使用すると、コンテンツの少なくとも一定の割合が削除または変更されたファイルが選択されます。--diff-filter-B--break-rewrites

この「改行」は、主に差分テキストの生成方法を変更することであるため、あまり役に立ちません--name-status。追加行と削除行を生成する代わりに、差分出力からコンテキスト行 (変更されていない行) を削除します。差分アルゴリズムがたまたま見つけた「ランダムな」共通サブシーケンスの周りに必要です。

git init broken-pairs
cd broken-pairs
nums() { seq "$1" "$2" 2>/dev/null || jot $(($2 - $1 + 1)) "$1"; }
nums   0  99 > a
nums 100 199 > b
git add a b
git commit -ma=0-99,b=100-199
nums 200 299 > a
{ nums 100 149; nums 350 399; } > b
git diff --name-status --diff-filter=B             # selects nothing
git diff --name-status --diff-filter=B -B          #         M100    a
git diff --name-status --diff-filter=B -B/50       #         M100    a M050    b

X不明」ステータスが実際に表示されることはありません。表示される場合は、マージ解除、追加、削除、変更されていないパス名、またはそのタイプが変更された (事実上: 変更されていない) パス名が予期せず内部差分機構のコアになったことを意味します。エラーfeeding unmodified <pathname> to diffcoreも生成されます。

古い操作モードから残っているようです。

于 2011-05-20T07:19:19.603 に答える