Mercurial 如何从hg存档中删除前缀?
我想从存储库导出文件,忽略工作树中的更改。此外,我希望看到它的一个子集,而不是导出所有内容。目标目录可能已经包含一些文件,必须覆盖这些文件 鉴于:Mercurial 如何从hg存档中删除前缀?,mercurial,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/di
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
srcdir=some/sub/dir
dstdir=输出/dir
#hg archive自动添加“项目版本”前缀。考虑到srcdir,
#proj version/some/sub/dir/X应该变成dstdir/X,因此剥离4个组件
前缀长度=$(grep-c/您可以
hg存档…&&cd输出/some/sub/dir&&tar…
不是吗
- 构建中间repo(),其中
some/sub/dir/
将是此存储库的根目录(也要了解主题中的示例),并直接从中间存储库的hg archive
获取tar'red归档
我已经可以将tar
用于--剥离组件
,但我想避免这种情况。我真的不想得到repo的子集,只想得到文件。类似于git archive
或svn export
@Lekensteyn的东西-我的任何解决方案有什么不好的吗?!不同的方法,相同的结果更优雅的东西。第一个hg archive-t tar…&&cd output/some/sub/dir&&tar xv--strip components
(?)比当前情况稍差。我的目标请参见简单的git
调用。第二个示例创建了一个新的repo,看起来更复杂。@Lekensteyn-a)第一种解决方案必须在没有的情况下使用--strip组件:pwd
是taring的dir,您有some/sub/dir/
b)快速转换(对我来说)并不复杂-只有三个简短、易读的命令(与Git的语法相反,但这是Git的常见弱点)