Ответ 1
Статус B
"сломанная пара" никогда не появляется непосредственно в выводе --name-status
, он полезен только как аргумент опции --diff-filter
, когда также используется опция -B
(--break-rewrites
). Используя его в качестве фильтра, вы выбираете файлы, в которых был удален или изменен хотя бы определенный процент их содержимого.
Это "нарушение" не очень полезно при использовании --name-status
, поскольку точка "взлома" заключается в основном в изменении способа создания текста diff: он исключает линии контекста (неизменные строки) из выходного файла diff вместо генерации добавьте и удалите строки, которые потребуются вокруг любых "случайных" общих подпоследовательностей, обнаруженных алгоритмом diff.
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
"unknown" никогда не должен появляться. Если он появляется, это означает имя пути, которое не является ни unmerged, не добавлено, не удалено, не изменено или не изменило свой тип (эффективно: без изменений) неожиданно превратило его в ядро внутренней системы дифференциала; также будет создана ошибка feeding unmodified <pathname> to diffcore
.
Кажется, что он оставлен из какого-то старого режима работы.