Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial 如何从hg存档中删除前缀?_Mercurial - Fatal编程技术网

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的常见弱点)