に Mercurial リポジトリがありますc:\Dropbox\code
。以下を使用して、このレポのクローンをローカルに作成しました。
hg clone -U c:\Dropbox\code c:\GoogleDrive\codeBackup
このベア リポジトリは、バックアップのみを目的としています。私は定期的に変更を codeBackup にプッシュしています。さらに、両方のディレクトリがクラウド (それぞれ Dropbox と Google ドライブ) にバックアップされます。
code
クローン操作で元のリポジトリへのハードリンクが使用されたため、リポジトリが破損した場合、リポジトリはcodeBackup
自動的に破損しますか? したがって、私のダブル クラウド バックアップ戦略は役に立たないのでしょうか?
PS : フォールバック オプションは、クラウド サービスを使用して以前の既知の良好な状態を復元することであることを理解しています。
更新:掘り下げた後、参考のためにこれらを追加します
問題は、'hg clone' が (--pull オプションなしで) 実行された場合、ファイルシステムがハードリンク機能を提供している場合 (NTFS が提供する)、ハードリンク1を使用して、宛先とソースのリポジトリが .hg/store 内のファイルを共有することです。 .
Mercurial は、クローンの 1 つに対してコミットまたはプッシュが行われると、.hg 内のそのようなハードリンクを解除するように設計されています。このための前提条件は、mercurial が「このファイルにはいくつのハードリンクがありますか?」と尋ねる場合、mercurial が使用している Windows API が正しい答えを返すことです。
hg プロセスが 1 つの Windows コンピューターで実行されていて、リポジトリ ファイルが別の Windows コンピューターのネットワーク共有にある場合、この回答はほとんど常に間違っていることがわかりました (実際には 1 より大きい場合でも、常に 1 と報告されます)。
ハードリンクを回避するには (--pull を使用):
hg clone -U --pull c:\Dropbox\code c:\GoogleDrive\codeBackup
ハードリンクを確認するには:
fsutil hardlink list <file>
: のすべてのハードリンクを表示します<file>
find . -links +1
: ハードリンクが 1 を超えるすべてのファイルを表示しますls -l
: 各ファイルの横にハードリンク数を表示