将.gitignore添加到gitignore


140

是否可以将.gitignore文件添加到.gitignore自身?

.gitignore

虽然不起作用

我不想在编辑的文件中看到它


8
你为什么想这么做?只需提交您的更改。.gitignore应该是您存储库的一部分,列出了项目中的垃圾文件模式。
KurzedMetal 2012年

1
.gitignore应该是您的存储库的一部分,以便团队中的每个人都忽略或检入相同的文件。仅因为.gitignore位于代码文件夹中的某个位置并不意味着您必须进行部署。
瑞安·伦迪


您可以使用git rm --cached .gitignore和追踪.gitignore
hassanzadeh.sd

Answers:


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 2014年

我先.gitignore备份了文件。然后,我使用git rm .gitignore并提交该更改。最后,.gitignore使用的规则再次添加并提交文件.gitignore。有用!
qzhang 2015年

4
要解决此问题,您可以运行git rm --cached .gitignore
基甸

19

这样做并没有充分的理由。如果你想要的文件忽略仅克隆,将它们添加到.git/info/exclude,而不是在 .gitignore文件中。


我收到“由于对以下文件的现有更改而无法完成操作”,并且该文件列出了我排除的文件。知道为什么吗?
Paul McCarthy

3

输入.gitignoregitignore文件后,请尝试以下操作,

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

尽管应该已经说过了,但它应该可以工作,如果您的仓库由多个用户共享,则忽略gitignore可能适得其反。


2

是的你可以; 您仍会在已编辑文件中看到它,因为它仍被git跟踪,并且git跟踪的文件始终标记为已修改,即使它们位于.gitignore中也是如此。因此,只需取消跟踪即可

但是,为什么不提交或重置对它所做的更改呢?这是一种将其从状态中删除的更好的方法。还要注意,您回购的任何新克隆都必须添加.gitignore,这可能会很烦人。


是的,您可能需要将其与git by分开删除got rm --cached .gitignore
塔德克2012年

git rm --cached .gitignore正在从git中删除。那是破坏性的,是不可取的。如何只让.gitignore被本地克隆忽略?
javadba

0

您可以通过将其写入.gitignore文件来实现。该*会加重一切忽略列表,然后!.gitignore将删除忽略列表中的.gitignore文件。

*
!.gitignore

3
这实现了OP事与愿违,虽然
梅德Parzhitsky

是的,正确的,我已经提到过。*将忽略一切。包括.gitignore文件。
Ankit Singh

1
我的意思是,OP正试图删除.gitignore从代码库文件(将其添加到本身,这并没有真正意义上的,但我是谁法官)。在这里,我可以看到一个建议,可以确保永远不会忽略该文件,这又意味着该文件存在于(添加到)代码库中
Dmitry Parzhitsky

没错 问题本身似乎是扭曲的。但是,好吧。
Ankit Singh,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.