【发布时间】:2011-10-17 12:35:33
【问题描述】:
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 他们的(快进)开发到主服务器。这部分是为了安全、IP 保护和 repo 大小,部分是为了减少大型 repo 给幼稚的编码人员带来的混乱。是否有允许这样做的 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以进行 root 提交。当您想从提交中发布树时,这可能很有用 在不暴露其全部历史的情况下。你可能想这样做 发布当前树为的项目的开源分支 “干净”,但其完整历史记录包含专有或其他 累赘的代码。
如果你想开始一个断开连接的历史记录,记录一组 与
<start_point>的路径完全不同的路径,然后 您应该在创建后立即清除索引和工作树 通过从顶层运行git rm -rf .来创建孤立分支 工作树。之后,您将准备好准备新文件, 通过从其他地方复制它们来重新填充工作树, 提取压缩包等。
VonC 与 Junio 的 cmets 的链接很有趣。我认为手册应该在这种情况下提供指导,并允许正确的命令[例如clone <branch> --options] 仅提取 repo 的相关部分。显然,push 成功的概率会通过在历史底部有一些链接提交和 SHA1 来增加,这将锁定 repo 匹配。
更新 Git 1.9.0:2014 年 2 月 14 日发布说明。
“过去禁止从浅克隆存储库中获取数据, 主要是因为所涉及的代码路径没有经过仔细审查 我们也懒得支持这种用法。此版本尝试 允许对象从一个浅克隆的存储库中转移出来 更可控的方式(即接收器成为浅层存储库 具有截断的历史记录)。”
这对浅层克隆者来说是个好消息。 下一个 - 可能是狭义克隆。
【问题讨论】:
-
“减少大型 repo 给幼稚编码人员带来的困惑” 我认为您需要新的开发人员:)
-
那些新的开发者是从天真的程序员开始的 ;-) 有些困惑已经习惯了 git 本身,这可能是一个挑战,所以我们从简单的开始......
-
拥有提交列表的想法可能是 Git 中最基本的概念。如果我被介绍给 Git 时总是只包含 1 次提交,我想我会更加困惑。
-
@Josh,最初一个刚进入 git 的新开发人员(或团队)可能只从浅深度开始(六次提交?) - 这与一些现有的做法相比他们所看到的只是最后一次入住!当产品周期为多年时,历史悠久的 CM 风格是缓慢的,因此这是一个巨大的文化变革。
-
目前看来可以:查看stackoverflow.com/a/21217267/4398050