2013-02-12 1 views
6

Я пытаюсь разместить в истории git последовательные снимки конкретного проекта. Я делаю это путем заполнения каталога хранилища с содержимым каждого снимка и затем запуститьКак я могу контролировать порог переименования при записи файлов в git?

git add -A . 
git commit -m 'Version X' 

Этот метод рекомендуется в this answer. Тем не менее, я вижу, что фиксация распознает переименование файлов только тогда, когда 100% содержимого файла остается неизменным. Есть ли способ повлиять на определение переименования git commit, чтобы найти переименования, где содержимое файла немного изменилось? Я вижу, что git merge и git diff имеют различные опции для управления порогом переименования, но эти параметры не существуют для git commit.

вещи я попытался:

  • Расположение переименованные файлы с самогонного сценария, и выполнение коммита с исходными файлами переименованы в новых местах до совершения нового содержимого файла. Однако это вводит искусственный коммит и кажется неэлегантным, потому что он не использует функции обнаружения переименования git.
  • Создание отдельной ветви для каждого снимка, а затем объединять последовательные ветви на master используя

    git merge -s recursive -Xtheirs -Xpatience -Xrename-threshold=20

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

+1

Имеет ли это значение? Установка такой опции в 'git commit' повлияла бы только на интерфейс UI команд; Git фактически не отслеживает переименования. –

+0

Я бы хотел, чтобы git log --follow' работал во всех переименованиях. С простой последовательностью фиксаций она останавливается в самой последней версии файла. –

ответ

10

git commit не обнаруживает переименований. Он просто пишет контент в репозиторий. Переименование (и копии также) обнаруживаются только после факта, то есть при запуске git diff, git merge и друзей. Это потому, что git не сохраняет информацию о переименовании/копировании.

+1

Вывод 'git commit' указывает, были ли некоторые файлы переименованы или нет. Я видел, что, когда этот вывод указывает на переименование, я могу следить за историей файла с помощью 'git log --follow'. Это то, чего я хочу выполнить. –

+1

Но эта информация * не хранится *, поэтому для git-commit не имеет смысла иметь такую ​​возможность. –

+1

Меня отвлекало из-за того, что фиксация с тем же контентом в новом месте, кажется, улучшает эвристику, используемую 'git log --follow'. –

9

Как указано в комментариях и другом ответе, нет смысла корректировать порог обнаружения переименования в фиксации, поскольку это только изменит вывод команды, а не то, что на самом деле хранится в фиксации.

То, что вы, , может, однако, отрегулирует порог обнаружения переименования в команде git log. Вы делаете это, используя параметр --find-renames. В основном это результат, которого я хотел достичь.

+0

git log --find-renames просто показывает мне журнал фиксации. Я знаю, что мне нужно изменить процент порога копирования/переименования, но я не видел прямых примеров синтаксиса.Можете ли вы быть чуть более конкретным? – anon58192932

+0

-find-renames изменяет порог. Я не знаю вариантов, которые обеспечивают вам больший контроль. –

+0

Я нашел больше о моей точной проблеме. Я делаю тонну изменений в моем коде в течение дня. Включая такие вещи, как добавление и удаление файлов. Затем я запускаю git add * .java, чтобы добавить все мои изменения в текущий список изменений. И git неправильно предполагает, что некоторые файлы являются переименованиями, которые ни один из них не является. Чтобы обойти это, мне нужно добавить файлы, которые, как предполагается, переименовываются в эксклюзивный список изменений, фиксировать их, а затем выполнять другое коммит со всеми другими файлами. Поэтому я надеялся изменить порог поиска-переименований, но не могу найти его для команды git add – anon58192932

 Смежные вопросы

  • Нет связанных вопросов^_^