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

Git - временно игнорировать тривиальные изменения файлов

Я ищу способ "скрыть" незначительные изменения, внесенные в несколько файлов в Git, чтобы они не отображались в состоянии git до тех пор, пока в эти файлы не будут внесены другие изменения.

Пример: у меня есть java файл, в котором единственное внесенное изменение - удаление неиспользуемого импорта (вкладчик забыл запустить сборку импорта до совершения). Теперь я удалил этот импорт, и изменение (очевидно) появилось в git. Поскольку у меня нет других изменений в этом файле, мне не очень нравится комментировать файл как часть другого (несвязанного) изменения или сделать это изменение автономным. Конечно, я мог бы отменить изменение и применять его только тогда, когда мне придется внести изменения в этот файл, но я мог бы "рискнуть" его забыть.

Существует ли команда для такой задачи? Он будет работать несколько иначе, как команда, принимающая без изменений, но не постоянным образом.

Каким будет правильный способ разрешить это, если такая команда недоступна?

Спасибо заранее.

4b9b3361

Ответ 1

В моем случае использования (разработка с использованием отредактированного файла конфигурации на моей личной машине, работающего на другой машине с неизменной конфигурацией), это было для меня решением:

начать игнорировать изменения в файле:

git update-index --assume-unchanged path/to/file

продолжить отслеживание:

git update-index --no-assume-unchanged path/to/file

Ответ 2

Сохраняйте свои изменения, которые не готовы в отдельной ветке. git rebase эта ветка на вершине новых изменений в основной истории при необходимости.

Будь то развитие в процессе, временные вещи, даже вещи, которые никогда не должны включаться в основную историю проекта - тот же процесс работает одинаково хорошо.

Если/когда изменения ветки готовы к включению в основную историю; слейте его. Если нет, держите их в отдельной ветке и продолжайте перезагрузку.

(примечание стороны: git merge --no-ff может быть полезно для создания слияния, даже если возможно быстрое переключение - в зависимости от правил вашего проекта это может быть предпочтительным)

Ответ 3

Существует несколько способов [хотя это может быть не чисто и аккуратно и потребует вашего внимания)

  • Добавьте файл, относящийся к .gitignore в своем репо, чтобы он не отображался для фиксации. Будьте осторожны, чтобы удалить это из .gitignore, когда вы готовы зафиксировать файл
  • Убедитесь, что вы не "сценируете" файл, оставаясь при этом остальными изменениями. Возможно, вы захотите написать обертку поверх git, которая обеспечит выполнение команд типа git commit -a или git add . на всех, кроме файла, находящегося под вопросом. Другой альтернативой может быть использование git gui или git citool, где вы можете визуально убедиться, что ваш файл не находится в "поставленной" области и, следовательно, никогда не получает передачи.
  • Другим способом было бы совершить все ваши изменчивые изменения, а затем git stash save ваш единственный рабочий файл. Позже, когда вы будете готовы изменить файл, вы можете git stash pop и продолжить работу и совершить.

Надеюсь, что помогает:)

Ответ 4

Просто не добавляйте тривиальные изменения.

Хорошая практика - внимательно изучить вещи, которые вы добавляете перед совершением.

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

git add -p.

Это еще проще, если вы используете gitx (R).