Я создал версию файла по умолчанию, включенную в репозиторий git. Важно, чтобы при клонировании репозитория кто-то получил копию этого файла. Однако я хотел бы настроить git так, чтобы он позже игнорировал изменения в этом файле. .gitignore
работает только с неотслеживаемыми файлами.
Моя мотивация состоит в том, что этот файл содержит информацию о машине. Я хотел бы предоставить значения по умолчанию, позволяя людям вносить локальные изменения, которые не будут возвращены в исходный репозиторий, создавая конфликты слияния, когда мы извлекаем новые изменения.
Обычно мы довольно ленивы и git add .
много используем, поэтому я почти уверен, что если я не могу сказать git игнорировать этот файл, изменения в нем в конечном итоге будут зафиксированы и отправлены.
Подвести итоги,
- Я хотел бы создать файл, назовите его
default_values.txt
добавленным в мой репозиторий git и включенным, когда кто-то клонирует этот репозиторий. git add .
не следует добавлятьdefault_values.txt
в коммит.- Это поведение следует передать любым клонам репозитория.
источник
Ответы:
Как отмечали многие другие, хорошее современное решение:
Изменения в этом файле, как локальные, так и исходящие, будут игнорироваться до тех пор, пока вы снова не решите разрешить их с помощью:
Вы можете получить список файлов, которые отмечены как пропущенные:
Обратите внимание, что в отличие от этого
--skip-worktree
,--assume-unchanged
статус будет потерян после того, как произойдет изменение восходящего потока.источник
--no-skip-worktree
чтобы добавить свои изменения.--skip-worktree
статус файла, прежде чем вы сможете переключать ветви, если этот же файл отслеживается в другой ветви.git status
, но когда я попытался оформить заказ в другую ветку, у меня получилосьerror: Your local changes to the following files would be overwritten by checkout:
, даже -f не помогаетerror: Entry 'wix-stores-merchant-app/demo/credentials.js' not uptodate. Cannot merge.
git ignore
иgit unignore
.То, что вы ищете, это
git update-index --assume-unchanged default_values.txt
.См. Дополнительные сведения в документации: http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html.
источник
skip-worktree
вместоassume-unchanged
дополнительной информации stackoverflow.com/questions/13630849/…Подход, который я обычно видел, - это создать файл с другим именем, например: default_values_template.txt, и поместить default_values.txt в ваш .gitignore. Попросите людей скопировать default_values_template.txt в default_values.txt в своих локальных рабочих областях и внести необходимые изменения.
источник
.sample
суффикс. Так что в вашем случаеdefault_values.txt.sample
Взгляните на скрипты smudge / clean. Таким образом, вы можете управлять версиями файла, но когда он будет извлечен, вы "размазываете" его, заменяя общие данные / данные-заполнители машинными данными в файле.
Когда вы его фиксируете, вы «очищаете» его, заменяя информацию, относящуюся к машине, общей или замещающей информацией.
Скрипты размазывания / очистки должны быть детерминированными в том смысле, что их многократное применение в разном порядке будет эквивалентно простому запуску последнего в последовательности.
То же самое можно применить и к паролям, если вам нужно открыть репозиторий, но его содержимое может содержать конфиденциальную информацию.
источник
user.json
которое нужно перезаписать с помощью каждого кредита разработчика, но я не хочу, чтобы разработчик случайно проверил его кредиты.Я решил эту проблему, определив «чистый» фильтр, чтобы просто отбирать содержимое файла в индексе.
git show :path/to/myfile
должен просто распечатать содержимое индекса для указанного файла, чтобы мы могли использовать это в сценарии для замены рабочей копии нетронутой копией в индексе:Установите это как «чистый» фильтр для соответствующего файла (при условии, что вы поместили его в «discard_changes»):
К сожалению, я не могу найти способ сделать это универсальным для нескольких файлов, поскольку нет способа определить, какой файл мы обрабатываем, из чистого скрипта. Конечно, ничто не мешает вам добавить разные правила фильтрации для каждого файла, но это немного неудобно.
источник
Я нашел решение, которое подходит моей команде. Мы делимся нашими githooks через символические ссылки, и после добавления файла шаблона в git я добавил ловушку предварительной фиксации, которая проверяет, был ли изменен файл шаблона, и если да, то я
git reset -- templatefile.txt
. Если это единственный измененный файл, я также прерываю фиксацию.источник
Предлагаю изучить подмодули. Если вы помещаете файлы, специфичные для компьютера, в подмодуль, git add игнорирует его.
источник