我有几个供个人使用的存储库,并将它们备份在我的主服务器上。有很多,在每个存储库上执行拉取操作需要相当多的时间。
mercurial 是否支持批量拉取多个存储库?如果是这样,我该怎么做?如果没有,有没有相对简单的解决方案?
我正在使用 Windows 并使用 TortoiseHg(但我使用命令行没有问题)。
我有几个供个人使用的存储库,并将它们备份在我的主服务器上。有很多,在每个存储库上执行拉取操作需要相当多的时间。
mercurial 是否支持批量拉取多个存储库?如果是这样,我该怎么做?如果没有,有没有相对简单的解决方案?
我正在使用 Windows 并使用 TortoiseHg(但我使用命令行没有问题)。
如果存储库是静态的,一个简单的解决方案是编写一个批处理文件以从所有这些存储库中提取。但是不,mercurial 不直接支持这一点。
为什么不在hook
主服务器上使用 a 推送到从服务器?将此添加到项目的hgrc
:
[hooks]
changegroup = hg push -f https://hg.server2.com/TheRepo
仅供参考,changegroup
来自hgrc
帮助文件:
changegroup:在通过 push、pull 或 unbundle 添加 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