When/Why 有人会克隆一个特定的分支而不是整个存储库吗?
When/Why would someone clone a specific branch instead of the whole repository?
我正在阅读 this 博客并开始了解
git remote add -t <remoteBranchName> -f origin <remoteRepoUrlPath>
根据博客,此命令克隆指定的远程分支。但是为什么有人会只克隆一个分支呢?我想知道什么情况下只需要克隆一个分支?
任何见解将不胜感激,提前致谢!!
我认为至少有 3 个原因:
- CI 服务器通常不需要为了 运行 管道检出整个存储库。例如,我正在考虑多分支管道,其中管道是根据触发构建的分支定制的。
- 克隆存储库可能需要几分钟时间,尤其是在许多开发人员正在试验新功能(我假设是分支)的项目中
- 如果您知道要在特定分支上工作,为什么还需要其他分支?只是。愚蠢的例子:我有一个 git 别名显示 所有 分支的图表,但大多数时候我只对我正在处理的那个感兴趣。如果您的回购包含许多分支,则在 运行 宁 git 命令的脚本时更有可能出错。
从来没有1 需要这样做。
人们有时 想要 这样做,通常是由于误解(他们认为 Git 分支比实际更重要)。你看到这个的第一反应应该是:我不想那样做。
所谓的单分支克隆,在Git中,意味着git fetch
操作忽略除一个分支名称之外的所有分支名称,只带来在满足该分支的尖端提交所需的任何提交上。但是,如果您的存储库不是 shallow 存储库,这通常意味着无论如何都要带来几乎所有的提交,即,通常很少有时间和 space 进行单次提交节省分支克隆。此规则有例外情况(请参阅脚注 1),如果您确实 确实 节省了大量资金,则可以继续这样做。
您通常可以节省更多时间,并且 space 使用 Git 所谓的 shallow 克隆。因此,除了单分支克隆之外,您可能还想创建一个浅层克隆。 git clone
的 --depth
参数默认创建一个浅的单分支克隆。
浅克隆有一些限制,但大多数讨厌的(例如无法使用 git push
从一个)很久以前就被删除了。由于默认情况下浅克隆是单分支克隆,因此最好了解单分支克隆的作用。
使用任何克隆,尝试 运行:
git ls-remote
(此命令仅打印内容,它不会对您的存储库执行任何操作)。您会看到您的 Git 调用的另一个 Git 列出了 所有 的分支和标记名称以及相应的哈希 ID。这使您的 Git 能够请求他们拥有的所有提交,并为他们的每个分支名称创建或更新远程跟踪名称。如果您不 想要 所有这些,您可以消除大部分这些远程跟踪名称。这加快了一些速度。2 此外,通过不要求他们的某些提交,您可以避免获得他们的 所有 提交——尽管,再次, shallow 克隆 far 更有效地确保您不会获得他们的所有提交。
1在此处插入 Gilbert & Sullivan 例程。有一些特殊情况,例如,当已知分支 X
从不包含具有大文件的提交并且分支 Y
包含 do 具有大文件的提交并且本地磁盘上没有足够的空间容纳大文件。但是“因为是faster/smaller”并不是体力上的要求,只是急躁而已。 :-) 有关更多信息,请参阅上面的其余部分,关于浅层克隆。
2虽然 git ls-remote
必然会询问他们的 Git 关于 所有 他们的分支机构,有些相当最近的工作使 Git 的某些版本更智能一些,因此如果您有一个单分支克隆,或一个 N 值较小的 N 分支克隆,您的 Git 可以告诉他们 Git 你不需要 every 分支和标签名称。在一些存储库中——例如 Google 的 Chrome——有如此多的分支和标签名称,仅此一项节省就很明显了。
为此,Gits(您的和远程的)都必须相当现代。 Git 1.x 就出来了。
我正在阅读 this 博客并开始了解
git remote add -t <remoteBranchName> -f origin <remoteRepoUrlPath>
根据博客,此命令克隆指定的远程分支。但是为什么有人会只克隆一个分支呢?我想知道什么情况下只需要克隆一个分支?
任何见解将不胜感激,提前致谢!!
我认为至少有 3 个原因:
- CI 服务器通常不需要为了 运行 管道检出整个存储库。例如,我正在考虑多分支管道,其中管道是根据触发构建的分支定制的。
- 克隆存储库可能需要几分钟时间,尤其是在许多开发人员正在试验新功能(我假设是分支)的项目中
- 如果您知道要在特定分支上工作,为什么还需要其他分支?只是。愚蠢的例子:我有一个 git 别名显示 所有 分支的图表,但大多数时候我只对我正在处理的那个感兴趣。如果您的回购包含许多分支,则在 运行 宁 git 命令的脚本时更有可能出错。
从来没有1 需要这样做。
人们有时 想要 这样做,通常是由于误解(他们认为 Git 分支比实际更重要)。你看到这个的第一反应应该是:我不想那样做。
所谓的单分支克隆,在Git中,意味着git fetch
操作忽略除一个分支名称之外的所有分支名称,只带来在满足该分支的尖端提交所需的任何提交上。但是,如果您的存储库不是 shallow 存储库,这通常意味着无论如何都要带来几乎所有的提交,即,通常很少有时间和 space 进行单次提交节省分支克隆。此规则有例外情况(请参阅脚注 1),如果您确实 确实 节省了大量资金,则可以继续这样做。
您通常可以节省更多时间,并且 space 使用 Git 所谓的 shallow 克隆。因此,除了单分支克隆之外,您可能还想创建一个浅层克隆。 git clone
的 --depth
参数默认创建一个浅的单分支克隆。
浅克隆有一些限制,但大多数讨厌的(例如无法使用 git push
从一个)很久以前就被删除了。由于默认情况下浅克隆是单分支克隆,因此最好了解单分支克隆的作用。
使用任何克隆,尝试 运行:
git ls-remote
(此命令仅打印内容,它不会对您的存储库执行任何操作)。您会看到您的 Git 调用的另一个 Git 列出了 所有 的分支和标记名称以及相应的哈希 ID。这使您的 Git 能够请求他们拥有的所有提交,并为他们的每个分支名称创建或更新远程跟踪名称。如果您不 想要 所有这些,您可以消除大部分这些远程跟踪名称。这加快了一些速度。2 此外,通过不要求他们的某些提交,您可以避免获得他们的 所有 提交——尽管,再次, shallow 克隆 far 更有效地确保您不会获得他们的所有提交。
1在此处插入 Gilbert & Sullivan 例程。有一些特殊情况,例如,当已知分支 X
从不包含具有大文件的提交并且分支 Y
包含 do 具有大文件的提交并且本地磁盘上没有足够的空间容纳大文件。但是“因为是faster/smaller”并不是体力上的要求,只是急躁而已。 :-) 有关更多信息,请参阅上面的其余部分,关于浅层克隆。
2虽然 git ls-remote
必然会询问他们的 Git 关于 所有 他们的分支机构,有些相当最近的工作使 Git 的某些版本更智能一些,因此如果您有一个单分支克隆,或一个 N 值较小的 N 分支克隆,您的 Git 可以告诉他们 Git 你不需要 every 分支和标签名称。在一些存储库中——例如 Google 的 Chrome——有如此多的分支和标签名称,仅此一项节省就很明显了。
为此,Gits(您的和远程的)都必须相当现代。 Git 1.x 就出来了。