我们使用svn已经很多年了,最近已经改用Git。我们曾经在svn中使用更改列表来达到特定的目的。它们类似于全局忽略,但并不完全相同。全局忽略告诉svn不要添加符合模式的文件,但如果已经将文件添加到版本控制中,则忽略不会执行任何操作。Git中也是如此。Git忽略文件告诉Git忽略与给定模式匹配的文件,但仅当它们尚未添加到版本控制中时。
svn中的更改列表允许我们指定已经添加到版本控制中的文件。一旦这些文件被添加到更改列表中,svn就会在提交时忽略这些文件。这样做的基本优点是,您可以自由编辑某些文件,而不用担心意外提交不想进入主代码库的更改。一个很好的示例场景是,当您希望使用特定客户的配置,并将不应存在于核心代码库中的客户特定引用添加到项目文件中时。
Git有隐藏的概念,这又不同了。我们可以将delta存储在本地回购中。这些可以自由应用、推动或弹出,从而解决了问题的一部分。然而,当我们进行提交(通过一些gui工具-乌龟git、gitkraken、VS)时,这些文件仍然会显示在git想要提交的文件列表中。我不希望他们出现,因为我很可能会犯错误,不小心犯了错误。
有没有办法在Git中实现类似更改列表的功能?
注意:我真的不想通过命令行执行此操作。我使用Visual Studio、Git Kraken和Tortoise Git的组合。我喜欢桂系。我不想在命令提示符下运行一个命令,它会自动提交我的更改,同时避免我指定的文件。
在vs中,如果你想忽略已经在版本控制中添加的文件,你需要使用命令git rm --cached filename
来帮助你实现目标,这样它才能真正被忽略(你可以在vs中引用忽略文件)。因此,步骤如下:
- 在.gitignore中添加文件名
- 在命令行中,使用
git rm --cached filename
- 编辑文件,因此无法跟踪更改
命令git update-index --assume-unchanged filename
非常重要地忽略一个文件。当切换到其他分支时,首先需要git update-index --no-assume-unchanged filename
。这意味着它只工作很短的时间,并且该文件实际上是由git控制的版本。如果它能满足你的需求,当然你可以用它来代替。
但是,如果您不再需要对文件进行版本控制,则需要第一种方法。
@Marina-MFT发布的答案中的文章让我找到了答案:https://www.visualstudio.com/en-us/docs/git/tutorial/ignore-files
这将停止跟踪Git:中已提交的文件
git update-index --assume-unchanged <file>
恢复跟踪Git:中已提交的文件
git update-index --no-assume-unchanged <file>
我不想在命令行上运行,所以我制作了一个批处理文件,它停止跟踪我想忽略的所有文件。我只是在需要的时候双击它。Git不再关注这些文件。它的工作原理与svn中的更改列表完全相同。