.gitignore不起作用

时间:2011-06-17 00:35:14

标签: git

我在我的仓库的根目录下有一个.gitignore文件。 .gitignore文件具有以下模式以排除已编译的Python文件,这是文件中的唯一行。

*.pyc

现在我在回购的根目录下执行以下操作。

git init
git add . 
git status 

它表明它仍然跟踪.pyc文件并尝试将其添加为新文件。见下面的输出。

系统信息:Windows 7,cygwin

注意:这个问题很明显,不是关于已被跟踪的被忽略文件。我还在.gitignore文件上尝试了DOS和Unix风格的行结尾。

git status给出:

# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   .gitignore
#   new file:   feedapp/__init__.py
#   new file:   feedapp/appconfig.py
#   new file:   feedapp/appconfig.pyc

如何进一步排除故障?

5 个答案:

答案 0 :(得分:95)

.gitignore仅适用于未跟踪文件。如果您要跟踪.pyc,则.gitignore将不适用。使用.pyc删除git rm,下次执行git status时,{和其他任何内容}将不会显示在未跟踪文件列表中,也不会自动添加。< / p>


否则,如果您需要忽略已在版本控制下的文件,请更新索引以忽略对已在版本控制下的文件的更改:

git update-index --assume-unchanged <files>

有关详细信息,请参阅git-update-index(1) Manual Pagerelated answer to .gitignore file not ignoringrelated answer to question (GIT: Ignoring Version-Controlled Files)

答案 1 :(得分:22)

man gitignore

gitignore文件指定git应忽略的故意**未跟踪文件**。请注意,所有gitignore文件实际上只涉及git
尚未跟踪的文件

git rm file会停止跟踪它们。我找不到从repo中删除所有被忽略文件的方法。


正如您所指出的,这些文件似乎不存在于回购中。在这种情况下,您的git行为既不符合我的文档或行为,也无法帮助您。

$ mkdir foo
$ cd foo
/home/ikegami/foo
$ mkdir feedapp
$ touch feedapp/__init__.py
$ touch feedapp/appconfig.py
$ touch feedapp/appconfig.pyc
$ echo '*.pyc' > .gitignore
$ git init
Initialized empty Git repository in /home/ikegami/foo/.git/
$ git add .
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   .gitignore
#       new file:   feedapp/__init__.py
#       new file:   feedapp/appconfig.py
#
$ 

也许你做过

git init
git add .
echo '*.pmc' >> .gitignore
git init
git add .

在这种情况下,您可以使用

解决问题
git rm --cached -r .
git add .

答案 2 :(得分:15)

我遇到了完全相同的问题。我发现运行"someText" > .gitignore创建了一个带有奇怪编码的文件。我将其改为UTF-8,然后一切正常。

答案 3 :(得分:5)

我遇到了完全相同的问题 - 即使我在第一次添加任何内容之前准备了.gitignore文件。 我发现问题出在我的忽略文件的空白处。 请勿在忽略文件中添加任何空格,然后重试。我想一切都会好起来的。 祝你好运

答案 4 :(得分:4)

检查.gitignore文件中的行结尾。在OS X仓库中,我的使用CR线路终端。切换到LF后,一切都恢复了。

perl -p -e 's/\r/\n/g'  < .gitignore > .gitignore-new
mv .gitignore-new .gitignore

控制台骑师可能会想要使用sed

背景:我在电源故障后从Windows存储库中复制了我的工作副本。