Git - 更改列表 (svn) 等价物

Git - Change List (svn) Equivalent

我们使用 svn 多年,最近切换到 Git。我们曾经出于特定目的在 svn 中使用更改列表。它们类似于全局忽略但不完全相同。全局忽略告诉 svn 不要添加符合模式的文件,但是如果文件已经添加到版本控制中,忽略将不会做任何事情。这与 Git 中的相同。 Git 忽略文件告诉 Git 忽略与给定模式匹配的文件,但 如果它们尚未添加到版本控制。

svn 中的更改列表允许我们指定已经添加到版本控制中的文件。一旦文件被添加到更改列表中,svn 将在提交时忽略这些文件。这样做的基本优点是您可以自由编辑某些文件,而不必担心意外提交您不想进入主代码库的更改。一个很好的示例场景是当您想要使用特定客户的配置并将客户特定的引用添加到核心代码库中不应存在的项目文件时。

Git 有 stashes 的概念,这又是不同的。我们可以将增量存储在本地存储库中。这些可以自由应用、推动或弹出,这解决了部分问题。但是,当我们提交时(通过一些 gui 工具 - tortoise git、gitkraken、VS),这些文件仍会显示在 Git 想要提交的文件列表中.我不希望他们出现,因为我很可能会犯错误并无意中犯下他们。

有没有什么方法可以实现 Git 中类似更改列表的功能?

注意:我真的不想通过命令行执行此操作。我使用 Visual Studio、Git Kraken 和 Tortoise Git 的组合。我喜欢 Gui 系统。我不想 运行 命令提示符下的命令会自动提交我的更改,同时避免我指定的文件。

在vs中,如果你想忽略一个已经添加到版本控制中的文件,你需要使用命令git rm --cached filename来帮助你达到你的目的,这样它才能真正被忽略(你可以参考 ignore files in vs)。所以步骤如下:

  1. 在.git中添加文件名
  2. 在命令行中,使用git rm --cached filename
  3. 编辑文件,因此无法跟踪更改

命令git update-index --assume-unchanged filename暂时忽略一个文件。切换到其他分支时,首先需要git update-index --no-assume-unchanged filename。这意味着它只能在短时间内工作,并且该文件实际上由 git 控制版本。如果它满足您的需求,您当然可以使用它。

但是如果你不再需要对文件做版本控制,就需要第一种方法了。

@Marina - MSFT 发布的答案中的文章让我得到了答案: 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 中的更改列表完全相同。