我正在编写一套 PowerShell 脚本来自动在 Windows 7 上设置新的开发人员工作站。
我现在希望我们所有的存储库自动克隆开发/分支并映射到我们团队标准的文件结构。
我们构建签出的方式是 C:/Projects/{ProjectName}/{RepositoryName},它映射到 BitBucket Server 中的项目/存储库层次结构。 通过 powershell 脚本自动使用 git 检查项目将变得微不足道。
我要解决的问题是如何自动将存储库添加到系统上 SourceTree 的本地存储库列表中,并镜像 SourceTree 中的文件夹结构(因此会有一个名为 {ProjectName} 的树,并且它会有多个存储库在它下面。)
我可以使用一步“导入所有遥控器”操作,但这似乎不可用。 我不想要求用户在 SourceTree 中手动添加每个项目,这可能容易出错且乏味。
有没有办法编辑 SourceTree 保留的存储库列表? 我很乐意使用依赖于内部实现的解决方案(例如,编辑可能在版本之间更改的配置文件)。 维持这个对我们来说不是问题。
通过一些额外的调查,我能够确定 %appdata%/Local/Atlassian/SourceTree 文件夹是存储配置的位置。 该文件夹中有一个 bookmarks.xml。 重现此结构以自动创建书签很简单,并且在随后启动 SourceTree 时,它会拾取已进行的任何更改。
我想做类似的事情,所以我为其创建了一个批处理脚本。
@echo off
rem Setup variables and create labview folder if it does not exist
set "stfolder=%USERPROFILE%\AppData\Local\Atlassian\SourceTree"
set "folder=pathToWhereYouWantTheRemoteRepositoriesClonedTo"
if not exist %folder% (
mkdir %folder%
)
rem set username and pw
git config --global credential.helper manager
rem create builds and modify sourcetree files
set rep="HTTPSLinktoRemoteRepository"
call :CloneRep "nameOfRepositoryLocally"
exit /b %errorlevel%
:CloneRep
setlocal
rem clones the repository into a new folder
set "curDir=%folder%\%~1"
if not exist "%curDir%\.git" (
git clone %rep% "%curDir%"
) else (
echo %curDir% repository already exists
)
set "replace=</ArrayOfTreeViewNode>"
set "replaced=%~1"
set "replacedX=<TreeViewNode xsi:type="BookmarkNode"><Level>0</Level><IsExpanded>false</IsExpanded><IsLeaf>true</IsLeaf><Name>%replaced%</Name><Children /><CanSelect>true</CanSelect><HasError>false</HasError><Path>%folder%\%replaced%</Path><RepoType>Git</RepoType></TreeViewNode>"
call :replaceinfile bookmarks "ArrayOfTreeViewNode>"
set "replace=</ArrayOfString>"
set "replaced=%~1"
set "replacedX= <string>%folder%\%replaced%</string>"
call :replaceinfile opentabs "ArrayOfString>"
endlocal
EXIT /B 0
:replaceinfile
setlocal EnableDelayedExpansion
rem modifies the file to include references to the new local repository
(for /F "delims=" %%a in (%stfolder%\%~1.xml) do (
set "line=%%a"
set "newLine=!line:%~2=!"
if "!newLine!" neq "!line!" (
set "newLine=%replacedX%"
)
echo !newLine!
if "!newLine!" neq "!line!" (
echo !replace!
)
)) > %stfolder%\%~1new.xml
move /y %stfolder%\%~1new.xml %stfolder%\%~1.xml
exit /b 0
该脚本应克隆远程存储库并修改 sourcetree bookmarks.xml 和 opentabs.xml 以包含对新存储库的引用。 通过重复
set rep="HTTPSLinktoRemoteRepository
和 call :CloneRep "nameOfRepositoryLocally"
行,脚本可以添加多个存储库。