以下の例は、問題自体ではなく問題の核心を示すために単純化されています(私のファイルツリーはこれよりも複雑です)。
バックアップするファイルが2つあるとします。 1つはにあり、~/somedir/otherdir
もう1つは~/otherdir/somedir/
。 Gitリポジトリの両方のディレクトリからファイルをバックアップしたいと思います。どうすればいいですか?ソフトリンクは実際のファイルではなく、ファイルが保存されている場所に関する情報のみを渡しますが、ハードリンクは私に少し見慣れません。ハードリンクを使用する必要がありますか?
説明:この機能を使用するgit
理由は4つあります。ポイントファイル/スクリプト/設定のテキストファイルを保存し、時間の経過とともに変更を追跡したいと思います。 Gitを知っていてそれを保存するために使用できる専用のGitリポジトリがあります。複数のコンピュータでこれらのファイルを共有できるようにしたいです。
ベストアンサー1
ファイルを移動しても大丈夫なら...
ファイルをgitリポジトリに移動し、前の場所にシンボリックリンクするだけです。
~/gitrepo/somedir/otherdir/file1
次から移動~/somedir/otherdir/file1
~/gitrepo/otherdir/somedir/file2
次から移動~/otherdir/somedir/file2
~/somedir/otherdir/file1
からのシンボリックリンク~/gitrepo/somedir/otherdir/file1
~/otherdir/somedir/file2
からのシンボリックリンク~/gitrepo/otherdir/somedir/file2
その後、gitリポジトリのファイルを安全にコミットし、gitを使用して操作でき、古いファイルパスを使用しているすべてのエントリは現在のgitワークスペースにあるものを見ることができます。ファイルを別の方向にリンクしたり、ハードリンクを使用することは危険です。これは、ファイルを書き換えるすべてのgit操作(ブランチの変更、以前のバージョンに戻すなど)が原因でリンクが壊れるためです。 (これがハードリンクが実際に実行可能なソリューションではない理由を説明してください。)
この場合、ファイルを完全に書き直してリンクを壊す多くのテキストエディタとツールに注意してくださいsed -i
。より安全なアプローチは、フォルダ全体をgitリポジトリに移動し、ディレクトリをシンボリックリンクすることです。
ファイルを所定の位置に保持するには...
別の可能性は、ホームディレクトリにgitリポジトリを作成し、gitにすべてを無視するように指示し、追跡したいファイルを強制的に追加することです。
cd
git init
echo '*' > .gitignore
git add -f .gitignore
git commit -m "Initialise repository and ignore everything"
git add -f somedir/otherdir/file1
git commit -m "Add file1"
git add -f otherdir/somedir/file2
git commit -m "Add file2"
これにより、明示的に追加されたファイルの変更を簡単に追跡できますが、gitは新しいファイルを考慮しません。この設定に合格します。しなければならないホームディレクトリのサブディレクトリに別のgitリポジトリを置くのも安全ですが、詳細を確認していません...