我将以下行添加到.gitignore
:
sites/default/settings.php
但是当我键入git status
它时,它会将文件显示为未暂存的文件。
有什么问题?所有其他模式都运行良好。
我将以下行添加到.gitignore
:
sites/default/settings.php
但是当我键入git status
它时,它会将文件显示为未暂存的文件。
有什么问题?所有其他模式都运行良好。
我遇到了这个问题,这是一个老问题,但我希望跟踪该文件,但不要在某些工作副本上跟踪它,这样做你可以运行
git update-index --assume-unchanged sites/default/settings.php
请使用此命令
git rm -rf --cached .
git add .
有时 .gitignore 文件即使是正确的也不起作用。Git 忽略文件的原因是它们没有添加到存储库中。如果你之前添加了一个你想忽略的文件,它会被 Git 跟踪,任何跳过的匹配规则都会被跳过。Git 这样做是因为该文件已经是存储库的一部分。
.gitignore 只会忽略您尚未添加到存储库中的文件。
如果您执行了git add .
,并且文件已添加到索引中, .gitignore 将无济于事。您需要将git rm sites/default/settings.php
其删除,然后它将被忽略。
我有同样的问题。运行时在其中列出的未跟踪文件中
定义的文件。.gitingore
git status
这是因为.gitignore
文件是以UTF-16LE
编码保存的,而不是以UTF8
编码保存的。
.gitignore
将文件的编码更改为UTF8
它工作后。
有一些实例,例如我想在 git 中跟踪的应用程序配置文件(因此 .gitignore 将不起作用),但我需要更改本地设置。我不希望 git 管理这些文件或将它们显示为已修改。为此,我使用跳过工作树:
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
上面的麦斯卡力陀有一个很好的答案,这使我走上了正确的道路,但是
git update-index --assume-unchanged file/to/ignore.php
与 git 签订合同,其中:用户承诺不更改文件并允许 Git 假设工作树文件与索引中记录的内容匹配。
但是,我更改了文件的内容,所以在我的情况下 --skip-worktree 是更好的选择。
Toshiharu Nishina 的网站提供了关于 skip-worktree 与假设不变的出色解释:忽略已在本地使用 Git 管理的文件
我做了什么来成功忽略settings.php文件:
我认为如果 Git 上有已提交的文件,那么忽略不会按预期工作。只需删除文件并提交。之后就会无视。
另一个可能的原因——几个 git 客户端实例同时运行。例如“git shell”+“GitHub 桌面”等。
这发生在我身上,我使用“GitHub Desktop”作为主要客户端,它忽略了一些新的 .gitignore 设置:提交后提交:
原因:Visual Studio Code 编辑器在后台运行,打开的存储库相同。VS Code 有内置的 git 控制,这会产生一些冲突。
解决方案:仔细检查多个隐藏的 git 客户端,一次只使用一个 git 客户端,尤其是在清除 git 缓存时。
确保 .gitignore 没有扩展名!!它不能是 .gitignore.txt,在 Windows 中只需将文件命名为 .gitignore。它会起作用。
我在 VS Code 终端上尝试了上面的大多数命令,但出现如下错误:
fatal: pathspec '[dir]/[file]' did not match any files
我在 GitHub Desktop 上打开了这个项目,然后从那里忽略了它,它工作了。
我刚刚用 git 1.7.3.1 尝试了这个,并给出了如下结构:
repo/.git/
repo/.gitignore
repo/sites/default/settings.php
因此,上面提到的“根”在哪里repo
(我将其称为工作树的根),并且.gitignore
仅包含sites/default/settings.php
忽略对我有用(无论是否.gitignore
添加到回购中都无关紧要)。这是否符合您的回购布局?如果不是,有什么不同?
以防万一将来有人遇到和我一样的问题:
如果您使用
*
!/**/
!*.*
删除没有扩展名的二进制文件的技巧,确保所有其他 gitignore 行都在下面。Git 将从顶部读取 .gitignore,因此即使我的 gitignore 中有“test.go”,它也是文件中的第一个,之后变为“未忽略”
!*.*
我认为这里的优秀答案中遗漏的一件事是,如果another *.gitignore* or multiple of them.
在一个案例中,我克隆了一个 repo,但无法弄清楚为什么在运行git add时再次添加了一个“被忽略的”文件。结果发现子文件夹中有另一个.gitignore并且覆盖了根文件夹中的那个。
/.gitignore
/some-folder/.gitignore
/some-folder/this-file-keeps-getting-staged
这
根 /.gitignore
忽略了这个文件保持上演
这
/some-folder/.gitignore
没有指定忽略“this-file-keeps-getting-staged”文件。
因此问题。
其中一件事是在层次结构中简单地搜索多个 .gitignore 文件。并找出适用的规则。