是否有可能只在Git和Mercurial中克隆一个分支(或来自给定的提交)?我的意思是,我想要克隆一个中央回购,但由于它很庞大,我只想获得它的一部分,并且仍能够回馈我的变化.可能吗?比如,我只想从Tag 130开始或类似的东西?
如果是这样,怎么样?
Jak*_*ski 75
在Git土地中,您正在谈论三种不同类型的部分克隆:
浅克隆:我想要从修订点X开始的历史.
使用git clone --depth <n> <url>了这一点,但请记住浅克隆与其他信息库交互比较有限.您将能够生成补丁并通过电子邮件发送.
文件路径的部分克隆:我希望在某个目录中包含所有修订历史记录/path.
在Git中不可能.使用现代Git,虽然你可以有稀疏结账,即你有完整的历史,但你检查(有工作区)只有所有文件的子集.
仅克隆选定的分支:我想只克隆一个分支(或选定的分支子集).
可能的,和
git的1.7.10之前并不简单:你需要做什么克隆手动做,即git init [<directory>],然后git remote add origin <url>,编辑.git/config替换*在remote.origin.fetch所要求的分支(可能是"主"),然后git fetch.
从git 1.7.10开始 git clone提供的--single-branch选项似乎只是为了这个目的而添加,看起来很简单.
但请注意,由于分支通常共享其大部分历史记录,因此克隆仅一部分分支的收益可能比您想象的要小.
您还可以仅对选定的分支子集进行浅层克隆.
如果你知道人们会怎样想通过文件路径(多个项目在同一仓库)打破下来的东西,你可以使用子模块(有点像SVN:外部组件)预拆分成回购分别可复制的部分.
Ry4*_*ase 50
在mercurial土地,你谈论三种不同类型的部分克隆:
hg help sparse).如果您知道人们希望如何通过文件路径解决问题(同一个仓库中的多个项目(羞辱你)),您可以使用子存储库(类似于svn externals)将repo预拆分为可单独克隆的部分
此外,至于"如此巨大,我只想得到它的一部分":你真的只需要这样做一次.只是在你吃午饭时克隆它,然后你永远拥有它.随后你可以pull有效地继续前进.如果你想要它的另一个克隆,只需克隆你的第一个克隆.你得到克隆的地方并不重要(本地克隆不占用额外的磁盘空间,因为它们是封面下的硬链接).
所选答案提供了一个很好的概述,但缺乏一个完整的例子.
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
Run Code Online (Sandbox Code Playgroud)
定期优化本地存储库占用空间 (c) (可选,小心使用):
git clean --dry-run # consider and tweak results then switch to --force
git gc
git repack -Ad
git prune
Run Code Online (Sandbox Code Playgroud)
另请参见:如何使用git处理大型存储库
小智 5
此方法创建没有子存储库的无版本存档:
hg clone -U ssh://machine//directory/path/to/repo/project projecttemp
cd projecttemp
hg archive -r tip ../project-no-subrepos
Run Code Online (Sandbox Code Playgroud)
没有子存储库的无版本源代码位于project-no-subrepos目录中
| 归档时间: |
|
| 查看次数: |
25863 次 |
| 最近记录: |