我想从存储库导出文件,忽略工作树中的更改。此外,我希望看到它的一个子集,而不是导出所有内容。目标目录可能已包含一些文件,必须覆盖这些文件。
假设:
project/some/sub/dir/
我想将其导出到:
output/dir/
在git
中,我可以使用:
git archive --prefix=dir/ HEAD -- some/sub/dir/ | tar -xv -C output
hg
中的等效命令是什么?如果我使用hg archive -t files -I some/sub/dir output/
,那么我会获得output/some/sub/dir
。我可以通过tar管道结果,但是我必须手动计算应该删除的前缀:
hg archive -t tar -I some/sub/dir/ - |
tar -xv -C output --strip-components=3
(实际上,我还有其他一些应该被忽略的tar模式,例如--exclude='.*'
)。有任何想法吗?此导出将针对位于存储库中的其他三个目录。
现状:
srcdir=some/sub/dir
dstdir=output/dir
# hg archive auto-adds a 'proj-version' prefix. Given the srcdir,
# proj-version/some/sub/dir/X should become dstdir/X, so strip 4 components
prefixlength=$(grep -c / <<<"/${srcdir%%/}/")
hg archive -t tar -I "$srcdir" - |
tar -xv -C "$dstdir" --strip-components=$prefixlength
答案 0 :(得分:2)
你可以
hg archive ... && cd output/some/sub/dir && tar ...
不是吗?some/sub/dir/
将成为此存储库的根(也可以从Converting from Mercurial主题中了解示例)并直接从{{1}获取目标存档} for intermediate repository