2 回答
TA贡献1785条经验 获得超4个赞
正如Junio C. Hamano(主要的Git维护者)所说:
不是规则或多或少像:
如果您的浅存储库的历史记录延伸时间不够长而另一个存储库在截断的历史记录之前分叉,那么您无法计算共同的祖先并且无法推出。
更新2014:请参阅“ git clone --depth 1(浅层克隆)是否比它更有用? ”:Git 1.9将解除限制!
2015年更新:使用Git 2.5+,您甚至可以获取单个提交。请参阅“ 从远程git存储库中提取特定提交 ”
原始答案(2011年8月):
实际上,想到它,它比“无法计算共同点”强大得多。
历史可能如下所示:
R---R---R / --R---R---X---X---S---S---S
这里
S
是你在浅水库有提交,R
是存在于接收推式资源库中的提交。
由于您的历史记录很浅,因此两个存储库都没有“X
为了保持收件人存储库的历史记录完整而需要存在的提交”; 接收者并不浅薄,我们不想让它变浅。如果你前一段时间浅克隆,没有工作,而另一侧的进展与对方沟通,及如果对方的进展包括:倒带和历史的重建,你会看到一个类似的拓扑结构。当您浅深地克隆深度为1时,上图中
最左边的'S
'可能是分支的尖端,从那时起,远程端可能已经丢弃了最前面的三个提交,并重建了它导致最右边'R
'的历史。
在这种情况下,推送到遥控器HEAD
将失败。
所以它可以在某些情况下工作,但它不受支持:
如果我要对此说些什么......
我认为“不支持”是提供足够信息的简洁方法,但它只适用于聪明人。
不是每个人都聪明; 有些人自己尝试一下,看到这个操作似乎适用于他们有限数量的试验,并且可以得出结论它大部分时间都可以工作。
他们祝贺自己的情报“大部分时间”,而非“永远”。
当他们看到它不起作用时,他们会感到不安,即使他们已被警告过。
有关浅层克隆更新过程的更多信息,请参阅“ 如何更新git浅层克隆? ”。
TA贡献1998条经验 获得超6个赞
是否有允许这样的git工作流程?
是的,它是作为补丁发送补丁。 git format-patch
是专门为此而设计的。如果你想谷歌了解更多细节,它被称为“看门人”工作流程。很难相信一个组织关注“安全和知识产权保护”,因为你的组织还没有使用类似的东西,一个人或一个小组负责审查“不受信任”的变化,然后再进入真正的构建。
根据您的评论,我现在可以更好地了解您的要求。我建议你创建一个孤儿分支(参见git checkout --orphan),从你希望你的开发者开始。仅将该分支克隆到这些开发人员可访问的不同存储库,并让它们从该存储库正常克隆,推送和拉取。
然后,当你需要将他们的更改重新集成到官方受保护的存储库时,只需拉动他们的分支,制作它的副本,git branch
这样你就不会覆盖原来的孤儿(如果你想稍后重复这个过程),那么重新复制副本到您的原始分支点,并合并或正常的任何。历史将看起来像他们直接从您的受保护仓库工作。
它比平常更复杂,但这是额外隔离的代价。
- 2 回答
- 0 关注
- 477 浏览
添加回答
举报