程序化解决方案
截至2019年底,Sourcetree 3.2.6 for Windows仍然没有全局配置提交文本链接的功能。由于这个问题是唯一一个有不错答案的搜索结果之一,我想添加一个自动化解决方案到答案中。虽然我不是程序员,而且我知道正则表达式并不是最好的,但是我拼凑在一起的这个简单的PowerShell脚本可以完成任务。在运行脚本之前,请确保关闭Sourcetree。
- 将
sourcelinker
脚本复制到Notepad++或类似的文本编辑器应用程序中。
- 为了获取您设置的特定字符串,请使用一个或多个提交文本链接来配置您的Git存储库。
A. 启动Sourcetree,选择一个Git存储库,然后点击设置。
B. 在存储库设置窗口中,点击高级选项卡。
C. 在提交文本链接区域中,点击添加。
D. 从替换类型下拉列表中选择其他。
E. 输入正则表达式模式和链接到URL以获取您的特定设置,然后点击确定。
F. 在存储库设置窗口中,点击确定。
G. 关闭Sourcetree。
- 导航到您配置的存储库的.git子目录,并打开sourcetreesonfig.json。
- 复制从
"CommitTextLinks": [
开始到结束括号和逗号],
的所有内容。例如:
"CommitTextLinks": [
{
"$id": "11",
"LinkType": 99,
"Regex": "[fF][bB][#\\s]*(\\d+)",
"LinkToUrl": "https://companyname.fogbugz.com/f/cases/$1",
"Project": null,
"RootUrl": null,
"Description": "[fF][bB][#\\s]*(\\d+) => https://companyname.fogbugz.com/f/cases/$1"
}
],
- 将复制的内容粘贴到你的
sourcelinker
脚本中,在跟随的单引号之间$New1 =
。
- 将脚本保存为
sourcelinker.ps1
。
- 将
sourcelinker.ps1
复制到存放Git仓库的根文件夹中。
- 右键单击脚本,选择使用PowerShell运行。
- 启动Sourcetree,并检查其他Git仓库的提交文本链接。
Sourcelinker脚本
此脚本示例包含与Fogbugz相关的正则表达式示例,并处理以下变化:
- case12345
- fb12345
- bugzid12
脚本
$InputFiles = Get-Item ".\*\.git\sourcetreeconfig.json"
$Old1 = '"CommitTextLinks": null,'
$New1 = '"CommitTextLinks": [
{
"$id": "9",
"LinkType": 99,
"Regex": "[bB][Uu][gG][sSzZ]\\s*[Ii][Dd]s?\\s*[#:; ]+(\\d+)",
"LinkToUrl": "https://companyname.fogbugz.com/f/cases/$1",
"Project": null,
"RootUrl": null,
"Description": "[bB][Uu][gG][sSzZ]\\s*[Ii][Dd]s?\\s*[#:; ]+(\\d+) => https://companyname.fogbugz.com/f/cases/$1"
},
{
"$id": "10",
"LinkType": 99,
"Regex": "[cC][aA][Ss][Ee]+\\s*(\\d+)",
"LinkToUrl": "https://companyname.fogbugz.com/f/cases/$1",
"Project": null,
"RootUrl": null,
"Description": "[cC][aA][Ss][Ee]+\\s*(\\d+) => https://companyname.fogbugz.com/f/cases/$1"
},
{
"$id": "11",
"LinkType": 99,
"Regex": "[fF][bB][#\\s]*(\\d+)",
"LinkToUrl": "https://companyname.fogbugz.com/f/cases/$1",
"Project": null,
"RootUrl": null,
"Description": "[fF][bB][#\\s]*(\\d+) => https://companyname.fogbugz.com/f/cases/$1"
}
],'
$InputFiles | ForEach {
(Get-Content -Path $_.FullName).Replace($Old1,$New1) | Set-Content -Path $_.Fullname
}
这个解决方案的灵感来自于Andrew Pearce在此帖子中的建议。