通过USB闪存驱动器使用Mercurial

tom*_*m10 15 mercurial cross-platform

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

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

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

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

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

dls*_*dls 16

您在将闪存驱动器用作中间存储位置方面所描述的内容应该可行.我的过程是:

初始设置

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

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

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

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

工作流程

  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(与上面相同的命令)

最后,我如何开始这个过程?我是否需要做一些事情,所以Hg知道这些都是一个代码库的一部分?

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


pyf*_*unc 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,存储库将显示相同的基本修订和提示

使用bundle的工作流程

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

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

  1. 您进行更改并在repo1中提交它们
  2. 创建一组更改:

命令:此捆绑包包含自指定的基本版本以来的所有更改.

hg bundle --base 4f45839f613c changes.bundle
Run Code Online (Sandbox Code Playgroud)
  1. 通过复制捆绑将其带到repo2.
  2. 您只需将捆绑包拉到repo2:

命令:

hg pull changes.bundle
Run Code Online (Sandbox Code Playgroud)

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

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

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

hg bundle --base null backup.bundle
Run Code Online (Sandbox Code Playgroud)

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

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

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

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