Использование Mercurial через USB-накопитель

Короче:
Как я могу использовать Hg для синхронизации репозиториев между двумя компьютерами с использованием флеш-диска в качестве посредника?

Более подробно:
Я часто разрабатываю код на компьютерах, которые никак не связаны с сетью, и я переношу файлы между этими машинами с помощью USB-накопителя. Теперь я хотел бы разработать некоторое программное обеспечение на этих машинах, используя Hg-репозитории на каждой машине, которые я могу часто синхронизировать, используя механизм переноса флеш-накопителя.

Я немного знаком с Hg, так как я использую его самым простым способом для управления версиями только своей собственной работы на независимых машинах, но я не уверен, что именно я должен сделать, чтобы использовать его для синхронизации репозиториев между двумя компьютерами используя флешку в качестве посредника. Может быть, например, мне нужно создать временный репозиторий на флеш-накопителе (используя "клон" ), из которого я затем синхронизируюсь (используя "push" и "pull" ), и сделайте это с помощью A → flash, flash → B, B → вспышка, вспышка → A? Чем более специфичен ваш ответ относительно последовательности действий и команд, тем полезнее для меня.

Наконец, как мне начать этот процесс? Нужно ли мне что-то делать, поэтому Hg знает, что все это часть одной базы кода? Например, каждый из моих текущих репозиториев на разных компьютерах был создан независимо от времени, прежде чем я начал использовать Hg, и хотя весь код схож, независимые изменения были сделаны для каждого, и репозитории ничего не знают друг о друге. Если то, что мне нужно сделать с этим, отличается от того, что мне нужно сделать для текущего дела, как только у меня будет все единое целое, также поможет и правописание этого процесса для меня.

В случае, если это важно, эти машины могут работать под управлением любой из Windows, Mac или Linux, а мои версии Mercurial немного отличаются на каждой машине (хотя версии Mercurial могут быть унифицированы, если необходимо).

Ответы

Ответ 1

То, что вы описали выше с точки зрения использования флеш-накопителя в качестве промежуточного хранилища, должно работать. Мой процесс:

начальная настройка

  • создать репо на компьютере A (с использованием hg init)
  • клонировать репо с компьютера A на флэш-накопитель

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

  • клонировать репо с флеш-накопителя на компьютер B

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

рабочий процесс

  • изменить/зафиксировать репо на компьютере A
  • нажмите с компьютера A на флэш-диск

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

  • извлечение из флеш-накопителя на компьютер B

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

  • изменить/зафиксировать репо на компьютере B

  • нажмите с компьютера B на флешку (те же команды, что и выше)
  • извлечение из флеш-накопителя на компьютер A (те же команды, что и выше)

Наконец, как мне получить этот процесс? начал? Нужно ли мне что-то делать Hg знает, что все это часть одного база кода?

Mercurial знает, есть ли у двух произвольных репозиториев общий предок, просматривая хэш-ключи SHA1 коммитов в каждом репо. Другими словами, если оба РЕПО имеют по крайней мере один общий хэш-ключ в своей истории, Mercurial попытается объединить их. В вашем конкретном случае, когда оба РЕПО изначально не имеют версии, Mercurial нуждается в некоторой помощи. Лучше всего было бы добраться до места, где оба РЕПО будут идентичны, а затем выполнить ваш hg init. Mercurial должен обрабатывать доступ с этого момента.

Ответ 2

При работе в автономном режиме на разных машинах. Лучше использовать команду bundle, которая поставляется с Mercurial. Таким образом, повторение того, что dls написал, но небольшой процесс изменения.

Начальная настройка, упомянутая dls. или

  • Перейдите в верхний каталог вашего хранилища Mercurial
  • Создать пакет: hg bundle --base null ../project.hg
  • Скопируйте файл project.hg на другой компьютер.
  • Создайте каталог там
  • Сделайте это хранилищем Mercurial: hg init
  • Включите пакет: hg pull <path/project.hg>
  • hg update
  • Проверьте hg log, и в репозитории будут отображаться те же базовые версии и подсказки

Рабочий процесс с использованием пакета

Я использую несколько другой рабочий процесс. Я храню эти репозитории как разные репозитории. Я упоминаю их как repo1 и repo2.

Предположим, что текущий наконечник repo1 равен 4f45839f613c.

  • Вы вносите изменения и фиксируете их в repo1
  • Создайте пакет изменений:

Команда: этот пакет содержит все изменения с указанной базовой версии.

hg bundle --base 4f45839f613c changes.bundle
  1. Возьмите его на repo2, скопировав комплект.
  2. Вы можете просто перетащить пакет в repo2:

Команда:

hg pull changes.bundle

Если пакет содержит изменения, которые уже присутствуют в repo2, то при вытягивании они будут игнорироваться. Пока пакет не растет до большого, это позволяет снова и снова использовать команду bundle с той же версией -base, чтобы создавать пакеты, включая дальнейшие изменения.

О пучках: они (очень хорошо) сжаты.

создает (сжатую) резервную копию репозитория

hg bundle --base null backup.bundle

[Изменить: добавление некоторых ссылок в эту тему]

[Изменить: что я думаю, это преимущество использования пакета]

Связки могут быть созданы в автономном режиме, скопированы или отправлены по почте. Использование push to repo на флэш-диске требует его подключения. Связки проще, так как не утверждают, что два репо, из которых вы нажимаете и тянете, должны быть доступны одновременно.

Кроме того, пучки также могут быть двух типов: "Изменения и инкрементальные". Пакеты наборов изменений - это полные автономные пакеты. Вы также можете использовать пакеты для резервного копирования в виде одного файла.