gitハードリンク-ファイルがハードリンクであることを知っていますか?


16

ファイルを整理するために、シンボリックリンクの代わりにハードリンクを使用し始めました...

私はそれらを分類し、どの写真を印刷したいかなどを示すために撮った写真に対してこれを行ってきました。

私はgitを使用してイメージをバックアップしていますが、リポジトリのサイズが約1 GB増加したため、gitは新しいファイルであると判断したようです。Gitを使用してファイルの名前を変更しない場合、Gitは名前の変更の検出に非常に役立ちますが、ハードリンクも処理しますか?

ウォルター


2
通常のファイルはすべてハードリンクです。おそらく「複数のハードリンクを持つファイル」を意味しているのでしょうか?
イグナシオバスケス-エイブラムス

はい、それは私が意味したものです。
ウォルター

1
私が間違っている場合は修正してくださいが、もっとトラックをgitしないのcontentですか?ファイルが同じコンテンツを持っている場合、どうしてそれが重要なのでしょうか?-結局のところ、それらは技術的には同じファイルです。
new123456

1
これに出くわした人のために-代わりにシンボリックリンクの使用を検討してください。stackoverflow.com/q/954560/492
CADブローク

タグベースのファイルシステムが必要なようです。
ナユキ

回答:


14

複数のリンクされた追跡ファイルは、各リンクがまったく同じblobオブジェクトによって表されるため、Gitのオブジェクトストアをあまり大きくしません。ただし、リンクが壊れているため、作業ツリーが成長する可能性があります。

Gitは、追跡された作業ツリーファイルが同じファイルへのハードリンクであるかどうかを追跡しません。

これらのパス名のコンテンツを変更したり、パス名のディレクトリエントリを削除したりすることを要求しない場合、Gitは複数のリンク、追跡、作業ツリーファイルのみを残します。ただし、(たとえば)古いコミットまたはブランチをチェックアウトしてから、通常の最新のブランチ/コミットに切り替えると、Gitはハードリンクを「破壊」することになります(影響を受けるパス名を新しい(しかし同一のものに置き換えます) )多重リンクされた状況を再現する代わりにファイル)。

多重リンク状態を回復するには、同一のファイルをスキャンし、それらのファイルのいずれかに再リンクするプログラムを作成できます。そのような「再リンク」操作は、すべてのリンクが作業ツリー自体にない場合、または少なくとも簡単に識別できる「外部」の場所にない場合、より複雑になる可能性があります。ホームディレクトリ全体から「ランダムな」ファイルを「バックアップ」リポジトリに格納し、Gitを使用して作業ツリーを変更します)。

このアイデアはGitメーリングリストに掲載されています。


debianベースのLinuxには、この再リンク操作を実行できるハードリンクツール(packages.debian.org/search?keywords=hardlink)があります。残念ながら、それほど高速ではありません
ダニエルアルダー

hardlinkは毎晩仕事をしてい/var/lib/jenkinsます。
アメディーヴァンガッセ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.