.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.log
和nbproject/
不出现在未跟踪的文件列表中。
我应该从哪里开始着手解决这个问题?
即使你还没有跟踪到目前为止的文件,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文件中删除某些内容)时,可以检查以下提示:
- 你必须注意有时可能会影响你的gitignore的全球gitignore文件。
-
当你添加一些东西到.gitignore文件中,首先作为回答这个问题的人:
git rm -r --cached . git add . git commit -m "fixed untracked files"
- 当你从.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的话,那就不是。
处理:
- 验证状态:
PS> git status
- 创建一个函数Get-FileEncoding
- 测试
.gitignore
的编码:PS> Get-FileEncoding .gitignore
- 将编码更改为ASCII:
PS> Set-Content .gitignore -Encoding Ascii -Value (Get-Content .gitignore)
- 确认:
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。 没有太大的交易,只是一个痛苦,当它不工作的调试。