.gitignore不起作用

Gnu*_*eer 59 git

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

*.pyc
Run Code Online (Sandbox Code Playgroud)

现在,当我在回购的根目录下执行以下操作时.

git init
git add . 
git status 
Run Code Online (Sandbox Code Playgroud)

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

系统信息:Windows 7,cygwin

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

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
Run Code Online (Sandbox Code Playgroud)

我该如何进一步排除故障?

fre*_*ace 108

.gitignore仅适用于未跟踪的文件.如果您正在跟踪,.pyc那么.gitignore将不适用.删除.pycwith git rm并在下次执行git status时(以及其他任何内容)将不会显示在未跟踪文件列表中,也不会自动添加.


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

git update-index --assume-unchanged <files>
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请参阅的git更新索引(1)手册页中,相关的答案的.gitignore文件没有忽视相关答案的问题(GIT:忽略版本控制文件).

  • @Gnu工程师,他们被跟踪.它们位于索引中,是由`git add`创建的暂存区域.是否在创建".gitignore"之前将它们放置在那里是不可知的. (2认同)
  • 池上:问题解决了.这似乎是由于行结尾的格式.我用编辑器创建了.gitignore,后来通过echo重新创建.我现在做了一个d2u,它起作用了.谢谢你的帮助. (2认同)

ike*_*ami 23

man gitignore:

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

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


正如您所指出的,这些文件在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
#
$ 
Run Code Online (Sandbox Code Playgroud)

也许你做到了

git init
git add .
echo '*.pmc' >> .gitignore
git init
git add .
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以使用修复问题

git rm --cached -r .
git add .
Run Code Online (Sandbox Code Playgroud)

  • 使用`git rm --cached -r 时要小心。它实际上删除了当前目录中的所有内容 (2认同)

小智 16

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

  • 你救了我的一天! (3认同)

小智 5

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


Jus*_*tin 5

检查 .gitignore 文件中的行结尾。在 OS X 存储库中,我使用的是 CR 行结尾。切换到 LF 后一切又恢复正常了。

perl -p -e 's/\r/\n/g'  < .gitignore > .gitignore-new
mv .gitignore-new .gitignore
Run Code Online (Sandbox Code Playgroud)

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

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