Добавить .gitignore в gitignore

140

Можно ли добавить .gitignoreфайл в.gitignore себе?

.gitignore

Не работает хотя

Я не хочу видеть это в отредактированных файлах

7ochem
источник
8
Почему вы хотите это сделать? просто зафиксируйте свои изменения. .gitignoreдолжен быть частью вашего репозитория, перечисляя шаблоны файлов, которые являются нежелательными для проекта.
KurzedMetal
1
.gitignoreдолжен быть частью вашего репозитория, чтобы все в вашей команде игнорировали или проверяли одни и те же файлы. Тот факт, что он .gitignoreнаходится где-то в ваших папках с кодом, не означает, что вам нужно его развернуть.
Райан Ланди
возможный дубликат Как мне сказать Git игнорировать ".gitignore"?
Тот бразильский парень
вы можете использовать git rm --cached .gitignoreи отключать .gitignore
hassanzadeh.sd

Ответы:

170

Цель .gitignoreфайла - предотвратить случайную фиксацию некоторых общих файлов в проекте, например, сгенерированных файлов кэша, всеми участниками проекта. Поэтому не следует игнорировать.gitignore , так как он должен быть включен в репозиторий.

Если вы хотите игнорировать файлы только в одном репозитории, но хотите избежать фиксации списка игнорирования (например, для личных файлов), вы можете добавить их .git/info/excludeв этот репозиторий.

Если вы хотите игнорировать определенные файлы в каждом репозитории на вашем компьютере, вы можете создать файл, ~/.gitignore_globalа затем запустить

git config --global core.excludesfile ~/.gitignore_global
Ларс Нюстрём
источник
36

.Gitignore может игнорировать себя, если он никогда не регистрировался :

mhaase@ubuntu:~$ git --version
git version 1.7.9.5
mhaase@ubuntu:~$ git init temp
Initialized empty Git repository in /home/mhaase/temp/.git/
mhaase@ubuntu:~$ cd temp
mhaase@ubuntu:~/temp$ touch .gitignore foo bar baz bat
mhaase@ubuntu:~/temp$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .gitignore
#       bar
#       bat
#       baz
#       foo
mhaase@ubuntu:~/temp$ echo "foo" >> .gitignore
mhaase@ubuntu:~/temp$ echo ".gitignore" >> .gitignore
mhaase@ubuntu:~/temp$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       bar
#       bat
#       baz
nothing added to commit but untracked files present (use "git add" to track)

Если вы отметите .gitignore (прежде чем вы укажете ему игнорировать себя), он всегда будет отображаться в статусе git, даже если вы позже измените его, чтобы игнорировать себя.

Марк Э. Хаас
источник
1
Собственно, это мой случай. Я хочу, чтобы у меня работал местный .gitignoreжитель git-svn, которого никто не должен видеть. Так что я просто добавил это к себе, и это сработало. Но потом я погуглил, чтобы посмотреть, объяснят ли некоторые встревоженные люди другим, что это «плохо». Этот ответ следует принять, и тогда я также проголосую за .git/info/excludeпредложения. Так что его просто нужно отследить ... Не очень удивительно, по крайней мере, если вас когда-либо "подрывали" (svn).
Tomasz Gandor
.gitignoreСначала у меня есть резервная копия файла. Затем я использую git rm .gitignoreи фиксирую это изменение. Наконец, .gitignoreснова добавьте и зафиксируйте файл с правилом для .gitignore. Оно работает!
qzhang
4
Чтобы исправить это, вы можете запустить git rm --cached .gitignore.
Гидеон
19

На самом деле нет веских причин для этого. Если вы хотите, чтобы файлы игнорировались только для вашего клона , добавляйте их .git/info/exclude, а не в .gitignoreфайл.

Daenyth
источник
Я получаю сообщение «Невозможно завершить операцию из-за существующих изменений в следующем файле», и файл, в котором он указан, является тем, который у меня есть в исключении. Есть идеи почему?
Пол Маккарти,
3

После того, как вы войдете .gitignoreв свой файл gitignore, попробуйте следующее:

git rm -r --cached .
git add --all
git commit -m "ignoring gitignore"
git push --set-upstream origin master

Он должен работать, хотя, как уже было сказано, игнорирование gitignore может быть контрпродуктивным, если ваше репо используется несколькими пользователями.

Арнаб Саньял
источник
2

Да, ты можешь; вы по-прежнему видите его в отредактированных файлах, потому что он все еще отслеживается git, а файлы, отслеживаемые git, всегда помечаются как измененные, даже если они находятся в .gitignore. Так что просто отследите это.

Но почему бы не зафиксировать или сбросить изменения, которые у вас есть? Это гораздо лучший способ удалить его из статуса ... Также имейте в виду, что любой свежий клон вашего репозитория должен будет добавить его .gitignore, что может раздражать.

CharlesB
источник
Да, и вам got rm --cached .gitignore, наверное , нужно будет удалить его отдельно от git .
Tadeck
git rm --cached .gitignore удаляется из git. Это разрушительно и нежелательно. Как просто игнорировать .gitignore для локального клона?
javadba
0

Вы можете добиться этого, записав это в свой файл .gitignore. Он *добавит все в список игнорирования, а затем !.gitignoreудалит файл .gitignore из списка игнорирования.

*
!.gitignore
Анкит Сингх
источник
3
Это достигает противоположного тому, что хочет OP
Дмитрий Паржицкий
Да, правильно, я уже говорил о том же. *проигнорирует все. Включая .gitignoreфайл.
Анкит Сингх,
1
Я имею в виду, OP пытается удалить в .gitignoreфайл из кодовую (добавляя его к себе, что на самом деле не имеет смысла, но кто я такой, чтобы судить). Здесь я вижу предложение, которое гарантирует, что файл никогда не игнорируется, что, в свою очередь, означает, что он существует ( добавлен в) кодовую базу
Дмитрий Паржицкий
Это правильно. Сам вопрос кажется запутанным. Но ладно
Анкит Сингх