0

共有モードで git ベアを作成し、git ベアを複製してデータ リポジトリを作成しました。

git ベア リポジトリと git データ リポジトリの両方が同じファイル システム上にあるため、スペースを節約するためにオブジェクト ファイルがハードリンクされているようです。

今すぐ git ベア リポジトリをバックアップし、データ リポジトリを削除したかったのです。

オブジェクト ファイルがハードリンクされているため、データ リポジトリを削除するとベア リポジトリが古い状態のままになるのではないかと心配しています。

データ リポジトリを削除してリポジトリをバックアップできるように、ベア リポジトリにハードリンクされているすべてのオブジェクト ファイルをデータ リポジトリからコピーする方法はありますか?

あなたの助けに感謝します。

4

1 に答える 1

3

恐れるな。コピーの 1 つを削除するだけで、もう 1 つを失うことはありません。「オリジナル」と「コピー」は一つではありません。代わりに、どちらも「元の」ファイルであり、反対側がなくても存在し続けます。ファイルのコンテンツのみがディスク上で共有されるため、一度だけ保存されます。

これは Git の機能ではありません。これは、ハードリンクが常に機能する方法とまったく同じです (リンク ファイルとリンク先のファイルを明確に区別するソフトリンク/シンボリックリンクとは対照的です)。これは、ハードリンクが 1 台のマシン内でファイル システムの境界を越えて機能しない理由でもあります。また、UN*X のようなシステムでファイルを削除する関数 (いくつかのプログラミング言語で) が、しばしば「削除」ではなく「リンク解除」と呼ばれる理由でもあります。

もちろん、ファイルの内容がディスクに保存されるのは一度だけなので、一方を編集すると両方のコピーが変更されます。しかし、それは問題ありません。Gitは、オブジェクト データベース内のファイルを _changes_決して追加しません (ガベージ コレクションでそれらを削除 (= リンク解除) する場合もあります)。Git のオブジェクト ファイルは不変であるため、それらが他の不変ファイルにハードリンクされているという事実は (ディスク スペースを節約することを除けば) まったく問題ではありません。

于 2011-01-08T00:34:33.623 に答える