git clone --depth
命令选项表示
--depth <depth>
Create a shallow clone with a history truncated to the specified number of revisions.
A shallow repository has a number of limitations
(you cannot clone or fetch from it, nor push from nor into it),
but is adequate if you are only interested in the recent history of a large project with a long history,
and would want to send in fixes as patches.
为什么浅克隆有这个限制?为什么它是一个仅使用补丁的工作流程?对于某些项目工作流程,我需要将单个分支的最新提交传递给程序员,然后让他们能够向主服务器推送(快进)开发。这部分是为了安全性,知识产权保护和存储库大小,以及减少大型存储库会给幼稚的程序员带来的混乱。是否有一种Git工作流程可以实现此功能?
更新:根据Karl Bielefeldt的答案,
git checkout --orphan
应该是正确的答案。但是,仍然需要将那个分支单独“克隆”到新用户,并能够有效地推送它。手册中说明:
创建一个名为
<new_branch>
的新孤立分支,从<start_point>
开始并切换到该分支。在此新分支上进行的第一次提交将没有父级,它将成为完全与所有其他分支和提交断开连接的新历史记录的根。索引和工作树将被调整,就好像您以前运行了
git checkout <start_point>
一样。这使您能够启动一个新的历史记录,通过轻松运行git commit -a
记录与<start_point>
类似的路径集,使其成为根提交。当您想要发布来自提交树的树时,而不需要公开其完整历史记录时,这可能很有用。您可能希望这样做,以发布一个项目的开源分支,该项目的当前树是“干净的”,但其完整历史记录包含专有或受限制的代码位。
如果您想启动一个记录与
<start_point>
完全不同的一组路径的断开历史记录,则应在创建孤立分支后立即清除索引和工作树,从工作树的顶部运行git rm -rf。
然后,您将准备好准备新文件,通过从其他位置复制它们,提取tarball等重新填充工作树。VonC提供的Junio评论链接很有趣。我认为手册应在这种情况下提供指导,并允许正确的命令[e.g.
clone <branch> --options
]只提取存储库的相关部分。显然,具有一些底层历史记录的关联提交和SHA1会锁定匹配的存储库,从而增加push
成功的概率。更新Git 1.9.0:发布说明14 Feb '14。
“从浅克隆的存储库提取以前被禁止,主要原因是涉及的代码路径没有得到仔细验证,我们不会费心支持这种用法。此版本试图以更加受控的方式允许从浅克隆的存储库传输对象(即接收器成为具有截断历史记录的浅存储库)。”
这对于浅克隆者来说是个好消息。接下来可能是窄克隆。