GIT - Исключить/проигнорировать файлы из commit
Мне нужно игнорировать файлы в git! Я не думаю, что игнорировать - это правильное слово; Я хочу, чтобы файлы находились в git, но я не хочу иметь возможность вносить в них изменения. Это может показаться странным для некоторых, но есть много, много примеров, что мне нужна эта функциональность. Единственный экземпляр, в котором я нуждаюсь сейчас, - это использование git с CMS; CMS не будет работать без файлов, которые он постоянно меняет, но я не хочу, чтобы эти файлы когда-либо были зафиксированы после первоначальной фиксации. (Это очень легко сделать с SVN и Tortoise).
WorkFlow:
- Получить все файлы, необходимые для запуска приложения.
- Игнорировать указанные каталоги/файлы при совершении.
Вот что я пробовал:
-
.gitignore
- файлы никогда не входят в git. Если файл уже находится в
кеш файл .gitignore ничего не делает.
-
/.git/info/exclude
- та же проблема, что и .gitignore, но только для
локальное репо.
- Ветвление - мастер = > LocalIgnores = > WorkingBranch. Когда
Рабочая ветвь объединяется с мастером, изменения, сделанные из
LocalIgnores заканчиваются мастером. Также, когда вы проверяете один из
новые ветки, удаленные файлы удаляются, а не игнорируются.
- Структура файла Thirdparty - каталог Thirdparty в корне
node, который содержит копию всех важных файлов третьих сторон, чтобы они могли
скопировать в рабочий каталог, который использует .gitignore
файл. (Это работает, но должно быть проще/лучше
solurtion).
Ответы
Ответ 1
Вот мой ответ из аналогичного вопроса.
git update-index должен делать то, что вы хотите
Это сообщит git, что вы хотите начать игнорировать изменения в файле
git update-index --assume-unchanged path/to/file
Если вы хотите начать отслеживание снова
git update-index --no-assume-unchanged path/to/file
Ответ 2
Другим решением является использование крюка pre-commit
. Подробнее см. git help hooks
.
-
Это сложнее настроить: вам нужно написать оболочку script, чтобы точно указать, что вы хотите разрешить или запретить, что, вероятно, означает, что вам нужно иметь хорошее понимание git.
-
Он более постоянный и гибкий: с трюками типа git update-index
вы можете случайно забыть его запустить и т.д. Но как только вы настроите крючок, вам больше не придется беспокоиться об этом.
/li >
Как и другие предложенные трюки, перехватчики автоматически не распространяются между репозиториями, но вы можете проверять их как обычные файлы и каждый из них связывает их с .git/hooks
.