Могу я 'фиксация мерзавца' файл и игнорировать его изменения содержания?

У каждого разработчика в моей команде есть их собственная локальная конфигурация. Та конфигурационная информация хранится в названном файле devtargets.rb который используется в наших задачах сборки граблей. Я не хочу, чтобы разработчики ударили devtargets файл друг друга, все же.

Моя первая мысль состояла в том, чтобы вставить тот файл .gitignore перечислите так, чтобы это не посвящало себя мерзавцу.

Затем я начал задаваться вопросом: действительно ли возможно фиксировать файл, но проигнорировать изменения в файле? Так, я фиксировал бы версию по умолчанию файла и затем когда разработчик изменяет его на их локальной машине, мерзавец проигнорировал бы изменения, и он не обнаружится в списке измененных файлов, когда Вы сделаете состояние мерзавца или фиксацию мерзавца.

Это возможно? Это, конечно, была бы хорошая функция...

325
задан alex 27 August 2017 в 05:44
поделиться

2 ответа

Конечно, я делаю именно это время от времени, используя

git update-index --assume-unchanged [<file> ...]

Чтобы отменить и снова начать отслеживание (если вы забыли, какие файлы не отслеживались, см. Этот вопрос ):

git update-index --no-assume-unchanged [<file> ...]

Соответствующая документация :

- [no-] accept-unchanged
Когда этот флаг указан, имена объектов, записанные для путей, не обновляются. Вместо этого эта опция устанавливает / снимает бит «считать неизменным» для путей. Когда установлен бит «считать неизменным», пользователь обещает не изменять файл и позволяет Git предполагать, что файл рабочего дерева соответствует тому, что записано в индексе. Если вы хотите изменить файл рабочего дерева, вам нужно сбросить бит, чтобы сообщить Git. Это иногда полезно при работе с большим проектом в файловой системе, которая имеет очень медленный системный вызов lstat (2) (например, cifs).

Git завершится ошибкой (корректно), если потребуется изменить этот файл в индексе, например. при слиянии в коммите; таким образом, в случае изменения предполагаемого неотслеживаемого файла в восходящем направлении, вам нужно будет обработать ситуацию вручную.

Изящный отказ в этом случае означает, что если есть какие-либо изменения в восходящем потоке к этому файлу (допустимые изменения и т. Д.), Когда вы выполняете вытягивание, он скажет:

$ git pull
…
From https://github.com/x/y
   72a914a..106a261  master     -> origin/master
Updating 72a914a..106a261
error: Your local changes to the following files would be overwritten by merge:
                filename.ext

и откажется от слияния.

На этом этапе вы можете преодолеть это, либо отменив свои локальные изменения, вот один способ:

 $ git checkout filename.ext

затем снова потяните и повторно измените локальный файл, либо можно установить –no-accept-unchanged , и в этот момент вы можете сделать обычный тайник, выполнить слияние и т. д.

426
ответ дан 23 November 2019 в 00:51
поделиться

Обычной практикой является создание devtargets.default.rb и зафиксируйте его, а затем проинструктируйте каждого пользователя скопировать этот файл в devtargets.rb (который находится в списке .gitignore). Например, CakePHP делает то же самое для своего файла конфигурации базы данных, который естественным образом меняется от машины к машине.

39
ответ дан 23 November 2019 в 00:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: