目录
3. SourceTree Git GUI——添加自定义操作
1. 问题
如果你有一个像web.config这样的配置文件需要由Git跟踪,但希望忽略本地更改,那么这种情况无法用.gitignore解决。适当的方法是在Git中使用skip-worktree选项。
.gitignore文件的用法非常流行,在其他地方有很好的描述,所以我不会详细介绍。值得一提的是,此方法计划应用于您希望GLOBALY UNTRACK的文件。Git在使用该存储库的所有系统上完全忽略了.gitignore中的文件。
该skip-worktree选项是一个鲜为人知的Git选项。此方法计划应用于要忽略的TRACKED,LOCAL CHANGES的文件。跟踪文件,忽略本地更改的用例非常强大。仅提每个开发人员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选项。幸运的是,它允许定义自定义操作,我们将使用这些操作来使用skip-worktree管理工具扩展其GUI。
我们的目标是添加如下图所示的自定义操作:
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可以通过自定义操作进行扩展,以便于使用Git skip-worktree选项。
5. 参考资料
https://www.codeproject.com/Articles/5363987/Git-SourceTree-Custom-Actions-for-skip-worktree-Op