У меня есть ртутный репозиторий c:\Dropbox\code
. Я создал клон этого репо локально, используя:
hg clone -U c:\Dropbox\code c:\GoogleDrive\codeBackup
Это голое репо служит только для резервного копирования. Я регулярно выкладываю изменения в codeBackup. Кроме того, резервные копии обоих каталогов хранятся в облаке (Dropbox и Google Drive соответственно).
Если мое репо в code
станет поврежденным, будет ли автоматически повреждено codeBackup
репо, поскольку операция клонирования использовала жесткие ссылки на исходное репо? Таким образом, моя стратегия двойного резервного копирования в облако была бы бесполезной?
P.S. : Я понимаю, что резервным вариантом является использование облачной службы для восстановления предыдущего заведомо исправного состояния.
ОБНОВЛЕНИЕ: покопавшись, я добавлю их для справки.
Проблема в том, что если был выполнен 'hg clone' (без параметра --pull), то место назначения и исходное репо совместно используют файлы внутри .hg / store с помощью жестких ссылок 1, если файловая система поддерживает функцию жестких ссылок (NTFS делает).
Mercurial спроектирован так, чтобы разрывать такие жесткие ссылки внутри .hg, если выполняется фиксация или отправка одного из клонов. Предварительным условием для этого является то, что Windows API, который использует mercurial, должен давать правильный ответ, если mercurial спрашивает «сколько жестких ссылок в этом файле?».
Мы обнаружили, что этот ответ почти всегда неверен (всегда указывается 1, даже если на самом деле он> 1), если процесс hg запущен на одном компьютере с Windows, а файлы репозитория находятся в общей сетевой папке на другом компьютере с Windows.
Чтобы избежать жестких ссылок (используйте --pull):
hg clone -U --pull c:\Dropbox\code c:\GoogleDrive\codeBackup
Чтобы проверить жесткие ссылки:
fsutil hardlink list <file>
: показывает все жесткие ссылки для<file>
find . -links +1
: показывает все файлы с жесткими ссылками> 1ls -l
: показывает количество жестких ссылок рядом с каждым файлом