忽略的文件仍显示更改

Syn*_*ose 4 git github gitignore visual-studio

.gitignore的如下:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# Project files
*.sln
*.vcxproj
*.vcxproj.filters
UpgradeLog.htm

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# ....
Run Code Online (Sandbox Code Playgroud)

现在,所有这些文件都将被正确忽略,除了我的解决方案文件main.sln。当我专门将它放在gitignore中时,为什么不忽略它?

是由于main.sln存在之前我将其添加到忽略?我以为如果将它放在忽略中,它只会停止跟踪它,但我想事实并非如此。这是屏幕截图:

在此处输入图片说明

如何简单地停止跟踪更改main.sln

Har*_*hil 7

.gitignore仅适用于未跟踪的文件。如果文件已经被跟踪,那么它就不能被忽略,如果您将文件添加到存储库,那么有两种方法可以解决它:

1).第一种方法是:

git update-index --assume-unchanged <file>
Run Code Online (Sandbox Code Playgroud)

来自文档:

  • git-update-index - 将工作树中的文件内容注册到索引,

  • --assume-unchanged - 当“假设不变”位打开时,用户承诺不更改文件并允许 Git 假设工作树文件与索引中记录的内容匹配

2).第二种方法是从存储库中删除文件,如下所示:

git rm --cached <file>
Run Code Online (Sandbox Code Playgroud)

git-scm-doc命令的解释

  • git-rm - 从工作树和索引中删除文件
  • --cached - 使用此选项仅从索引中取消暂存和删除路径。工作树文件,无论是否修改,都将被保留。(这意味着该文件将从树索引中删除 ,而不是从真实目录中删除。)
  • <file>- 要删除的文件。可以给出文件团(例如*.c)来删除所有匹配的文件。如果您希望 Git 扩展文件全局字符,您可能需要对它们进行 shell 转义。可以给出一个前导目录名(例如 dir 来删除 dir/file1 和 dir/file2)来删除目录中的所有文件,并递归地删除所有子目录,但这需要显式给出 -r 选项。


rod*_*igo 6

行中的.gitignore行将仅忽略不属于存储库的文件。一旦将它们添加到存储库中,就会对其进行跟踪,并且不能忽略它们。

如果您想真正停止跟踪该文件,则必须将其从git树中删除。从命令行执行:

$ git rm --cached main.sln
Run Code Online (Sandbox Code Playgroud)

然后提交更改。从那时起,您的文件将被忽略。

注意:--cached选项是将真实文件保留在工作目录中。没有它,文件也将被删除。