65.9K
CodeProject 正在变化。 阅读更多。
Home

Git – SourceTree 的“skip-worktree”选项自定义操作

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2023 年 7 月 3 日

CPOL

2分钟阅读

viewsIcon

16718

我们展示了如何为 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 日:初始版本
© . All rights reserved.