Подтвердить что ты не робот

Как я могу предотвратить git от мысли, что я переименовал

У меня есть два файла index.html и template.html. Я переместил большую часть index.html в template.html, и теперь git думает, что я сделал переименование, когда добавляю оба файла. Можно ли предотвратить это в конкретных случаях?

4b9b3361

Ответ 1

Существует "принятый" ответ, но он не дает никакого намека на то, как ответить на вопрос.

Правильный ответ, из git -log (1) и git -diff (1):

   --no-renames
       Turn off rename detection, even when the configuration
       file gives the default to do so.

Ответ 2

Почему Git Думает, что ваши файлы копируются

Git отслеживает содержимое, а не имена файлов. В результате, если два файла имеют практически одинаковый контент, Git будет считать, что вы скопировали или переименовали файл. Если вы прочитали git -log (1), вы узнаете:

Показатель подобия представляет собой процент неизмененных строк, а индекс различий - это процент измененных строк. Это округленное целое число, за которым следует знак процента. Таким образом, значение индекса подобия 100% зарезервировано для двух равных файлов, а 100% -ное отличие означает, что ни одна строка из старого файла не превратилась в новую.

Итак, если ваш индекс подобия равен 100%, Git будет считать, что копия. Лучше всего добавить разумное сообщение в журнал или заметку (см. git -notes (1) для получения дополнительной информации), чтобы объяснить, что происходит, если вы не думаете, что Git делает правильные вещи.

Настройка индекса подобия

Вы также можете попробовать настроить значения Git для рассмотрения чего-либо копии или переименования. В руководстве для git -log (1) говорится:

-M[<n>], --find-renames[=<n>]

If generating diffs, detect and report renames for each commit. For
following files across renames while traversing history, see --follow. If
n is specified, it is a threshold on the similarity index (i.e. amount
of addition/deletions compared to the file’s size). For example, -M90%
means git should consider a delete/add pair to be a rename if more than
90% of the file hasn’t changed.

-C[<n>], --find-copies[=<n>]    

Detect copies as well as renames. See also --find-copies-harder.
If n is specified, it has the same meaning as for -M<n>.

Опять же, это не поможет вам, если файлы в основном похожи, но вы можете использовать эти значения для настройки того, насколько они должны быть похожими на копии или переименования. Ваш пробег может отличаться.

Ответ 3

Если вы находитесь в мгновение незадолго до фиксации и "вам плохо, что git сошел с ума", просто отмените добавление неоднозначного файла git, который вы переименовали, выполните коммит, затем добавьте двусмысленный файл снова и совершить:

git reset ambiguous_file_git_thought_you_renamed
git commit
git add ambiguous_file_git_thought_you_renamed
git commit

Это сработало для меня.

Двойная проверка не была переименована:

git diff --name-status -C HEAD^^ HEAD
M       ambiguous_file_git_thought_you_renamed
M       original_file

"M" в начале означает измененный, "R" означает переименованный. Обратите внимание: здесь нет переименованного.