Git – SourceTree 的“skip-worktree”选项自定义操作
我们展示了如何为 SourceTree 添加自定义菜单来管理“skip-worktree”选项。
1. 问题
如果您有一个像 web.config 这样的配置文件,需要被 Git 跟踪,但希望忽略本地修改,那么这种情况无法使用 .gitignore 来解决。合适的解决方法是在 Git 中使用 skip-worktree
选项。
.gitignore 文件的使用非常流行且在其他地方有详细描述,因此我不会深入探讨。简单来说,这种方法适用于您希望全局忽略的文件。.gitignore 中的文件会被使用该仓库的所有系统完全忽略。
skip-worktree
选项是一个不太常用的 Git 选项。这种方法适用于您希望跟踪文件,但忽略本地修改的情况。跟踪文件但忽略本地修改的用例非常强大。以每个 ASP.NET 开发者都会本地修改的 web.config 文件为例,至少会修改数据库连接字符串。您希望跟踪该文件,因为它应用程序的重要组成部分,但您希望忽略对本地系统的更改,因为您的本地版本将包含每个项目开发人员不同的本地设置。
有关 Git 中忽略文件方法的更多讨论,请参阅 [1].
2. 从命令行使用 skip-worktree
以下是您需要的命令
To ignore local changes to tracked files:
git update-index --skip-worktree [<file>...]
To track local changes again:
git update-index --no-skip-worktree [<file>...]
To list all files marked with skip-worktree:
git ls-files -v | grep ^S
3. SourceTree Git GUI – 添加自定义操作
一个非常流行的 Git GUI 是 SourceTree
。默认情况下,它不支持 skip-worktree
选项。幸运的是,它允许定义自定义操作,我们将使用它来扩展其 GUI,添加 skip-worktree
管理工具。
我们的目标是添加像这张图片一样的自定义操作
3.1. 忽略本地更改 (skip-worktree)
以下是如何设置此选项
这是示例执行(通过上下文菜单)
3.2. 取消忽略本地更改 (skip-worktree)
以下是如何设置此选项
这是示例执行(通过上下文菜单)
3.3. 列出所有标记为 skip-worktree 的文件
此设置有点复杂。它涉及创建脚本 ListFilesSkipWorktree.bat。
"c:\Program Files\Git\bin\git.exe" ls-files -v | "C:\WINDOWS\system32\findstr.exe" /b S
这是示例执行(通过上下文菜单)
4. 结论
跟踪文件但忽略本地修改的用例非常强大。以每个 ASP.NET 开发者都会本地修改的 web.config 文件为例,至少会修改数据库连接字符串。在这种情况下,使用 .gitignore 无法解决问题。合适的解决方法是在 Git 中使用 skip-worktree
选项。
流行的 Git GUI SourceTree
可以通过自定义操作进行扩展,以便轻松使用 skip-worktree
Git 选项。
5. 参考资料
6. 历史记录
- 2023 年 7 月 3 日:初始版本