gpt4 book ai didi

Git:如何只从子目录复制版本化文件?

转载 作者:太空狗 更新时间:2023-10-29 14:44:06 24 4
gpt4 key购买 nike

问题

我有一个 git 仓库,在根 :/a:/b 下有两个子目录,我想复制所有versioned文件从 :/a:/a-copy.

基本上,我想做

git mv a a-copy

实际上没有移动a

更多详情

:/a中也有很多非版本化的文件,我不想删除,所以不能简单的做

git clean -df a
cp -r a a-copy

我发现(在 Linux 上)最好的解决方法是

mkdir a-copy
cd a
git ls-files -z | xargs -0 -i cp --parents {} ../a-copy

但我希望有更简单的方法。

此问题是否与“Do a “git export” (like “svn export”)?”重复?

That question类似,但它仅涵盖复制/导出整个 存储库的情况。我只想复制 repo 的部分,即 :/a 下的文件,而不是 :/b 下的文件。在发布此问题之前,我阅读了该问题及其答案。现在我的问题有了答案,我发现基于 git archive 的其他问题的解决方案也解决了我的问题。

最佳答案

您要查找的命令序列是:

git archive HEAD a | tar -x -C /tmp
mv /tmp/a b

或等效

cd a
git archive --prefix=b/ HEAD . | tar -x -C ..

git archive使用包含 a 子目录中的文件创建一个 tar 存档。它使用来自 HEAD 修订版的这些文件的版本;如果愿意,您可以指定其他 Git 版本。

存档被写入stdout,并通过管道(|)到达tar提取文件 (-x) 并将它们放入目录 /tmp (-C) 的程序。

因为 Git 将文件连同它们的封闭目录 (a) 添加,tar 创建目录 a进入 /tmp,它包含您想要的文件。

您使用 mv 移动(并重命名)/tmp/a 并将其放置在您需要的位置。

关于Git:如何只从子目录复制版本化文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39005924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com