我需要忽略对Git已经跟踪的特定文件所做的任何更改.不应从本地或远程存储库中删除这些文件.
我试图在.gitignore中忽略它们,但它不起作用.
的.gitignore:
$MAVEN_PATH_TO_CHILD_MODULE/src/main/java/$PACKAGE/$CLASS.java
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?
.gitignore 只是告诉 git 忽略哪些未跟踪的文件,所以如果你的文件已经被 git 跟踪,它不会做任何事情。相反,您可以使用以下命令告诉 git 暂时忽略对跟踪文件的任何更改:
git update-index --assume-unchanged <file>
Run Code Online (Sandbox Code Playgroud)
如果您想撤消此操作,只需运行:
git update-index --no-assume-unchanged <file>
Run Code Online (Sandbox Code Playgroud)
请参阅此处了解更多详情。
只能忽略未跟踪的文件(未添加到Git).或者换句话说,忽略是关于Git不知道的文件,即不在索引中(在暂存区域中没有条目).
要使文件未跟踪(将其从索引中删除,从而在下次提交时将其从删除中暂存),但将其保留在工作区域中,即在文件系统中,您可以使用
$ git rm --cached <file>
Run Code Online (Sandbox Code Playgroud)
在本地提交之后,以及在推送到远程之后,该文件将从远程存储库中删除(从顶部提交树中 - 它将仍然存在于历史记录中).
如果你想要的Git忽略的变化,使git diff并git status不会举报他们,并git commit -a不会承诺他们(但git add <file>+ git commit和git commit <file>仍然添加的话),你可以骗来的Git这一招(见的git准备»暂时忽略文件的文章):
$ git update-index --assume-unchanged <file>
Run Code Online (Sandbox Code Playgroud)
该git update-index命令是低级(管道)命令.您可以通过以下方式找到" 假定未更改 "的文件:
$ git ls-files -v
h <file>
Run Code Online (Sandbox Code Playgroud)
git ls-files -v使用小写字母表示标记为假设未更改的状态文件.
你可以把它关掉
$ git update-index --no-assume-unchanged <file>
Run Code Online (Sandbox Code Playgroud)
请注意,此选项的初始目的是加速stat缓慢平台上的状态.
在@Dave评论之后,引用了Git - '假设未改变'和'跳过工作树'之间的差异问题,现代Git中的另一个选择是让Git不使用带有skip-worktree位的工作区版本.
您可以使用跟踪文件打开它
$ git update-index --skip-worktree <file>
Run Code Online (Sandbox Code Playgroud)
这使得Git使用索引版本(最后提交的版本)代替文件系统中的版本.您可以检查哪个文件具有此位设置
$ git ls-files -v
S <file>
Run Code Online (Sandbox Code Playgroud)
该git ls-files -v命令将用于S表示设置为"skip-worktree"的文件.
请注意,此选项的原始用途是支持稀疏结帐.
| 归档时间: |
|
| 查看次数: |
2434 次 |
| 最近记录: |