由于某种原因,我的.gitignore
文件无法正常工作,并且没有任何数量的Google搜索能够修复它。这就是我所拥有的:
*.apk
*.ap_
*.dex
*.class
**/bin/
**/gen/
.gradle/
build/
local.properties
**/proguard/
*.log
它位于master
目录中,这是我的git repo。我正在运行Git 1.8.4.2,因为我在MacBook上运行OSX 10.8.6。
答案 0 :(得分:418)
版本控制中的文件/文件夹不仅仅是因为您将它们添加到.gitignore
而自行删除。它们已经存储在存储库中,您必须将其删除。你可以这样做:
(请记住在执行此操作之前提交您已更改的所有内容。)
git rm -rf --cached .
git add .
这将从存储库中删除所有文件并将其添加回来(这次是尊重.gitignore
中的规则)。
答案 1 :(得分:84)
要取消已经添加/初始化到存储库的单个文件,即停止跟踪文件但不从系统中删除它:git rm --cached filename
要取消现在.gitignore
中的所有文件:
首先提交任何未完成的代码更改,然后运行以下命令:
git rm -r --cached .
这将从索引(暂存区域)中删除所有已更改的文件,然后运行:
git add .
承诺:
git commit -m ".gitignore is now working"
答案 2 :(得分:7)
@Ahmad的答案有效,但是如果您只想git忽略1个特定文件,或者按@Nicolas的建议做几个文件
将文件名添加到.gitignore文件
[从git缓存中删除文件名(文件路径)
git rm --cached filename
提交更改
git add filename
git commit -m "add filename to .gitignore"
git rm -r --cached .
并全部添加并提交它们,将污染您的git历史记录(它将表明您在一次提交中添加了很多文件)不确定我表达了我的想法,但希望您明白这一点答案 3 :(得分:5)
在我的情况下,文件开头的空格在我在记事本中打开文件时显示清楚,在Visual Studio代码中并不明显。
答案 4 :(得分:4)
在尝试按照这个问题的答案(可能是因为我必须在视觉工作室项目中做到这一点)之后,我想找到更容易的路径
将我不想再追踪的文件剪切并粘贴到临时位置
提交“删除”这些文件
提交修改.gitignore
以排除我暂时移动的文件
将文件移回文件夹。
我发现这是最直接的方式(至少在视觉工作室,或者我会假设其他基于IDE的环境,如Android Studio),而不会意外地在脚下射击自己git rm -rf --cached .
之后我正在处理的visual studio项目没有加载。
答案 5 :(得分:3)
此外,评论必须在一行上。它们不能在输入后放入。所以这行不通:
/node_modules # DON'T COMMENT HERE (since nullifies entire line)
但这会起作用:
# fine to comment here
/node_modules
答案 6 :(得分:3)
我已经完成了 echo node_modules >> .gitignore
,但没有奏效。
出于某种原因,来自 vscode
的终端将文件保存在 UCS-2 LE BOM
中,而 git 似乎不接受这一点。
我使用 UTF-8
Notepad++
现在可以使用了。
我认为他们需要解决这个问题,因为 echo "filetoignore" >> .gitignore
实际上看起来很方便
答案 7 :(得分:3)
在我的情况下,.gitignore行末尾的空格是原因。所以请注意.gitignore中的空格!
答案 8 :(得分:1)
我解决了以下问题:
首先,我是一名Windows用户,但我遇到了类似的问题。所以,我在这里发布我的解决方案。
有一个简单的原因,为什么.gitignore有时不像它应该的那样工作。这是由于EOL转换行为。
这是
的快速解决方法修改> EOL转换> Windows格式>保存
您可以责备您的文字编辑器设置。
例如:
由于我是Windows开发人员,我通常使用 Notepad ++ 来编辑我的文本,而不像Vim用户。
所以当我用Notepad ++打开我的.gitignore文件时,会发生这样的事情:
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# See https://help.github.com/ignore-files/ for more about ignoring files.
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
*.dll
*.force
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
如果我使用默认记事本打开同一个文件,这就是我得到的
## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # See https://help.github.com/ignore-files/ for more about ignoring files. # User-specific files *.suo *.user *.userosscache
所以,您可能已经通过查看输出猜测了。 .gitignore中的所有内容都变成了一个内容,因为一开始就有##,就好像所有内容都被评论一样。
解决这个问题的方法很简单: 只需使用Notepad ++打开.gitignore文件,然后执行以下操作
修改> EOL转换> Windows格式>保存
下次使用Windows默认记事本打开同一个文件时,所有内容都应正确格式化。试一试,看看这是否适合你。
答案 9 :(得分:1)
添加我的观点,因为这是一个受欢迎的问题。
我无法将.history目录放在.gitignore内,因为无论我尝试了哪种组合,它都无法正常工作。 Windows每次保存时都会不断生成新文件,我根本不想看到这些文件。
但是后来我意识到,这只是我在计算机上的个人开发环境。 .history或.vscode之类的东西对我来说是特定的,因此如果每个人都根据他们使用的IDE或OS包含自己的.gitignore条目,那将很奇怪。
所以这对我有用,只需将“ .history”附加到.git / info / exclude
echo ".history" >> .git/info/exclude
答案 10 :(得分:1)
我的问题是我首先在 Mac 上创建了 .gitignore,但现在在 Windows 机器上工作。在 Mac 上,您在文件路径中使用“/”。在 Windows 上,您使用“\”。
所以为了让我的 .gitignore 文件工作,我使用的符号保持一致。在这种情况下,我必须对要添加的每个文件路径使用“/”,即使复制时它是这样的:“file\path”。
在这种愚蠢的事情上浪费了好几个小时(这真的让我很烦恼,哈哈)。
答案 11 :(得分:0)
对于iOS用户,此处说明了如何通过.gitignore忽略GitHub中的文件: https://stackoverflow.com/a/57828954/7987502
答案 12 :(得分:0)
我用某种东西来为我生成通用的.gitignore
,我遇到了这个问题。阅读@Ozesh答案后,我在VS Code中打开了它,因为它在右下角有一个漂亮的指示器,用于显示行尾的类型。是LF,所以我按照建议转换为CRLF,但没有骰子。
然后我看了看行尾,发现它是使用UTF16保存的。因此,我使用UTF8对voila编码进行了修复,它起作用了。我认为CRLF无关紧要,所以可以肯定的是,我将其改回LF,并且仍然有效。
当然这不是OP的问题,因为他已经提交了文件,因此已经将它们编入索引,但是我想我可以分享,以防其他人偶然发现此文件。
TLDR ;如果尚未提交文件,并且仍然不遵守.gitignore的规定,请检查文件编码,并确保其UTF8正确,如果不起作用,则可以尝试将行尾弄乱。
答案 13 :(得分:0)
git reset --hard
对任何人都有用吗?我并不是说这是一个很好的解决方案,它似乎是我第一次尝试的工作。
答案 14 :(得分:0)
就我而言
我使用了 git-bash 并编写了以下命令:
<块引用>echo [Enter_your_file_name.extension] >> .gitignore
然后在 repo 中执行 push 并且它工作正常
答案 15 :(得分:0)
stackoverflow 上有很多答案,但对我有用的并不完全适用于任何特定的答案,我正在以一种简单的方式将所有需要在这里完成的步骤一一记下:
Pre --- 备份 repo 以防万一。 (我没有,但可能会让你感觉更安全)
转到文件 -> 另存为 将编码更改为 ANSI。 (有些答案错误地说 UTF-8 ,但它 不工作,浪费时间)
Again git rm -r --cached .
and git add . (do not miss the dot)
Now do Git status and verify
what we wanted has happened
答案 16 :(得分:0)
在 cmd 窗口中使用下面的 git 命令,
git rm --cached filename
说明:
git-rm
- 从工作树和索引中删除文件
--cached
使用此选项可仅从索引中取消暂存和删除路径。工作树文件,无论是否修改,都将保持不变。
答案 17 :(得分:0)
有人可能会发现这很有用。我的问题是格式。出于某种原因,在没有做任何更改的情况下,git 不喜欢文件内容的格式。
.gitignore
中的目录如下所示:
directory1/*
directory2/*
directory3/*
当我将格式更改为
directory1/
directory2/
directory3/
目录再次被忽略,我唯一需要添加/提交/推送的是 .gitignore
。