私はドットファイルをbitbucketのプライベートgitリポジトリに保持しています。これは私のファイルの大部分(.vimrc、.tmux.confなど)でうまく機能します。次に、ホームディレクトリからクローン化されたドットファイルのgitrepoへのシンボリックリンクを設定するだけですべてが機能します。すごい。
私の問題は、preztoフレームワークを使用してzshプラグインを管理していることです。 Preztoは、すべての.zprezto *構成ファイルを独自のディレクトリに保存し、ホームからそれらにシンボリックリンクするという点で同様のことを行います。それらのファイルの1つは、独自のディレクトリに保存する.zshrcです。
次のようになります。
.zlogin -> /home/jordan/.zprezto/runcoms/zlogin
.zlogout -> /home/jordan/.zprezto/runcoms/zlogout
.zpreztorc -> /home/jordan/.zprezto/runcoms/zpreztorc
.zprofile -> /home/jordan/.zprezto/runcoms/zprofile
.zshenv -> /home/jordan/.zprezto/runcoms/zshenv
.zshrc -> /home/jordan/.zprezto/runcoms/zshrc
Preztoを壊さずに、自分のgitdotfilesディレクトリにある.zshrcファイルを追跡するにはどうすればよいですか。
この場合、ファイルシステムの境界を越えていないことを前提として、ハードリンクを使用できます。ご存じない方のために説明すると、ハードリンクはシンボリックリンクによく似ていますが、プロセスの観点からは、ファイルは通常のファイルです。これにはgitが含まれ、これらは適切に機能し、シンボリックリンクではなくコンテンツを含む通常のファイルとしてアーカイブされます。
ただし、gitはそのようなリンクを追跡しないため、ファイルが何らかの理由でリポジトリによって削除および再作成されると、ハードリンクが切断されるため、gitを使用する際に注意が必要です。 ==
明確にするために、Pretzoのプライマリストアインスタンスから、gitでバックアップされたドットファイルを保持するディレクトリ内のバージョンへのハードリンクを作成することを意味します。 Pretzoはそれを通常のファイルと見なし、gitも同様に認識し、ハードリンクされたファイルはシンボリックリンクできるため、その方法での展開は問題ありません。
シンボリックリンクのように、技術的にはストレージ上の同じデータ(複数のファイルノードが関連付けられている)であるため、一方のバージョンに変更するともう一方のバージョンが変更されることを意味します。ハードリンクは通常明示的に示されていないため、多くのツールを使用するシンボリックリンクよりも気づきにくいことに注意してください(これがさまざまなGUIファイルブラウザにどのように適用されるかはわかりません。通常は通常のファイルになると思います)。ただし、ls -l
(2番目の列)、stat
などで示されるリンクの数に基づいてそれらを見つけることができます。ハードリンクされていない通常のファイルのリンク数は1です(ディレクトリはnot通常のファイルなので、リンク数は異なります)。 残念ながら、シンボリックリンクとは異なり、他のノードを見つける簡単な方法はありません、それらが存在することを示すリンク数だけです。したがって、この意地悪なことを始めないでください。このコンテキストのように体系的に実行して、他のノードがどこにあるのかを理解してください。
これは、複数のシステムにこの方法でデプロイしている場合(この点で投稿があいまいな場合)、Preztoがこれらのファイルに変更を加える傾向がある場合に問題が発生する可能性があることを意味します自分の合意。これにより、ファイルの更新がpull
を介して保留になりますが、これらはPretzoによって行われたローカルの変更と競合し、その時点でのマージはおそらく悪いため、何をするかを決定する必要があります(注意してください)ハードリンクを削除できますが、他のすべてのコピーは削除されません)。
ただし、これらがすべてPretzoが読み取るだけで、ねじ込まないことがわかっているすべての構成ファイルである場合(これは、システム間でgitがそれらを追跡するという考えに暗黙のうちに含まれています)、問題ありません。また、このリポジトリを特定のシステムのバックアップとして使用している場合は問題ありません。前述のシナリオは発生しません。
他の唯一の問題は、ファイルシステムの境界を越えてハードリンクを使用できないことです。つまり、マスターgitでバックアップされたストアがPretzo自身のストアとは別のマウントされたファイルシステム上にある場合、この方法では運が悪いことになります。