我正在尝试在 wordpress 安装上测试一些东西。在这样做时,我想快速复制回购。但是,上传目录(wp-content/uploads
)很大,所以我想忽略它。
注意:我不想一直 .gitignore 这个目录,只是为了这个场景。
基本上,我想要一个像这个伪代码这样的命令:git clone --ignore wp-content/uploads
.
将该目录添加到 .gitignore、克隆然后还原 .gitignore 的最佳方法是什么?或者有没有更好的方法?
我正在尝试在 wordpress 安装上测试一些东西。在这样做时,我想快速复制回购。但是,上传目录(wp-content/uploads
)很大,所以我想忽略它。
注意:我不想一直 .gitignore 这个目录,只是为了这个场景。
基本上,我想要一个像这个伪代码这样的命令:git clone --ignore wp-content/uploads
.
将该目录添加到 .gitignore、克隆然后还原 .gitignore 的最佳方法是什么?或者有没有更好的方法?
聚会有点晚了,但是:你不想要一个稀疏的结帐吗?
mkdir <repo> && cd <repo>
git init
git remote add –f <name> <url>
启用稀疏结帐:
git config core.sparsecheckout true
通过在 .git/info/sparse-checkout 中列出所需的子树来配置 sparse-checkout:
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/。
git clone
将始终克隆完整的存储库*,包括以前添加到存储库的所有提交。因此,即使您暂时删除文件,然后克隆它,您仍然会收到包含这些文件的旧版本。
此外,仅编辑.gitignore
不会从存储库中删除跟踪的文件,即使它们通常会被忽略。
所以不,在克隆过程中跳过某个文件夹是不可能的。
*可以限制克隆期间检索的提交数量,但这不会使存储库非常可用。
您可以指定要克隆的深度(--depth=1
仅获得 1 次提交)。您可能希望设置一个缺少此目录的分支,然后仅以 1 的深度进行克隆。由于 git 是基于快照的,因此在克隆时排除提交的一部分并不容易。这是最接近您想要的。
如果你完全控制了这个 repo,你可能想要创建这个目录的子模块,并且只在你想要管理该部分时才进行子模块更新。
在服务器上:
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