2013-01-14 253 views
14

我试图在wordpress安装上测试一些东西。这样做,我想快速复制回购。然而,上传目录(wp-content/uploads)很大,所以我想忽略它。git克隆,忽略目录

注意:我不想一直为这个目录设置.gitignore这个目录,只是为了这个场景。

基本上,我想要一个像这样的伪码的命令:git clone --ignore wp-content/uploads

将该目录添加到.gitignore,clone,然后恢复.gitignore的最佳方式是?还是有更好的方法?

+0

这个问题的答案说,你不能用一个选项来克隆至少:http://stackoverflow.com/questions/4257622/clone-of-git-repository-excluding-subdirectory – Michael

+0

@迈克尔我很好,没有使用'clone'。我会看看这个问题/答案。谢谢! – hookedonwinter

回答

5

git clone将始终克隆完整存储库*,包括所有以前提交到存储库的提交。因此,即使您暂时删除这些文件,然后克隆它,您仍然会收到包含这些文件的旧版本。

此外,仅编辑.gitignore将不会从存储库中删除跟踪的文件,即使它们通常会被忽略。

所以不,在克隆过程中不可能跳过某个文件夹。

*可以限制克隆期间检索的提交量,但这不会使存储库非常有用。

3

您可以指定要克隆的深度(--depth=1只能获得1次提交)。您可能想要设置一个缺少此目录的分支,然后仅克隆一个深度的分支。由于git是基于快照的,克隆时排除部分提交并不容易。这是最接近你想要的。

如果您完全控制此回购,您可能需要制作此目录的子模块,并且只在您想要管理该部件时进行子模块更新。

2

在服务器上:

git checkout master^0 # the ^0 checks out the commit itself, not the branch 
git filter-branch --tree-filter 'git rm -r wp-content/uploads' HEAD 
git checkout -b filtered 

然后,您想要的位置(上一个大项目过滤分支在约2-3每秒提交这里生成新的历史),

git init 
git remote add gimme your://repo/path 
git fetch gimme filtered 

编辑:根据http://git-scm.com/docs/git-filter-branch修复语法错误

5

晚会有点晚,但是:你不想要一个稀疏的结帐吗?在列出所需的子树

git config core.sparsecheckout true 

配置稀疏结帐:

mkdir <repo> && cd <repo> 
git init 
git remote add –f <name> <url> 

启用稀疏结帐。混帐/信息/疏结账:从远程

echo some/dir/ >> .git/info/sparse-checkout 
echo another/sub/tree >> .git/info/sparse-checkout 

结帐:

git pull <remote> <branch> 

更多信息,请参见http://jasonkarns.com/blog/subdirectory-checkouts-with-git-sparse-checkout/

+0

即使只将指定的目录/文件签出到本地沙箱中,仍会提取所有内容。 –