この問題は、別の Git.dotfiles
管理システムを計画しているときに発生しました。$HOME
私は自分の作業ツリーとして使用し、リポジトリを別の場所に保存したいと考えています(.git
他のリポジトリを混乱させるため、下ではありません)。
以前にコピーされ、微調整された可能性のある dotfiles を持つ古いマシンで、新しい dotfiles リポジトリのクローンを作成し、(手$HOME/.*
を振る)マスターへの変更としてドットファイルの (以前の) 既存の状態を確認できる状態にします。私の新しくクローンされたリポジトリの。これは主にバックグラウンドです。Git では、上書きせずにダーティ ディレクトリで慎重にチェックアウトしたいだけです。
(通常、新しいディレクトリから始めて変更をコピーすることもできますが、作業ツリーが my の場合は難しいようです$HOME
。)
適切な場所に移動できるように思われるコマンドのペアを 1 つ見つけましたが、このアプローチに落とし穴があるのか 、同じことを行うためのより簡単な方法があるのか はわかりません。
git read-tree -v HEAD # load HEAD into the index
git checkout-index -a # cautiously check out all files without overwriting
これらの 2 つのコマンドは、私の家をコピーして通常のチェックアウトを行い、ファイルをコピーして戻すのと同じ状態にgit diff
なるのでしょうか? このマシンで行った変更だけで、ファイルは削除されませんか?
これらに適用すべき他のオプションはありますか?
コンテキストは私の(アルファ)ブートストラップ スクリプトです。
git clone --bare -n git://github.com/$(git config github.user)/.dotfiles.git ~/.dotfiles/repo.git
git config -f .dotfiles/repo.git/config core.bare false
git config -f .dotfiles/repo.git/config core.logallrefupdates true
git config -f .dotfiles/repo.git/config core.worktree $HOME
export GIT_DIR=~/.dotfiles/repo.git ; export GIT_WORK_TREE=~
git read-tree -v HEAD
git checkout-index -a # all files without overwriting
ln -sf $HOME/.dotfiles/gitignore-dots $HOME/.dotfiles/repo.git/info/exclude