通过USB闪存驱动器使用Mercurial

时间:2010-10-01 16:58:12

标签: mercurial cross-platform

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

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

我对Hg略显熟悉,因为我以最简单的方式使用它来仅对我自己在独立机器上的工作进行版本控制,但我不确定应该如何使用它来同步两台计算机之间的存储库使用闪存驱动器作为中介。也许,例如,我需要在闪存驱动器上创建一个临时存储库(使用“clone”)然后从中同步到(使用“push”和“pull”),并通过A→flash,flash→B执行此操作,B→闪光灯,闪光灯→A?关于动作和命令的顺序,你的答案越具体,对我来说就越有用。

最后,我如何开始这个过程?我是否需要做一些事情,所以Hg知道这些都是一个代码库的一部分?例如,我在不同计算机上的每个当前存储库都是在我开始使用Hg之前独立创建的,尽管所有代码都相似,但每个代码都进行了独立更改,并且存储库对彼此一无所知。如果我需要做的事情与我需要做的事情不同,一旦我将所有内容统一起来,那么为我编写这个过程也会有所帮助。

如果它很重要,这些机器可以运行任何Windows,Mac或Linux,并且我的Mercurial版本在每台机器上略有不同(尽管Mercurial版本可以根据需要进行统一)。

2 个答案:

答案 0 :(得分:16)

您在将闪存驱动器用作中间存储位置方面的描述应该有效。我的流程是:

初始设置

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

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

  3. 将repo从闪存驱动器克隆到计算机B

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

  4. 工作流程

    1. 在计算机A上编辑/提交回购
    2. 从计算机A推送到闪存驱动器

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

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

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

    4. 在计算机B上编辑/提交回购

    5. 从计算机B推送到闪存驱动器(与上面相同的命令)
    6. 从闪存驱动器拉到计算机A(与上面相同的命令)
    7.   

      最后,我如何得到这个过程   开始了吗?我需要做些什么吗?   Hg知道这些都是其中的一部分   代码库?

      Mercurial通过查看每个仓库中提交的SHA1哈希键来了解两个任意存储库是否具有共同的祖先。换句话说,假设两个repos在其历史记录中至少有一个公共哈希键,Mercurial将尝试合并它们。在您的特定情况下,两个repos最初都没有版本化,Mercurial需要一些帮助。最好的办法是到达两个回购相同的地方然后执行hg init。 Mercurial应该从这一点开始处理共享。

答案 1 :(得分:8)

在不同的计算机上脱机工作时。最好使用Mercurial附带的bundle命令。所以回应dls所写的内容,只是一个微小的变化过程。

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,存储库将显示相同的基本修订和提示
  9. 使用工作包的工作流程

    我使用的工作流程略有不同。我将这些存储库保存为不同的存储库。 我把它们称为repo1和repo2。

    假设repo1的当前提示是4f45839f613c。

    1. 您在repo1中进行更改并提交
    2. 创建一组更改:
    3. 命令:此捆绑包包含自指定基本版本以来的所有更改。

      hg bundle --base 4f45839f613c changes.bundle
      
      1. 通过复制捆绑包将其带到repo2。
      2. 您只需将捆绑包拉到repo2:
      3. 即可

        命令:

        hg pull changes.bundle
        

        如果捆绑包含repo2中已存在的更改,则拉动时将忽略这些更改。只要捆绑包不会变大,就可以一次又一次地使用带有相同--base修订版的bundle命令创建包括进一步更改的包。

        关于bundle:这些(非常好)压缩。

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

        hg bundle --base null backup.bundle
        

        [编辑:在此主题上添加一些链接]

        [编辑:我认为使用捆绑包的优势]

        可以离线创建捆绑包,复制或通过邮件发送。在闪存驱动器上使用push to repo,需要连接它。捆绑包更容易,因为它不能保持你推拉的两个仓库必须同时可用。

        除此之外,bundle还可以有两种类型:Changesets和Incremental。 Changeset捆绑包是完整的独立捆绑包。您还可以将捆绑包用作备份作为单个文件。