git - 使用 Git 和 Mercurial 进行部分克隆

标签 git mercurial

是否可以在 Git 和 Mercurial 中只克隆一个分支(或从给定的提交)?我的意思是,我想克隆一个中央仓库,但由于它很大,我只想得到它的一部分,并且仍然能够回馈我的更改。可能吗?比如,我只想要标签 130 或类似的东西?

如果是,怎么做到的?

最佳答案

在 Git 领域,您谈论的是三种不同类型的部分克隆:

  • 浅克隆:我想要从修订点 X 开始的历史记录。

    使用 git clone --depth <n> <url> 为此,但请记住,浅克隆在与其他存储库交互方面有些受限。您将能够生成补丁并通过电子邮件发送它们。

  • 按文件路径进行部分克隆: 我想要某个目录中的所有修订历史记录 /path .

    在 Git 中

    不可能。使用现代 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/

相关文章:

Git - 忽略对配置文件的特定修改

git - 更改远程 git 存储库

eclipse - 如何在 Eclipse 上卸载 git?

git - 使用 Maven 发布插件签署 Git 标签?

unix - Mercurial:无法在 .hgrc 文件中使用环境变量

mercurial - 在 TeamCity 中使用 VCS 标签时无限构建

android - 开始使用 mercurial,想要跟踪现有版本

git - 在 git interactive rebase 期间添加了新文件,中止了 rebase,新文件丢失

svn - Mercurial (?) + SVN 互操作

mercurial - 为什么 .hgignore 被忽略?