我将以下行添加到.gitignore
:
sites/default/settings.php
但是当我键入git status
它时,该文件显示为未暂存的文件。
有什么问题?所有其他模式都运作良好。
我将以下行添加到.gitignore
:
sites/default/settings.php
但是当我键入git status
它时,该文件显示为未暂存的文件。
有什么问题?所有其他模式都运作良好。
Answers:
确保您.gitignore
位于工作目录的根目录中,并在该目录中运行git status
并将路径从状态输出复制到文件,然后将其粘贴到中.gitignore
。
如果这不起作用,则可能是Git已经跟踪了您的文件。您可以通过输出确认git status
。如果该文件未在“未跟踪的文件”部分中列出,则Git已经对其进行了跟踪,它将忽略该.gitignore
文件中的规则。
忽略Git中文件的原因是,它们不会被添加到存储库中。如果您之前添加了要忽略的文件,则Git将对其进行跟踪,并且将跳过与该文件匹配的忽略规则。Git这样做是因为文件已经是存储库的一部分。
为了实际上忽略文件,您必须取消跟踪并将其从存储库中删除。您可以使用来做到这一点git rm --cached sites/default/settings.php
。这样可以从存储库中删除文件,而无需实际删除文件(这就是这样--cached
做)。提交更改后,该文件将从存储库中删除,并且忽略它应能正常工作。
.git
目录本身就是存储库的根目录。当你克隆一个仓库像/xy/
然后/xy/
与你的工作目录/xy/.git/
中。
git add .
之后git rm --cached
才能正常重建索引。
我遇到了这个问题,这是一个古老的问题,但是我希望跟踪该文件,但不要在某些工作副本上跟踪它,因此可以运行
git update-index --assume-unchanged sites/default/settings.php
.gitignore将仅忽略尚未添加到存储库中的文件。
如果您执行了git add .
,并且文件已添加到索引中,那么.gitignore将无济于事。您需要git rm sites/default/settings.php
删除它,然后它将被忽略。
git rm
应该这样做,但是可能会要求您使用-f选项,该选项会将其从工作目录中删除。除了制作文件的副本,执行git rm -f
然后还原副本外,我没有想到其他方法。
我有同样的问题。.gitingore
运行时在其中定义为未跟踪文件的文件git status
。
原因是.gitignore
文件是以UTF-16LE
编码而不是以UTF8
编码保存的。
将.gitignore
文件的编码更改为UTF8
它后对我有用。
我所做的是成功忽略settings.php文件的操作:
我认为,如果Git上存在已提交的文件,则忽略将无法正常工作。只需删除文件并提交即可。之后,它将忽略。
有一些实例,例如应用程序配置文件,我想在git中进行跟踪(因此.gitignore将不起作用),但是我需要更改本地设置。我不希望git管理这些文件或将其显示为已修改。为此,我使用skip-worktree:
git update-index --skip-worktree path/to/file
您可以通过列出文件并检查以S开头的行来跳过文件来确认文件被跳过
git ls-files -v | grep ^S
如果将来您想让git在本地再次管理文件,只需运行:
git update-index --no-skip-worktree path/to/file
上面的Mescalito有一个很好的答案,这使我走了正确的路,但是
git update-index-假定未更改的文件/to/ignore.php
与git签订了一个合同,其中:用户承诺不更改文件,并允许Git假定工作树文件与索引中记录的文件匹配。
但是,我更改了文件的内容,因此在我的情况下--skip-worktree是更好的选择。
Nishina Toshiharu的网站很好地解释了跳过工作树与假设不变:忽略已经在本地使用Git管理的文件
另一个可能的原因 – 几个git客户端实例同时运行。例如“ git shell” +“ GitHub Desktop”等。
这发生在我身上,我使用“ GitHub Desktop”作为主要客户端,并且它忽略了一些新的.gitignore设置:提交后提交:
原因:Visual Studio代码编辑器在后台使用相同打开的存储库运行。VS Code具有内置的git控件,这会引起一些冲突。
解决方案:仔细检查多个隐藏的git客户端,一次仅使用一个git客户端,尤其是在清除git缓存时。
确保.gitignore没有扩展名!它不能是.gitignore.txt,在Windows中只需将文件命名为.gitignore。它会工作。
我刚刚用git 1.7.3.1尝试了一下,并给出了类似的结构:
repo/.git/
repo/.gitignore
repo/sites/default/settings.php
repo
因此,上面提到的“根”(我称其为工作树的根)在哪里,并且.gitignore
仅包含sites/default/settings.php
,ignore对我有效(并且是否.gitignore
添加到存储库中都没有关系)。这符合您的回购布局吗?如果没有,有什么不同?
我在VS Code终端上尝试了上面的大多数命令,但出现类似以下错误:
fatal: pathspec '[dir]/[file]' did not match any files
我在GitHub Desktop上打开了该项目,然后从那里忽略了它并成功了。