如何从hg存档中删除前缀?

时间:2014-08-26 12:13:11

标签: mercurial

我想从存储库导出文件,忽略工作树中的更改。此外,我希望看到它的一个子集,而不是导出所有内容。目标目录可能已包含一些文件,必须覆盖这些文件。

假设:

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

1 个答案:

答案 0 :(得分:2)

你可以

  • hg archive ... && cd output/some/sub/dir && tar ...不是吗?
  • 构建中间回购(Convert Extension),其中some/sub/dir/将成为此存储库的根(也可以从Converting from Mercurial主题中了解示例)并直接从{{1}获取目标存档} for intermediate repository