当前位置:  开发笔记 > 运维 > 正文

使用Git和Mercurial进行部分克隆

如何解决《使用Git和Mercurial进行部分克隆》经验,为你挑选了4个好方法。

是否有可能只在Git和Mercurial中克隆一个分支(或来自给定的提交)?我的意思是,我想要克隆一个中央回购,但由于它很庞大,我只想获得它的一部分,并且仍能够回馈我的变化.可能吗?比如,我只想从Tag 130开始或类似的东西?

如果是这样,怎么样?



1> Jakub Narębs..:

在Git土地中,您正在谈论三种不同类型的部分克隆:

浅克隆:我想要从修订点X开始的历史.

使用git clone --depth 了这一点,但请记住浅克隆与其他信息库交互比较有限.您将能够生成补丁并通过电子邮件发送.

文件路径的部分克隆:我希望在某个目录中包含所有修订历史记录/path.

在Git中不可能.使用现代Git,虽然你可以有稀疏结账,即你有完整的历史,但你检查(有​​工作区)只有所有文件的子集.

仅克隆选定的分支:我想只克隆一个分支(或选定的分支子集).

可能的,和

git的1.7.10之前并不简单:你需要做什么克隆手动做,即git init [],然后git remote add origin ,编辑.git/config替换*remote.origin.fetch所要求的分支(可能是"主"),然后git fetch.

从git 1.7.10开始 git clone提供的--single-branch选项似乎只是为了这个目的而添加,看起来很简单.

但请注意,由于分支通常共享其大部分历史记录,因此克隆仅一部分分支的收益可能比您想象的要小.

您还可以仅对选定的分支子集进行浅层克隆.

如果你知道人们会怎样想通过文件路径(多个项目在同一仓库)打破下来的东西,你可以使用子模块(有点像SVN:外部组件)预拆分成回购分别可复制的部分.



2> Ry4an Brase..:

在mercurial土地,你谈论三种不同类型的部分克隆:

浅克隆:我希望从修订点X开始的历史记录使用remotefilelog扩展名

文件路径的部分克隆:我希望目录/路径中的所有修订历史记录具有实验性的narrowhg扩展名,或者我只希望目录/路径中的文件位于我的工作目录中,具有实验稀疏扩展(从4.3版本开始,请参阅参考资料hg help sparse).

分支部分克隆:我希望分支Y上的所有修订历史记录:使用clone -r

如果您知道人们希望如何通过文件路径解决问题(同一个仓库中的多个项目(羞辱你)),您可以使用子存储库(类似于svn externals)将repo预拆分为可单独克隆的部分

此外,至于"如此巨大,我只想得到它的一部分":你真的只需要这样做一次.只是在你吃午饭时克隆它,然后你永远拥有它.随后你可以pull有效地继续前进.如果你想要它的另一个克隆,只需克隆你的第一个克隆.你得到克隆的地方并不重要(本地克隆不占用额外的磁盘空间,因为它们是封面下的硬链接).


这两个都是没有实现的被拒绝的提议.
*现在可以使用'remotefilelog'来实现浅克隆:https://bitbucket.org/facebook/remotefilelog*可以通过文件路径进行部分克隆(但仍然是实验性的),请参阅http://comments.gmane.org/gmane.comp.版本control.mercurial.devel/69389

3> nobar..:

所选答案提供了一个很好的概述,但缺乏一个完整的例子.

最大限度地减少下载和结帐的足迹 (a), (b):

git clone --no-checkout --depth 1 --single-branch --branch (name) (repo) (folder)
cd (folder)
git config core.sparseCheckout true
echo "target/path/1" >>.git/info/sparse-checkout
echo "target/path/2" >>.git/info/sparse-checkout
git checkout

定期优化本地存储库占用空间 (c) (可选,小心使用):

git clean --dry-run # consider and tweak results then switch to --force
git gc
git repack -Ad
git prune

另请参见:如何使用git处理大型存储库



4> 小智..:

此方法创建没有子存储库的无版本存档:

hg clone -U ssh://machine//directory/path/to/repo/project projecttemp

cd projecttemp

hg archive -r tip ../project-no-subrepos

没有子存储库的无版本源代码位于project-no-subrepos目录中

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有