.gitignore不工作

我的.gitignore文件似乎被git忽略 – .gitignore文件可能会损坏? git预期哪种文件格式,语言环境或文化?

我的.gitignore

 #this is a comment debug.log nbproject/ 

git status输出:

 # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # debug.log # nbproject/ nothing added to commit but untracked files present (use "git add" to track) 

我想debug.lognbproject/不出现在未跟踪的文件列表中。

我应该从哪里开始着手解决这个问题?

即使你还没有跟踪到目前为止的文件,git似乎也能够“知道”他们,即使你把它们添加到.gitignore


注意:首先提交当前的更改,否则将丢失它们。


然后从你的git仓库的顶部文件夹运行以下命令:

 git rm -r --cached . git add . git commit -m "fixed untracked files" 

首先确认你目前的变化,否则你将失去它们。

 git rm . -r --cached git add . git commit -m "fixed untracked files" 

当.gitignore文件不工作(向.gitignore文件中添加内容或从.gitignore文件中删除某些内容)时,可以检查以下提示:

  1. 你必须注意有时可能会影响你的gitignore的全球gitignore文件。
  2. 当你添加一些东西到.gitignore文件中,首先作为回答这个问题的人:

     git rm -r --cached . git add . git commit -m "fixed untracked files" 
  1. 当你从.gitignore文件中删除的东西。 以上步骤不适用于您 。 你可以试试这个:
  git add -f "filetype" git commit -m “Refresh removing filetype from .gitignore file.” 

“文件类型”是指你想要从.gitignore文件中删除的文件或文件类型。 您想要再次跟踪文件类型。

固定。 好的,我在Windows的记事本中创建了.gitignore文件,但它不工作。 当我在linux中查看.gitignore文件时,它看起来像有组织的乱码 – 也许记事本写出了unicode而不是ascii或任何8位。

所以我重写了我的Linux机器上的文件,当我把它拉回到窗口,它工作正常! 欢呼!

如果不添加另一个提交到您的项目,一行将足以使.gitignore工作,因为它应该是:

 git rm -r --cached debug.log nbproject 

这将从存储库中删除它,但仍然保持它们的实际,用简单的英语,它删除任何有关他们的变化的历史,也不会跟踪他们的变化,在任何未来的提交。 更好的解释,你可以在这里找到它。

此问题的另一个原因是语句前的空格或制表符:

例:

 #Be aware of following: notWorkingIgnore.* workingIgnore.* 

正如下面的评论所指出的,尾随空间也是一个问题

 #Be aware of following: notWorkingIgnore.* #<-Space workingIgnore.*#<-Nospace 

我注意到.gitignore的编码是有影响的 – 如果文件是Unicode的话,它会被忽略,如果它是ASCII的话,那就不是。

处理:

  1. 验证状态: PS> git status
  2. 创建一个函数Get-FileEncoding
  3. 测试.gitignore的编码: PS> Get-FileEncoding .gitignore
  4. 将编码更改为ASCII: PS> Set-Content .gitignore -Encoding Ascii -Value (Get-Content .gitignore)
  5. 确认: PS> git status

另外检查一下你的目录 ,把你的.gitignore它应该在你的项目的根目录下

 ./myproject/.gitignore 

不在

 ./myproject/.git/.gitignore 

与其他解决方案一样,首先提交并注意,您将丢失任何未提交的更改。

我有更好的结果:

 git rm -r --cached . git reset HEAD --hard git status 

请注意,状态现在应该没有修改过的文件。

这里的所有答案实际上是解决方法。 你需要在运行git init之前创建.gitignore文件,否则git永远不会知道你需要忽略这些文件,因为它们已经被跟踪了。

 echo .idea/ >> .gitignore git init 

如果您每天都在开发,我建议您将习惯性忽略的文件添加到~/.gitignore_global文件中。 这样, git已经知道你的文件(通常是你的用户,因为它是你的主目录中的一个文件)通常会被忽略。

.gitignore可能会发生另一个问题,特别是对于一个windows用户,git不喜欢当你命名.gitignore (如unity.gitignore )时。 你会希望始终把它命名为.gitignore ,或者在windows, .gitignore. 因为Windows认为你正在尝试重命名它没有文件名。

对于我来说,上述答案都没有奏效。 我不得不将.gitignore文本复制到找到的exclude.txt文件中

 <Your-project-folder>\.git\info 

一旦完成,刷新您的更改,所有未跟踪的文件都消失了。 像往常一样承诺。

在我的情况,这是因为文件已经存在于回购,我试图忽略它。

这些是我为解决这个问题所做的事情:

  • 将文件复制到一个临时文件夹
  • 从我的项目文件夹中删除它们。
  • 提交从回购中删除这些文件的更改
  • 重新将这些文件添加到我的项目文件夹

届时,我对这些文件所做的任何更改都将被忽略。

我认为你不能忽略已经存在的回购文件。

我刚刚遇到这个问题。 我的.gitignore文件中的内容继续出现在未跟踪文件列表中。

我正在使用这个来创建忽略文件:

echo "node_modules" > .gitignore

事实证明,双引号引起了我的问题。 我删除了忽略文件,然后再次使用不带引号的命令,并按预期工作。 我不需要搞乱文件编码。 我在使用Cmder的Win10机器上。

例:

echo node_modules > .gitignore

我有这个相同的问题。 我认为这个问题是CR与CR + LF的差异。 我使用cmd(在Windows 7)和下面的命令在我的.gitignore中储存了一些东西:

坏:

回声“file_to_be_ignored.py”>> .gitignore
回声“*〜”>> .gitignore

等等。

问题是,这个命令没有放置正确的行结束标记git识别换行符(当git期待其他的时候是CR或CR + LF)。 我通过手动替换vim中的每一个换行符(vim来拯救!)解决了这个问题,并且完美的工作。

尝试在Notepad ++或vim(理想情况下)中编辑.gitignore,即使文件看起来像格式正确,请尝试替换换行符。 听起来很奇怪,我知道,但为我工作。 :d

还有一件事要看,是你保存你的.gitignore文件的正确的行结束?

WINDOWS:如果你在Windows中使用它,你是否用窗口行结束符保存它? 并不是所有的程序都会默认这样做,notepad ++和许多php编辑器都默认使用linux的行尾,所以这些文件将与服务器兼容。 一个简单的方法来检查这个,是在Windows记事本中打开文件。 如果所有内容都出现在一行上,那么该文件是用linux的行结尾保存的。

LINUX:如果你在linux环境下工作的文件有问题。 在编辑器(如emacs或nano)中打开文件。 如果你看到任何不可打印的字符,那么文件被保存在窗口行尾。

好吧,在我的情况下,接受的解决方案不起作用,什么工作在这里描述:

https://ericnelson.wordpress.com/2014/06/21/is-visual-studio-2013-ignoring-your-gitignore-file/

简而言之:

  • 关闭Visual Studio。
  • 导航到您的.git文件夹
  • 删除ms-persist.xml
  • 重新启动Visual Studio

希望这有助于某人

我有这个问题,与包含这一行的.gitignore:

 lib/ext/ 

我刚刚意识到,实际上,这个目录是其他地方的文件夹的符号链接:

 ls -la lib/ext/ lrwxr-xr-x 1 roipoussiere users 47 Feb 6 14:16 lib/ext -> /home/roipoussiere/real/path/to/the/lib 

lib/ext/ ,git实际上是查找一个文件夹 ,但是一个符号链接是一个文件 ,所以我的lib文件夹不会被忽略。

我通过在我的.gitignore上替换lib/ext/ lib/ext解决这个问题。

.gitignore文件不会工作,如果你有内嵌评论,如下所示:

 foo/bar # The bar file contains sensitive data so we don't want to make this public 

将其更改为:

 # The bar file contains sensitive data so we don't want to make this public foo/bar 

刚刚通过下面的命令删除了以前在git中提交的文件夹或文件,那么gitignore文件将反映正确的文件。

  git rm -r -f "folder or files insides" 

特别是对于Windows用户:如果您有未追踪的文件,清除/删除缓存的文件不起作用。 尝试打开PowerShell,并将.gitignore文件转换为UTF-8编码。

1)$ Myfile = Get-Content ..gitignore

2)$ Myfile = | Out-File -Encoding“UTF8”.gitignore

只需要执行一次编码该目录的.gitignore文件,并且由于该文件在将来编辑该文件时将被正确编码,因此应该可以正常工作。 我相信这是由于GitHub没有读取.gitignore文件的非UTF-8编码的一个小故障。 据我所知这个问题尚未解决的Windows。 没有太大的交易,只是一个痛苦,当它不工作的调试。