Использование 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
- Возьмите его на repo2, скопировав комплект.
- Вы можете просто перетащить пакет в repo2:
Команда:
hg pull changes.bundle
Если пакет содержит изменения, которые уже присутствуют в repo2, то при вытягивании они будут игнорироваться. Пока пакет не растет до большого, это позволяет снова и снова использовать команду bundle с той же версией -base, чтобы создавать пакеты, включая дальнейшие изменения.
О пучках: они (очень хорошо) сжаты.
создает (сжатую) резервную копию репозитория
hg bundle --base null backup.bundle
[Изменить: добавление некоторых ссылок в эту тему]
[Изменить: что я думаю, это преимущество использования пакета]
Связки могут быть созданы в автономном режиме, скопированы или отправлены по почте. Использование push to repo на флэш-диске требует его подключения. Связки проще, так как не утверждают, что два репо, из которых вы нажимаете и тянете, должны быть доступны одновременно.
Кроме того, пучки также могут быть двух типов: "Изменения и инкрементальные". Пакеты наборов изменений - это полные автономные пакеты. Вы также можете использовать пакеты для резервного копирования в виде одного файла.