Использование Mercurial через флешку - PullRequest
15 голосов
/ 01 октября 2010

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

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

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

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

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

Ответы [ 2 ]

16 голосов
/ 01 октября 2010

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

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

  1. создать репо на компьютере A (используя hg init)
  2. клонировать репозиторий с компьютера A на флэш-диск

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

  3. клонировать репозиторий с флэш-накопителя на компьютер B

    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 коммитов в каждом репо. Другими словами, предполагая, что оба репо имеют хотя бы один общий ключ хеша в своей истории, Mercurial попытается объединить их. В вашем конкретном случае, когда оба репозитория изначально не имеют версий, Mercurial потребуется некоторая помощь. Лучше всего попасть в место, где оба репо идентичны, и затем выполнить свой hg init. Mercurial должен обрабатывать совместное использование с этого момента.

8 голосов
/ 01 октября 2010

При работе в автономном режиме на разных машинах.Лучше использовать команду bundle, которая поставляется с Mercurial.Итак, повторяя то, что написал 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, оба хранилища будут отображать одинаковые базовые ревизии и подсказку

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

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

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

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

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

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

Команда:

hg pull changes.bundle

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

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

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

hg bundle --base null backup.bundle

[Редактировать: Добавление некоторых ссылок по этой теме]

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...