2016-03-09 2 views
0

Я работаю над проектом, который должен отслеживать его каталог node_modules. Я действительно не хочу удалить мою глобальную ссылку gitignore на этот каталог, потому что все остальные проекты должны не отслеживать каталог node_modules.Может ли проект git отслеживать каталог, указанный в моем глобальном gitignore?

Есть ли способ заставить git отслеживать что-то на уровне проекта? Или мне нужно пройти через все проекты, проверяя, что у каждого есть свой собственный игнор, а затем удалить ссылку со мной глобального gitignore?

ответ

1

Да, вы можете добавить отрицание к локальному .gitignore, чтобы git отслеживать его только для этого проекта.

!node_modules 
+0

Идеальный смысл. Благодаря! – Benjamin

3

Если файл отслеживается, его присутствие в игнор файла игнорируется (если можно так выразиться :-)).

Я всегда говорил, что .gitignore - это неправильное имя файла, потому что это не «список файлов для игнорирования». Вместо этого у него есть две цели. Git проверяет запись игнорируемых файлов в двух случаях:

  • , когда речь идет о тисках, что есть неотслеживаемый файл или
  • , когда речь идет о колошматить файл и не уверен, если это разрешено.

Первый случай наиболее часто виден из git status: добавление файла или шаблона, в игнор файлы говорит мерзавец «, пожалуйста, заткнись о *.o и тому подобное, они не должны быть отслежены, так дон «Не жалуйтесь, что их не отслеживают». В этом случае записи, вероятно, должны быть в файле с именем .git-shut-up-about-these-files.

Второй случай немного более коварный. Допустим, у вас в репозитории git есть фиксация с файлами a1 и a2, и это ваш текущий commit (потому что это кончик ветки или потому что вы сделали git checkout <commit> или что-то еще, и эти два файла находятся в этом commit: для аргументации скажем, что это фиксация наконечника на master). Давайте также скажем, что у вас есть еще совершить 1234567 только с файлом a1, no a2. Если вы сейчас сделаете:

git checkout 1234567 

мерзавец должен удалить файл a2. Это нормально, потому что это в вашей другой фиксации (кончик master), a2 есть. Если вы переключитесь обратно:

git checkout master 

мерзавец воссоздает a2.

Но что, если на кончике master, есть файл с именем important это не в 1234567? Вы git checkout 1234567, а затем остановиться и сделать некоторые важные примечания:

$EDITOR important 

Вы выписывать эти важные заметки и выйти из редактора, а затем принять решение git checkout master.Git теперь должен сжимать заметки, которые вы только что написали, потому что в конце master содержится файл с именем important.

Что git будет делать в этом случае, это проверить свои файлы игнорирования для имени important. Если это так, git может стереть этот файл и заменить его на коммит. Если не, git checkout предупреждает, что проверка будет перезаписана important и попросит вас сначала ее снять.

Эти записи имен файлов, вероятно, должны быть в файле с именем .git-go-ahead-and-clobber-these-files-they-are-unimportant.

Отметьте, что нет записи, которую вы можете сделать, чтобы отметить файл «не хранить в репозитории, но драгоценный: не сбивать».

+0

Действительно информативный ответ. Я ценю ясность. Всегда лучше учиться мышлению за командой, а не только самой команде. Благодаря! – Benjamin