如何从特定提交到外部文件夹检出特定文件夹及其内容?

时间:2013-08-07 13:42:11

标签: git git-checkout

如何从git(版本1.7.0.4)存储库中检索完整的子文件夹到本地文件夹而不首先检查整个存储库? 我认为这将是解决方案:

git --work-tree=/home/tmp/testcheckout checkout COMMITID -- images/*

带有一些目录的示例repo结构:

/git/project1/sourcecode  
/git/project1/images  
/git/project1/howto  
/git/project1/readme.txt

因此,示例命令应检出已提交给该git repo以提交COMMITID的/git/project1/images/home/tmp/testcheckout下的所有文件,但它只检出已在给定COMMITID上提交的文件,忽略之前已提交的所有其他文件。

问题:
使用上面的命令,我只从该子文件夹中获取已使用COMMITID提交的文件。

问题
我想要的是检索COMMITID之前的所有文件。 对此有何解决方案?

重要:我不想克隆整个存储库(700GB),以便以后能够检索1GB的文件。所以必须有一种方法可以直接从回购中获取文件,而无需克隆整个回购。

1 个答案:

答案 0 :(得分:1)

这是一个有效的解决方案。该解决方案具有以下特点:
- 它没有检查整个回购,它只是检查你需要的东西(如果你有100GB以上的回购,这非常方便) - 你创建一个新的repo作为目标,所以你的原始仓库没有任何改变,很好吗?

<强>解决方案

git init /example/gittest
cd /example/gittest
git remote add -f origin /PATH/TO/SOURCE/REPO/.git
git config core.sparsecheckout true
echo images >> .git/info/sparse-checkout
git pull origin master

现在它只将原始仓库中的images文件夹复制到此测试仓库。然后,您可以使用您想要的数据。