我试图在wordpress安装上测试一些东西。这样做,我想快速复制回购。然而,上传目录(wp-content/uploads
)很大,所以我想忽略它。git克隆,忽略目录
注意:我不想一直为这个目录设置.gitignore这个目录,只是为了这个场景。
基本上,我想要一个像这样的伪码的命令:git clone --ignore wp-content/uploads
。
将该目录添加到.gitignore,clone,然后恢复.gitignore的最佳方式是?还是有更好的方法?
我试图在wordpress安装上测试一些东西。这样做,我想快速复制回购。然而,上传目录(wp-content/uploads
)很大,所以我想忽略它。git克隆,忽略目录
注意:我不想一直为这个目录设置.gitignore这个目录,只是为了这个场景。
基本上,我想要一个像这样的伪码的命令:git clone --ignore wp-content/uploads
。
将该目录添加到.gitignore,clone,然后恢复.gitignore的最佳方式是?还是有更好的方法?
git clone
将始终克隆完整存储库*,包括所有以前提交到存储库的提交。因此,即使您暂时删除这些文件,然后克隆它,您仍然会收到包含这些文件的旧版本。
此外,仅编辑.gitignore
将不会从存储库中删除跟踪的文件,即使它们通常会被忽略。
所以不,在克隆过程中不可能跳过某个文件夹。
*可以限制克隆期间检索的提交量,但这不会使存储库非常有用。
您可以指定要克隆的深度(--depth=1
只能获得1次提交)。您可能想要设置一个缺少此目录的分支,然后仅克隆一个深度的分支。由于git是基于快照的,克隆时排除部分提交并不容易。这是最接近你想要的。
如果您完全控制此回购,您可能需要制作此目录的子模块,并且只在您想要管理该部件时进行子模块更新。
在服务器上:
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修复语法错误
晚会有点晚,但是:你不想要一个稀疏的结帐吗?在列出所需的子树
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/。
即使只将指定的目录/文件签出到本地沙箱中,仍会提取所有内容。 –
这个问题的答案说,你不能用一个选项来克隆至少:http://stackoverflow.com/questions/4257622/clone-of-git-repository-excluding-subdirectory – Michael
@迈克尔我很好,没有使用'clone'。我会看看这个问题/答案。谢谢! – hookedonwinter