Резервное копирование локального хранилища Mercurial

Я большой поклонник поддержки. Я храню свои важные школьные эссе и т.д. В папке моего Dropbox. Я уверен, что все мои фотографии дублируются на внешний диск. У меня есть домашний сервер, где я храню важные файлы, зеркалированные на двух дисках внутри сервера (например, программный RAID 1).

Итак, для моего кода я всегда использовал Subversion для его резервного копирования. Я сохраняю папку trunk со стабильной копией моего приложения, но потом создаю ветку с именем пользователя, а внутри есть моя рабочая копия. Я делаю очень мало изменений между фиксациями этой ветки с пониманием того, что в этом коде есть моя резервная копия.

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

Между нажатием стабильного, протестированного, без ошибок кода, где находится резервная копия?

Сделав некоторое размышление, я пришел к выводу, что он не предназначен для целей резервного копирования и предполагает, что вы сами это сделали. Думаю, мне нужно сохранить свои локальные хранилища Mercurial в моем Dropbox или в другом резервном месте, так как мой код выполнения не переводится на сервер.

Это в значительной степени это, или я что-то пропустил? Если вы используете Mercurial, как вы создаете резервную копию своих локальных репозиториев? Если вы включили компьютер сегодня утром, и ваш жесткий диск поднялся в пламени (или, скорее всего, голова прочитала плохо, или ОС испортилась сама,...), что будет потеряно? Если вы потратили последнюю неделю на разработку модуля, написание тестовых примеров для него, документирование и комментирование, а затем вирус вытирает ваш локальный репозиторий, разве это не единственная копия?

Итак, с другой стороны, вы создаете удаленный репозиторий для каждого локального репозитория и нажимаете на него все время?

Как вы находите баланс? Как вы обеспечиваете резервное копирование кода? Где находится линия между использованием Mercurial в качестве резервной копии и использование утилиты резервного копирования локальной файловой системы для обеспечения безопасности локальных хранилищ?

Ответ 1

Это нормально, думая о Subversion как о "резервной копии", но это действительно делает это только благодаря отдельной машине, которая не является подлинной для Subversion. Если ваш сервер Subversion был тем же машином, что и ваша машина разработки - не редкость в мире Linux - вы на самом деле не подкреплены в плане защиты от сбоя оборудования, кражи, пожара и т.д. И на самом деле есть некоторые данных в этом случае, которые не были скопированы вообще - ваш текущий код может существовать в двух местах, но все остальное в репозитории (например, история изменений) существует только в одном месте на удаленном сервере.

Это точно так же для Mercurial, за исключением того, что вы убрали необходимость в отдельном сервере и, таким образом, сделали это так, что вам нужно явно подумать о резервном копировании, а не о побочном эффекте необходимости иметь сервер где-то. Вы можете определенно настроить другое хранилище Mercurial где-нибудь и периодически нажимать на него свои изменения и считайте, что ваша резервная копия. Кроме того, просто создайте резервную копию своего локального репозитория так же, как и резервное копирование любого другого важного каталога. Имея полную копию репозитория локально, включая всю историю изменений и другие метаданные, это, возможно, еще более удобно и безопасно, чем то, как вы сейчас это делаете с Subversion.

Ответ 2

В "скрытом" каталоге .hg хранятся все локальные коммиты. Вы можете создать резервную копию этого каталога с помощью стандартной программы резервного копирования.

Ответ 3

Изменения попадают в удаленный каталог только при нажатии. Commits остаются локальными, но вы получаете их, если вы клонируете свой репозиторий. Тогда, да, если вы хотите, чтобы ваши вещи попали в репозиторий сервера, вы должны нажимать на него "все время".

С другой стороны, ничто не мешает вам иметь несколько машин и выталкивать контент из одного в другой. Каждый ртутный репозиторий может превратиться в сервер за считанные секунды, набрав "hg serve".

Я не уверен, что он действительно отвечает на ваш вопрос, но я тоже большой поклонник резервного копирования и управляю этим способом со многими клонами моего репозитория (я также использую массивный mq для работы в режиме патча, но эта другая история).

PS: как побочный элемент, я планирую использовать mercurial как инструмент для резервного копирования файловой системы. Единственное, что меня беспокоит, это то, что для этой цели я бы предпочел отключить функцию diff и рассматривать все файлы как двоичные, но это должно быть легко.