Резервное копирование подвижного репозитория при сохранении меток времени

Вы ищете программный пакет, который будет выполнять работу или фактически выполнять матричные операции и тому подобное и выполнять каждый шаг?

Первый, мой коллега, только что использовавший Ocaml GLPK . Это просто оболочка для GLPK , но она устраняет многие этапы настройки. Похоже, что вам придется придерживаться GLPK, в C, хотя. Что касается последнего, то, благодаря восхитительному сохранению старой статьи, я некоторое время назад изучал LP, PDF . Если вам нужна конкретная помощь в настройке, дайте нам знать, и я уверен, что я или кто-то еще вернусь и помогу, но, думаю, отсюда довольно просто. Удачи!

6
задан Jim Hunziker 24 November 2009 в 19:31
поделиться

3 ответа

I suggest using hg pull instead of hg clone. So you'll keep a mirror of the repository on your server and update it periodically with hg pull. You then let your backup program take a backup of that. When you use hg pull you will transfer the newest history and only changed files under .hg/store/data which were actually effected by the pull.

Here I tested this by making a small repo with two files: a.txt and b.txt. I then cloned the repository "to the server" using hg clone --noupdate. That ensures that we have no working copy on the server -- it only needs the history found in .hg.

The timestamps looked like this after the clone:

% ll --time-style=full .hg/store/data
total 8.0K
-rw-r--r-- 1 mg mg 76 2009-11-25 20:07:52.000000000 +0100 a.txt.i
-rw-r--r-- 1 mg mg 69 2009-11-25 20:07:52.000000000 +0100 b.txt.i

As you noted, they are all identical since the files were all just created by the clone operation. I then changed the original repository (the one on the client) and made a commit. After pulling the changeset I got these timestamps:

% ll --time-style=full .hg/store/data
total 8.0K
-rw-r--r-- 1 mg mg 159 2009-11-25 20:08:47.000000000 +0100 a.txt.i
-rw-r--r-- 1 mg mg  69 2009-11-25 20:07:52.000000000 +0100 b.txt.i

Notice how the timestamp for a.txt.i has been updated (I only touched a.txt in my commit) while the timestamp for b.txt.i has been left alone.

If your backup software is smart, it will even notice that Mercurial has only appended data to a.txt.i. This means that the new a.txt.i file is identical to the old a.txt.i file up to certain point -- the backup program should therefore only copy the final part of the file. Rsync is an example of a backup program that will notice this.

5
ответ дан 8 December 2019 в 17:23
поделиться

План A: Когда исходный и целевой каталоги находятся в той же файловой системе , hg clone -U просто жестко связывает все свои файлы в репозитории без изменения временных меток. Этот подход довольно быстрый и всегда безопасный (файлы не связываются с ленивой при записи).

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

] План Б: Обычно безопасно использовать rsync или какой-либо другой инструмент для синхронизации на основе файлов. Mercurial не хранит ничего волшебного на диске, только простые файлы.

Существует состояние гонки, когда вы делаете фиксацию в этом репозитории одновременно с запущенным rsync, но я думаю, что это незначительно, потому что " hg rollback " должен иметь возможность устранить такие несоответствия, если вы восстанавливаете из поврежденной резервной копии. Обратите внимание, что откат не может восстановить, если у вас было несколько отдельных транзакций (например, несколько команд «push» или «commit») в окне rsync, или запускать деструктивные операции, изменяющие историю (например, rebase, hg strip и некоторые команды MQ).

6
ответ дан 8 December 2019 в 17:23
поделиться

Вот расширение hg, которое может помочь: TimestampExtension .

3
ответ дан 8 December 2019 в 17:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: