2009-11-23 4 views
16

여러 개의 수은 리포지토리가 있으며 hg clone을 사용하여 파일 서버에 백업을 만들었습니다. 이제 각 하위 디렉토리에 hg pull -u을 실행하여 하루에 한 번씩 업데이트하는 배치 파일을 작성하고 싶습니다.hg pull은 현재 작업 디렉토리에서만 작동합니까?

나는이 백업 스크립트를 가능한 한 포괄적으로 유지하고 싶으므로 내 H : \ BACKUPS \ REPOS 폴더에 저장된 모든 백업 리포지토리를 업데이트해야합니다.

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

문제는 :는 현재 작업 디렉토리에서 작동하도록 보인다 HG는 당기의 대상 저장소를 지정하는 스위치 없을 것 같다 이것은 동일한 폴더에 저장됩니다 내 hgbackup.bat입니다 당기다. Windows Batch Scripting이 싫으므로 .bat를 가능한 한 간단하게 유지하고 다른 디렉토리로 이동하지 마십시오.

다른 디렉토리에서 hg pull -u을 어떻게 실행할 수 있습니까?

+0

백업으로 저장하는 경우'-u' 업데이트를 가져 오는 이유는 무엇입니까? 도움이 필요하시면 저장하고있는 데이터의 양을 중복해서 늘리십시오. –

답변

32

사용 -R 스위치 ':

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

합니다 (-v 스위치는 글로벌 옵션을 포함하는 데 도움이 말한다) hg pull의 모든 명령 행 옵션에 대한 hg -v help pull를 참조하십시오.

+1

감사합니다! 예, 저는 -R 옵션을 사용하여 stumpled했습니다. 그러나 저장소를 가져올 저장소를 지정한다고 생각했습니다. – fbuchinger

+3

고마워요! 다른 Google 직원에 대한 설명으로 -R 옵션은 현재 디렉토리가 아닌 다른 디렉토리에서 hg 명령을 실행하는 글로벌 옵션입니다. 나는 하나의 repo에서 관련된 repo로 커밋을 변경하는 데 사용했다 :'hg log -pr 9369 -R ../other-repo | 패치 -p1'. 패치가 없다면,'hg import --no-commit'도 비슷합니다. – undefined

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 
    } 
}