Gitがリポジトリの外部を指すシンボリックリンクを認識しないことを考えると、ハードリンクの使用に問題はありますか?
Gitはそれらを壊すことができますか?詳細な情報を教えてもらえますか?
Gitがリポジトリの外部を指すシンボリックリンクを認識しないことを考えると、ハードリンクの使用に問題はありますか?
Gitはそれらを壊すことができますか?詳細な情報を教えてもらえますか?
回答:
Gitのディレクトリを表す「ツリー」オブジェクトは、ファイル名とアクセス権(のサブセット)を格納します。iノード番号(または他の種類のファイルID)は保存されません。したがって、ハードリンク をgitで表現することはできません。少なくとも、メタストアやgit-cache-metaなどのサードパーティのツールがなければ、これらのツールを使用することはできません(これらのツールでも可能かどうかはわかりません)。
Gitは更新する必要のないファイルには触れないようにしますが、gitはハードリンクを保持しようとしないため、gitによって破損する可能性があることを考慮する必要があります。
リポジトリの外部を指しているシンボリックリンクについて:gitには問題がなく、シンボリックリンクの内容を保持する必要があります...しかし、これらのシンボリックリンクが壊れるかどうかは、gitリポジトリの外部のファイルシステムレイアウトに依存するため、このようなリンクのユーティリティには疑問があります。 、およびgitの制御下にありません。
フックを使用すると、git pull
スクリプトのイベントハンドラーを.git/hooks/post-merge
ファイルに書き込むイベント(プルする何かがある場合)をキャプチャできることがわかりました。
まず、あなたはchmod +x
それをしなければなりません。
次に、 ln
コマンドをプルするたびにハードリンクを再作成します。きちんとね!
それは機能し、私は自分のプロジェクトにそれを必要としていただけで、 ls -i
ファイルは自動的にリンクされた後であったことを示していますpull
。
私の例 .git/hooks/post-merge
:
#!/bin/sh
ln -f $GIT_DIR/../apresentacao/apresentacao.pdf $GIT_DIR/../capa/apresentacao.pdf
ln -f $GIT_DIR/../avaliacoesMono/avaliacao_monografias_2011_Nilo.pdf $GIT_DIR/../capa/avaliacoes.pdf
ln -f $GIT_DIR/../posters/poster_Nilo_sci.pdf $GIT_DIR/../capa/poster.pdf
ln -f $GIT_DIR/../monografia/monografia_Nilo.pdf $GIT_DIR/../capa/monografia_Nilo.pdf
重要:ご覧のとおり、リポジトリ内のファイルへのパスはで始まり$GIT_DIR
、ファイルへの部分的な相対パスを追加する必要があります。
また-f
、宛先ファイルを再作成しているため、重要です。
このmsysgitの問題から
ジャンクションポイントはシンボリックリンクではありません。したがって、msysGitではシンボリックリンクはサポートされません。
また、ハードリンクはGitによって追跡されませんでした。
問題はWindows指向であり(msysgitに関するものであるため)、symlinkのサポートの可能性について議論しました。
しかし、ハードリンクに関するコメントは、Git全般に関係しています。
Googleは「ハードリンクを保持するgit」であり、gitがハードリンク構造を保持する方法を知らないことを示しています。
私のWebプロジェクトは次のようにハードリンクを使用します。
www/products/index.php
www/products/dell_latitude_id577/index.php #(hard linked to above)
www/products/dell_inspiron_id323/index.php #(hard linked again to above)
me@server:www/products$ ls -l index.php
-rwxr-xr-x 3 me me 1958 Aug 22 22:10 index.php*
index.phpに変更を加えたい場合は、1か所で変更し、ハードリンク(製品詳細ページ)が変更をポイントします。ただし、gitが他のコンピューターのクローン作成やプル中にこの関係を維持しない点が異なります。
me@server:www$ git pull
別のマシンでは、ハードリンクごとに新しいindex.phpが作成されます。
hardlink --ignore-time
して/var/lib/jenkins
、ディスク領域を解放します。日中はいくつかのファイルが後に再びunhardlinkedますgit pull
かmvn compile
それは大丈夫、私はそれが起こることを期待しています。gitがハードリンクを保持する場合、ディスクスペースのリサイクル戦略は機能しません。