是否可以使用bazaar,mercurial或git进行部分克隆/分支?

Blo*_*ard 19 git version-control mercurial bazaar

假设我在源代码管理中有一个带有很多子目录的项目,其中很多是我目前不需要的.

我想创建一个只包含整个树的一些工作副本,它仍然保持更改,提交和推送它们的能力.

这是可能的,如果是这样,我该怎么办?

我还在决定是否选择集市或mercurial,所以关于其中任何一个的答案都会有所帮助.

编辑:实际上,git的解决方案也很有用.

drr*_*lvn 14

据我所知,克隆树的子集是不可能的,但还有其他可能性.

Git:该命令git clone有一个--depth标志:

--depth <depth>

创建一个浅层克隆,其历史记录被截断为指定的修订数.浅存储库有许多限制(您不能克隆或获取它,也不能从中推送或插入它),但如果您只对历史悠久的大型项目的近期历史感兴趣并且希望将修补程序作为补丁发送.

集市:标志--lightweightcheckout命令只下载一个工作目录,而不是全部历史和节省带宽和磁盘空间.仍支持所有操作,但需要网络连接才能执行这些操作.

我不知道Merurial是否具有此功能.


Ste*_*osh 10

如果你已经有了一个存储库并且你想要这样做,那将是一个痛苦.

如果您要使用全新的存储库执行此操作,您可能需要查看Mercurial的新子.

基本上,您为某些目录创建独立存储库:

myproject/
    .hg/
    source code/
        ... files here ...
    documentation/ (subrepo)
        .hg/
        ... files here ...
    graphics/ (subrepo)
        .hg/
        ... files here ...
Run Code Online (Sandbox Code Playgroud)

这将项目的不同部分隔离在不同的存储库中."包含"repo(本例中为myproject)跟踪每次提交时子实例的修订版本.我提到的subrepo wiki页面解释得很好.


dpq*_*dpq 6

这个维基页面来看,这个功能尚未在Mercurial中实现,但是有一个扩展可以通过"转换"存储库或其部分,而不是实际的分支来实现您想要的大致.由于它可以从Hg转换为Hg,因此它可以作为部分克隆.这是你需要的吗?

  • 这是一个有用的答案,但请注意重要的警告:`hg convert`允许您只获取存储库的一部分的克隆,但更改集将不具有与原始更改集相同的SHA-1 ID.您不能回到原始存储库(至少不安全),尽管您可以尝试手动管理移植您所做的更改(例如使用`hg transplant`).对于长期克隆而言,这并不理想. (2认同)