有没有办法通过SSH将Mercurial存储库存档到远程目录?例如,如果可以执行以下操作将会很好:
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
修改:clone
- 和 - push
是理想选择,但不幸的是远程服务器没有安装Mercurial。
答案 0 :(得分:7)
不,这是不可能的 - 我们总是假设远程主机上有一个正常运行的Mercurial安装。
我绝对同意你的看法,这个功能会很好,但我认为必须在扩展中进行。 Mercurial不是一般的SCP / FTP / rsync文件复制程序,所以不要期望在核心中看到这个功能。
这让我想起......也许你可以建立在FTP extension上,让它做你想做的事。祝好运! : - )
答案 1 :(得分:1)
您是否考虑过在遥控器上安装克隆并执行hg push
存档?
答案 2 :(得分:1)
您是否可以使用ssh隧道在本地计算机上安装远程目录,然后在本地执行标准hg clone
和hg push
操作(就HG而言)但实际写入的位置到远程计算机上的文件系统?
看起来有几个关于这样做的stackoverflow问题:
答案 3 :(得分:1)
我经常处于类似情况。我绕过它的方式是使用sshfs。
sshfs me@somewhere-else:path/to/repo local/path/to/somewhere-else
hg archive local/path/to/somewhere-else
fusermount -r somewhere-else
唯一的缺点是sshfs比nfs,samba或rsync慢。通常我没有注意到,因为我很少需要在远程文件系统中做任何事情。
答案 4 :(得分:0)
您也可以在远程主机上执行hg:
ssh user@example.com "cd /path/to/repo; hg archive -r 123 /path/to/archive"