2009-11-23 20 views
16

Birden fazla para biriktirme havuzum var ve dosya sunucumuzda bunların yedeklerini oluşturmak için hg clone kullandık. Şimdi her alt dizinde hg pull -u'u çalıştırarak günde bir kez güncelleyen bir toplu iş dosyası yazmak istiyorum.hg çekme sadece geçerli çalışma dizininde çalışır mı?

Bu yedekleme komut dosyasını olabildiğince genel olarak tutmak istiyorum, bu yüzden H: \ BACKUPS \ REPOS klasöründe saklanan tüm yedek depolarını güncellemelidir.

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

sorun: Sadece geçerli çalışma dizininin çalışmaya görünüyor hg çekin için hedef deposunu belirtmek için hiçbir anahtar gibi görünüyor Bu aynı klasörde depolanır benim hgbackup.bat olduğunu çekmek. Windows Batch Scripting'den nefret ettiğim için .bat'ımı olabildiğince basit tutmak ve farklı dizinlere CD'lerden kaçınmak istiyorum.

hg pull -u farklı bir dizinde nasıl çalıştırabilirim?

+0

Sadece yedek olarak saklıyorsanız, niçin çekmeye devam edersiniz? Bu sadece –

cevap

32

Kullanım -R -Switch:

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

(-v anahtarı küresel seçeneklerini kapsayan yardımcı söyler) hg pull tüm komut satırı seçenekleri için hg -v help pull bakınız.

+1

'u sakladığınız veri miktarını gereksiz yere artırıyor! Evet, -R seçeneğine rastladım, ama depoyu çekeceğini belirtecektim. – fbuchinger

+3

Teşekkürler! Diğer yayıncılar için açıklama olarak, -R seçeneği geçerli dizinden başka bir dizinde herhangi bir hg komutunu çalıştırmak için genel bir seçenektir. Bir repoda yapılan bir değişiklikten ilgili bir repoya doğru değişiklik yapmak için kullandım: 'hg log -pr 9369 -R ../other-repo | yama -p1 '. Eğer yama yoksa, 'hg import --no-commit' benzerdir. – undefined

0

Kendi bilgisayarım için çalışmakta olan bir betik nedeniyle bu soruyu biraz sonra buldum ve bir komut dosyası yerine PowerShell'de yaptım (bir sunucuda belirttiğinizden beri, PS'nin kullanılabilir olduğunu varsaydım)). Bu, hem Subversion hem de Mercurial depolarını işler:

$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 
    } 
} 
İlgili konular