Как я могу помешать git думать, что я сделал переименование
у меня есть два файла index.html
и template.html
. Я переехал большую часть index.html
на template.html
и теперь git думает, что я сделал переименование, когда я добавляю оба файла. Можно ли предотвратить это в конкретных случаях?
4 ответа:
есть" принятый " ответ, но он не дает никакого намека на то, как ответить на вопрос.
правильный ответ, из git-log(1) и git-diff (1):
--no-renames Turn off rename detection, even when the configuration file gives the default to do so.
Почему 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>.
опять же, это не поможет вам, если файлы в основном похожи, но вы можете использовать эти значения для настройки как похожие они должны быть для того, чтобы считаться копиями или переименованиями. Ваш пробег может отличаться.
Если вы находитесь в момент перед фиксацией и "вам плохо, что 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 " означает переименованный. Обратите внимание, что здесь нет переименованных.