是否可以在 Git 和 Mercurial 中只克隆一个分支(或从给定的提交)?我的意思是,我想克隆一个中央仓库,但由于它很大,我只想得到它的一部分,并且仍然能够回馈我的更改。可能吗?比如,我只想要标签 130 或类似的东西?
如果是,怎么做到的?
最佳答案
在 Git 领域,您谈论的是三种不同类型的部分克隆:
浅克隆:我想要从修订点 X 开始的历史记录。
使用
git clone --depth <n> <url>
为此,但请记住,浅克隆在与其他存储库交互方面有些受限。您将能够生成补丁并通过电子邮件发送它们。按文件路径进行部分克隆: 我想要某个目录中的所有修订历史记录
在 Git 中/path
.不可能。使用现代 Git,尽管您可以稀疏 check out ,即您拥有完整的历史记录,但您只 check out (在工作区中)所有文件的子集。
仅克隆选定的分支:我只想克隆一个分支(或选定的分支子集)。
可能,并且
在 git 1.7.10 之前并不简单:您需要手动执行 clone 执行的操作,即
git init [<directory>]
, 然后git remote add origin <url>
, 编辑.git/config
替换*
在remote.origin.fetch
通过请求的分支(可能是'master'),然后是git fetch
.as of git 1.7.10
git clone
提供--single-branch
似乎只是为了这个目的而添加的选项,而且看起来很简单。但请注意,由于分支通常共享它们的大部分历史记录,因此仅克隆分支子集的 yield 可能比您想象的要小。
您还可以只对选定的分支子集进行浅克隆。
如果您知道人们希望如何按文件路径分解内容(同一存储库中的多个项目),您可以使用子模块(有点像 svn:externals)将存储库预先拆分为单独的可克隆部分。
关于git - 使用 Git 和 Mercurial 进行部分克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2586824/