为什么我不能从浅层克隆中推出?
该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.
为什么浅克隆有这种限制?为什么它只是一个补丁工作流程?
对于某些项目工作流程,我需要将最新的提交从单个分支传递给编码器,然后让它们能够push
(快进)开发到主服务器。这部分是为了安全,知识产权保护和回购规模,部分是为了减少大回购会给天真编码员带来的困惑。是否有允许这样的git工作流程?
更新:根据Karl Bielefeldt的回答,git checkout --orphan
应该是正确的答案。但是仍然需要将该分支单独“克隆”给新用户,并且能够有效地推送它。
手册页指出:
git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>] --orphan
创建一个名为
<new_branch>
,启动<start_point>
并切换到它的新孤立分支。在这个新分支上进行的第一次提交将没有父项,它将成为与所有其他分支和提交完全断开的新历史的根。调整索引和工作树,就像之前运行一样
git checkout <start_point>
。这允许您启动一个新的历史记录,记录一组类似于<start_point>
通过轻松运行git commit -a
以进行根提交的路径。当您想要从提交中发布树而不公开其完整历史记录时,这可能很有用。您可能希望这样做以发布项目的开源分支,该项目的当前树是“干净的”,但其完整历史记录包含专有或其他受阻的代码。
如果要启动记录一组完全不同的路径的断开连接的历史记录
<start_point>
,则应通过git rm -rf .
从工作树的顶层运行创建孤立分支后立即清除索引和工作树。之后,您将准备好准备新文件,重新填充工作树,从其他地方复制它们,提取tarball等。
VonC与Junio评论的链接很有意思。我认为手册应该在这种情况下提供指导,并允许正确的命令[例如clone <branch> --options
]只提取回购的相关部分。显然,push
通过在历史记录底部设置一些链接提交和SHA1来锁定repo匹配,可以提高成功的可能性。
更新Git 1.9.0:发布说明2014年2月14日。
“从以前被禁止的浅克隆存储库中获取,主要是因为所涉及的代码路径没有经过仔细审查,我们也没有打扰支持这种用法。这个版本试图允许以更加可控的方式从一个浅层克隆的存储库中转移对象(即接收器变成了一个截断历史的浅存储库)。“
这对浅层克隆人来说是个好消息。接下来 - 可能是狭窄的克隆。
九州编程
米琪卡哇伊