我在.gitignore
中添加了以下行:
sites/default/settings.php
但是当我输入git status
命令时,它显示该文件为未暂存文件。
问题出在哪里?所有其他模式都能正常工作。
我在.gitignore
中添加了以下行:
sites/default/settings.php
但是当我输入git status
命令时,它显示该文件为未暂存文件。
问题出在哪里?所有其他模式都能正常工作。
确保你的.gitignore
文件在工作目录的根目录下,并在该目录中运行git status
命令,然后从状态输出中复制文件路径并将其粘贴到.gitignore
文件中。
如果这样做不起作用,那么你的文件很可能已经被Git跟踪了。你可以通过git status
输出来确认这一点。如果该文件未列在“未跟踪的文件”部分中,则它已由Git跟踪,并且会忽略.gitignore
文件中的规则。
在Git中忽略文件的原因是为了防止它们被添加到代码库中。如果您之前添加了一个要被忽略的文件,则它将被Git跟踪,而匹配它的忽略规则将被跳过。Git这样做是因为该文件已经是代码库的一部分了。
为了真正忽略文件,您必须取消跟踪并将其从存储库中删除。您可以使用 git rm --cached sites/default/settings.php
来执行此操作。这会从存储库中删除文件,而不会物理删除文件(这就是 --cached
的作用)。提交更改后,该文件将从存储库中删除,并且应该可以正确地忽略它。
正如 @display-name below 所指出的那样,有时需要在 git rm --cached
后执行 git add .
以正确重建索引。
.git
目录的目录,它本身是存储库的根目录。例如,当您将存储库克隆到/xy/
时,/xy/
就是您的工作目录,其中包含/xy/.git/
。 - pokegit rm --cached
后,你还需要执行git add .
来正确重建索引。 - Display name我遇到了这个问题,这是一个老问题,但是我想要追踪那个文件,但不想在某些工作副本上追踪它,为此您可以运行:
git update-index --assume-unchanged sites/default/settings.php
git update-index --skip-worktree 文件名
。 - coppereyecatgit update-index --no-assume-unchanged sites/default/settings.php
- wieczorek1990请使用此命令
git rm -rf --cached .
git add .
有时候,即使.gitignore文件正确,它们也可能无法正常工作。Git忽略文件的原因是它们没有被添加到仓库中。如果你之前添加了一个需要忽略的文件,那么它将被Git跟踪,并且任何匹配规则都将被跳过。Git这样做是因为该文件已经是仓库的一部分。
有时候,即使.gitignore文件正确,它们也可能无法正常工作。Git忽略文件的原因是它们没有被添加到仓库中。如果你之前添加了一个需要忽略的文件,那么它将被Git跟踪,并且任何匹配规则都将被跳过。Git这样做是因为该文件已经是仓库的一部分。
ctrl+c
和ctrl+v
了?这个回答的唯一段落几乎与被采纳的答案完全相同。 - starriet.gitignore只会忽略您尚未添加到代码库中的文件。
如果您执行了 git add .
,并且该文件已被添加到索引中,.gitignore将无法帮助您。您需要执行 git rm sites/default/settings.php
将其删除,然后它才会被忽略。
git rm
可以做到这一点,但它可能会要求您使用 -f
选项将其从工作目录中删除。我还没有想到其他方法,只能先复制文件,然后执行 git rm -f
命令,最后再恢复复制的文件。 - jonescb我遇到了同样的问题。
在运行git status
时,.gitingore
中定义的文件被列为未跟踪的文件。
这是因为.gitignore
文件保存为UTF-16LE
编码,而不是UTF8
编码。
将.gitignore
文件的编码更改为UTF8
后它就工作了。
echo "" > .gitignore
创建了该文件。 - M Katz有些情况下,例如应用程序配置文件,我希望它们在git中被跟踪(因此.gitignore将无法起作用),但我需要为本地设置更改这些文件。我不想让git管理这些文件或显示它们已经被修改。为了实现这一点,我使用skip-worktree:
git update-index --skip-worktree path/to/file
git ls-files -v | grep ^S
git update-index --no-skip-worktree path/to/file
我成功地忽略了 settings.php 文件的方法如下:
我认为,如果在 Git 上有提交的文件,则忽略不会按预期工作。只需删除该文件并进行提交。之后它将被忽略。
我遇到了这种情况,我使用“GitHub Desktop”作为主要客户端,但它忽略了一些新的.gitignore设置:每次提交后:
原因:Visual Studio Code编辑器在后台运行并打开了相同的仓库。VS Code具有内置的git控制功能,这会导致一些冲突。
解决方法:仔细检查多个隐藏的git客户端,并一次只使用一个git客户端,特别是在清除git缓存时。
这里的优秀回答似乎忽略了另一种.gitignore或多个.gitignore文件的存在。
有一次,我克隆了一个仓库,但在运行git add时,发现一个“被忽略”的文件再次被添加,而我却无法解决。后来发现,在子文件夹中还有一个.gitignore文件,并且它覆盖了根目录中的.gitignore文件。
/.gitignore
/some-folder/.gitignore
/some-folder/this-file-keeps-getting-staged
根目录的 /.gitignore 文件忽略了 this-file-keeps-getting-staged
文件。
而
/some-folder/.gitignore
没有指定忽略 "this-file-keeps-getting-staged
" 文件。
因此出现了问题。
其中一个解决方法是在层级结构中简单搜索 多个 .gitignore
文件,并找出适用的规则。
我在VS Code终端上尝试了大部分以上命令,但是出现了以下错误:
fatal: pathspec '[dir]/[file]' did not match any files
后来我在GitHub桌面版中打开了这个项目,并从那里忽略了它,结果就成功了。