如何在特定提交时浅显示克隆存储库中的所有文件?

时间:2012-09-12 07:31:04

标签: git

我正在尝试从特定提交的存储库中提取浅克隆所有文件。我想将这些文件提取到备用位置,而不会影响现有存储库的HEAD。

这是我正在运行以获取这些文件的命令......

git --git-dir="C:\temp\repository" --work-tree="C:\temp\files" checkout -f "e2f4b8cf188c87db6a11c6f421b06f701dd6b07b"

上面的命令可以解压缩我想要的文件,但是我的问题是这使得我的存储库中有一个独立的HEAD。

提取这些文件的最佳方法是什么?

可能重复:How to shallow clone a specific commit with depth 1?

修改说明:

  • 有一个自动进程提交到此存储库。 (这就是为什么我不想分离HEAD)
  • 我想从特定点提取存储库中的所有文件。 (我知道提交ID)
  • 我想将这些文件提取到其他位置。

2 个答案:

答案 0 :(得分:2)

我很难说出你想要的东西,所以这里有一些方法可以在提交时获得提交或存储库状态。假设提交是1234abcd

1)在1234abcd查看存储库状态的两种方法:

git checkout 1234abcd ;# 'detached HEAD' state; just don't commit new work    
git reset --hard 1234abcd ;# fully reset to the commit, abandon uncommitted work

2)在1234abcd

处压缩存储库状态
git archive -o myfile.zip 1234abcd ;# zip up into 'myfile.zip'

3)从1234abcd

创建电子邮件补丁
git format-patch -M 1 1233abcd

4)输出git补丁格式,以便您可以重复使用它(例如git apply将读取git diff的输出,您可以将后者输送到前者)

git diff 1234abcd 1234abcd~1 | git apply ;# create and reapply the patch to the index
git diff 1234abcd 1234abcd~1 > outfile.txt ;# redirect it to an outfile

答案 1 :(得分:0)

从另一个repo中获取分支(不要拉,即不合并分支),然后从另一个分支中挑选提交。这将特别改变当前的分支&提交它的完整历史。

关于Git Cherry Pick的更多细节:http://git-scm.com/docs/git-cherry-pick