2009-11-23 98 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 
    } 
}