2009-11-23 94 views
16

我有多个mercurial存储库,并使用hg clone在我们的文件服务器上创建备份。现在我想编写一个批处理文件,每天通过在每个子目录上运行hg pull -u来更新它们。hg pull只能在当前工作目录下运行吗?

我想保留这个备份脚本尽可能通用,所以它应该更新存储在我的H:\ BACKUPS \ REPOS文件夹中的所有备份存储库。这是我的hgbackup.bat存储在同一个文件夹:

for /f "delims=" %%i in ('dir /ad/b') do hg pull -u

问题:HG拉似乎只对当前工作目录操作,似乎没有切换到指定目标存储库拉。因为我讨厌Windows Batch Scripting,所以我想让我的.bat尽可能简单,并避免cd'ing到不同的目录。

任何想法如何在不同的目录上运行hg pull -u

+0

如果您只是将其作为备份存储,为什么'-u'pdate on pull?它只是多余地增加您存储的数据量 – 2014-01-21 00:54:31

回答

32

使用-R -switch:

hg pull -u -R /path/to/repository 

hg pull所有命令行选项见hg -v help pull(该-v开关告诉有助于包括全局选项)。

+1

感谢您的帮助!是的,我弄乱了-R选项,但我认为它会指定要从中提取的存储库。 – fbuchinger 2009-11-23 10:05:13

+3

谢谢!作为其他googlers的说明,-R选项是在除当前目录以外的目录上运行任何hg命令的全局选项。我用它把一个repo中的commit提交到一个相关的repo中:'hg log -pr 9369 -R ../other-repo | patch -p1'。如果你没有补丁,'hg import --no-commit'类似。 – undefined 2012-08-16 21:29:01

0

由于我正在为自己的计算机工作,而不是批处理脚本,我在PowerShell中完成了这个问题(因为您提到它在服务器上,所以我认为PS可用)。这可以同时处理Subversion和Mercurial存储库:

$path = "c:\users\mattgwagner\Documents\Code" 

foreach($fi in get-childitem $path) 
{ 
    if(test-path $path\$fi\.svn) 
    { 
     "Updating " + $fi + " via Subversion..." 
     svn update $path\$fi 
    } 
    elseif(test-path $path\$fi\.hg) 
    { 
     "Updating " + $fi + " via Mercurial..." 
     hg pull -u -R $path\$fi 
    } 
}