我有几个存储库供个人使用,我将它们备份到我的主服务器上。有很多,并且需要相当多的时间在每个存储库上执行拉取操作。Mercurial批量拖拉操作
mercurial是否支持多个存储库的批处理?如果是这样,我该怎么办?如果没有,是否有相对简单的解决方案?
我使用Windows并使用TortoiseHg(但我没有使用命令行的问题)。
我有几个存储库供个人使用,我将它们备份到我的主服务器上。有很多,并且需要相当多的时间在每个存储库上执行拉取操作。Mercurial批量拖拉操作
mercurial是否支持多个存储库的批处理?如果是这样,我该怎么办?如果没有,是否有相对简单的解决方案?
我使用Windows并使用TortoiseHg(但我没有使用命令行的问题)。
如果存储库是静态的,一个简单的解决方案是编写一个批处理文件从所有这些存储库中提取。但不,mercurial不直接支持这一点。
为什么不在主服务器上使用hook
来推送到从服务器?此添加到项目中的hgrc
:
[hooks]
changegroup = hg push -f https://hg.server2.com/TheRepo
从hgrc
帮助文件FYI约changegroup
:
changegroup:一个changegroup后 运行已添加通过推 ,拉或松绑。 的第一个新变更集的ID在$ HG_NODE中。 发生更改的URL位于 $ HG_URL。
所以当更改组进入服务器时,它会将hg push
更改为另一个服务器。
我有一个顶级存储库,其中有几个批处理文件和一个包含所有存储库的文本文件。
即repolist.txt
Repo1
# Comment
Folder\Repo2
Repo3
和批处理文件hgrpull.bat样子:
REM First pull top level repository to get updated repolist etc
hg pull --update --quiet
REM Find path to server repository
FOR /F %%x IN ('hg showconfig paths.default') DO SET HGSERVER=%%x
REM Now pull or clone each repository
FOR /F "delims=; eol=#" %%x IN (repolist.txt) DO (
If EXIST "%%x\.hg" (
ECHO Pull %%x
hg pull --update --quiet --repository "%%x"
) ELSE (
ECHO Clone %%x
IF NOT EXIST "%%x" MKDIR "%%x"
hg clone --pull "%HGSERVER%\%%x" "%%x"
)
)
我也得到了一些批处理文件来执行对所有库操作。 (状态/传入/传出等)。它们都基于以下hgr.bat:
FOR /F "delims=; eol=#" %%x IN (repolist.txt) DO (
ECHO ** %%x
hg %1 --repository "%%x" %2 %3 %4 %5 %6
)
拉/克隆所有存储库:hgrpull
检查状态上的所有信息库:hgr st -mard