Может ли Git переименовывать совпадения игнорировать изменения пробелов? - PullRequest
0 голосов
/ 10 октября 2018

Когда я переименовываю файл и изменяю пробел (например, изменяю отступ), Git не может распознать переименование.И я не могу найти какую-либо комбинацию git diff флагов, чтобы заставить ее игнорировать пробелы при поиске переименований.Это усложняет рассмотрение в противном случае простых рефакторингов.

Например ...

$ git init
$ ruby -e '100.times { puts "Basset hounds got long ears" }' > file
$ git add file
$ git commit -m 'first commit'
$ git mv file file2

На этом этапе все в порядке.

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    renamed:    file -> file2

Теперь, если я сделаю отступ в строкахв файле Git больше не распознает переименование.

$ ruby -i -pe 'gsub(/^/, "  ")' file2
$ git add .
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    deleted:    file
    new file:   file2

После фиксации git diff -w HEAD^ по-прежнему показывает удаление и новый файл.Я не могу найти никаких опций git diff, которые распознают переименование.

Есть ли набор опций, которые позволяют Git игнорировать пробелы при обнаружении копий и переименований?

1 Ответ

0 голосов
/ 11 октября 2018

Git не может сделать это по умолчанию.

Однако, если у вас есть ноу-хау, вы можете сделать это, изменив вычисление индекса подобия.Соответствующий код можно найти здесь в diffcore-delta.c (что хорошо документировано) и здесь в diffcore-rename.c.

Имейте в виду, что есть некоторые начальные проверкии остатки, задействованные до того, как Git даже проверит, можно ли считать файл переименованным (внутренне).Эта проверка пройдет с ответом «да» на следующий вопрос:

Это обычный файл ненулевого размера, размер файла которого существенно не изменился?

Таким образом, один из подходов состоит в том, чтобы добавить условную проверку до этой точки, чтобы при наличии только различий в пробелах индекс сходства вычислялся до 100%, в противном случае Git должен делать то, что обычно делает.

Тем не менее, что выОпытный, поэтому он часто рекомендует сначала переименовать файл перед изменением его содержимого, но имена не так просто получить правильно с первого раза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...