我在根:/a
和:/b
下有两个子目录的git repo,我想将:/a
中的所有版本化文件复制到{{ 1}}。
基本上,我想做
:/a-copy
没有实际移动git mv a a-copy
。
a
中还有很多非版本化文件,我不想删除它们,所以我不能这样做
:/a
我发现的最佳解决方法(在Linux上)是
git clean -df a
cp -r a a-copy
但我希望有一种更简单的方法。
That question类似,但它仅涵盖复制/导出整个回购的情况。我只想复制部分回购,即mkdir a-copy
cd a
git ls-files -z | xargs -0 -i cp --parents {} ../a-copy
下的文件,而不是:/a
下的文件。在发布此问题之前,我已阅读该问题及其答案。现在我已经回答了我的问题,我发现基于:/b
的解决方案也解决了我的问题。
答案 0 :(得分:3)
您正在寻找的命令序列是:
git archive HEAD a | tar -x -C /tmp
mv /tmp/a b
或等效
cd a
git archive --prefix=b/ HEAD . | tar -x -C ..
git archive
使用包含tar
子目录中文件的a
存档创建。它使用HEAD
修订版中的这些文件的版本;如果您愿意,可以指定其他Git
版本。
归档文件写入stdout
,它通过管道(|
)到tar
程序,该程序提取文件(-x
)并将它们放入目录/tmp
(-C
)。
由于Git
将文件与其封闭目录(a
)一起添加,tar
会将目录a
创建为/tmp
,并且它包含您的文件想。
您使用mv
移动(并重命名)/tmp/a
并将其放置在您需要的位置。