代码之家  ›  专栏  ›  技术社区  ›  tom10

通过USB闪存驱动器使用Mercurial

  •  15
  • tom10  · 技术社区  · 14 年前


    如何使用Hg在使用闪存驱动器作为中介的两台计算机之间同步存储库?

    更多细节:
    我经常在没有任何联网的计算机上开发代码,并且使用USB闪存驱动器在这些计算机之间传输文件。现在我想在这些机器上开发一些软件,在每台机器上使用Hg存储库,我可以使用flash驱动器传输机制经常同步这些存储库。

    我对Hg略知一二,因为我使用它的方式最简单,只对我自己在独立机器上的工作进行版本控制,但我不确定究竟应该如何使用它在使用闪存驱动器作为中介的两台计算机之间同步存储库。例如,我可能需要在闪存驱动器上创建一个临时存储库(使用克隆),然后从中同步到(使用推拉),并通过Aflash、flashB、Bflash、flashA来完成?你关于行动和命令的顺序的回答越具体,对我就越有用。

    如果有必要的话,这些机器可以运行Windows、Mac或Linux中的任何一种,而我的Mercurial版本在每台机器上都略有不同(不过如果需要的话,Mercurial版本可以是统一的)。

    2 回复  |  直到 14 年前
        1
  •  16
  •   dls    14 年前

    上面所描述的将闪存驱动器用作中间存储位置的方法应该是可行的。我的过程是:

    初始设置

    1. 在计算机A上创建回购(使用hg init)
    2. 将repo从计算机克隆到闪存驱动器

      hg clone C:/path/to/repo/A X:/path/to/flash/drive/repo

    3. hg clone X:/path/to/flash/drive/repo C:/path/to/repo/B

    工作过程

    1. 从计算机推送到闪存驱动器

      hg push X:/path/to/flash/drive/repo

    2. 从闪存驱动器拉到计算机B

      hg pull X:/path/to/flash/drive/repo

    3. 从计算机B推送到闪存驱动器(命令同上)

    起动?我需要这样做吗 Hg知道这些都是其中的一部分

    通过查看每个repo中提交的SHA1散列键,Mercurial知道两个任意存储库是否有一个共同的祖先。换句话说,假设两个回购协议在其历史记录中至少有一个公共哈希键,Mercurial将尝试合并它们。在您的特定情况下,如果两个回购协议最初都没有版本控制,Mercurial将需要一些帮助。最好的办法是去一个地方,在那里两个回购是相同的,然后执行你的计划 hg init . Mercurial应该从现在开始处理共享。

        2
  •  8
  •   Vadim Kotov First Zero    7 年前

    在不同的机器上脱机工作时。最好使用Mercurial附带的bundle命令。因此,与dls所写的内容相呼应,只是一个微小的变化过程。

    1. 转到您的Mercurial存储库顶级目录
    2. hg bundle --base null ../project.hg
    3. project.hg 文件到其他计算机
    4. 在那里创建一个目录
    5. 使其成为Mercurial存储库: hg init
    6. hg pull <path/project.hg>
    7. hg update
    8. 检查 hg log ,两个存储库将显示相同的基本修订和提示

    使用bundle的工作流

    1. 进行更改并在repo1中提交
    2. 创建一个更改包:

    hg bundle --base 4f45839f613c changes.bundle
    
    1. 通过复制包将其带到repo2。

    命令:

    hg pull changes.bundle
    

    关于包:这些包(非常好)被压缩了。

    创建存储库的(压缩)备份

    hg bundle --base null backup.bundle
    

    [编辑:我认为使用bundle的优势]

    捆绑包可以脱机创建、复制或通过邮件发送。在闪存驱动器上使用push-to-repo,需要连接它。捆绑更容易,因为它不主张你推拉的两个回购必须同时可用。

    除此之外,bundle还可以有两种类型:变更集和增量。变更集捆绑包是完整的独立捆绑包。您还可以使用捆绑包作为单个文件进行备份。