hg архив в удаленный каталог - PullRequest
4 голосов
/ 26 февраля 2010

Есть ли способ заархивировать хранилище Mercurial в удаленный каталог через SSH? Например, было бы хорошо, если бы можно было сделать следующее:

hg archive ssh://user@example.com/path/to/archive

Однако это не похоже на работу. Вместо этого он создает каталог с именем ssh: в текущем каталоге.

Я создал следующий быстрый и грязный скрипт, который имитирует желаемое поведение, создав временный ZIP-архив, скопировав его по SSH и разархивировав каталог назначения. Тем не менее, я хотел бы знать, если есть лучший способ.

if [[ $# != 1 ]]; then
  echo "Usage: $0 [user@]hostname:remote_dir"
  exit
fi

arg=$1

arg=${arg%/} # remove trailing slash
host=${arg%%:*}
remote_dir=${arg##*:}
# zip named to match lowest directory in $remote_dir
zip=${remote_dir##*/}.zip 

# root of archive will match zip name
hg archive -t zip $zip  
# make $remote_dir if it doesn't exist
ssh $host mkdir --parents $remote_dir
# copy zip over ssh into destination
scp $zip $host:$remote_dir  
# unzip into containing directory (will prompt for overwrite)
ssh $host unzip $remote_dir/$zip -d $remote_dir/..
# clean up zips
ssh $host rm $remote_dir/$zip 
rm $zip

Edit : clone -and- push было бы идеально, но, к сожалению, на удаленном сервере не установлена ​​Mercurial.

Ответы [ 5 ]

7 голосов
/ 28 февраля 2010

Нет, это невозможно - мы всегда предполагаем, что на удаленном хосте установлена ​​работающая установка Mercurial.

Я определенно согласен с вами, что эта функциональность была бы хороша, но я думаю, что это должно быть сделано в расширении. Mercurial не является обычной программой для копирования файлов SCP / FTP / rsync, поэтому не ожидайте увидеть эту функцию в ядре.

Это напоминает мне ... возможно, вы можете использовать расширение FTP , чтобы заставить его делать то, что вы хотите. Удачи! : -)

1 голос
/ 04 сентября 2010

Я часто нахожусь в подобной ситуации. Я обхожу это с помощью sshfs .

  1. sshfs me@somewhere-else:path/to/repo local/path/to/somewhere-else
  2. hg archive local/path/to/somewhere-else
  3. fusermount -r somewhere-else

Единственный недостаток - sshfs медленнее, чем nfs, samba или rsync. Как правило, я не замечаю, так как мне редко нужно что-либо делать в удаленной файловой системе.

1 голос
/ 30 марта 2010

Не могли бы вы использовать туннель ssh для монтирования удаленного каталога на локальном компьютере, а затем просто выполнять стандартные операции hg clone и hg push локально (насколько известно HG), но где они фактически записывают в файловую систему, которая находится на удаленном компьютере?

Похоже, есть несколько вопросов о стеке потока:

1 голос
/ 26 февраля 2010

Рассматривали ли вы просто иметь клон на пульте и делать hg push для архивирования?

0 голосов
/ 12 августа 2016

Вы также можете просто выполнить hg на удаленном хосте:

ssh user@example.com "cd /path/to/repo; hg archive -r 123 /path/to/archive"
...