他のブランチまたは以前のコミットにチェックアウトしたいのですが、1つのフォルダーを同じファイルに保持したい(フォルダーをチェックアウトしない)。
フォルダがgit status
に表示されるようにしたいので、このフォルダをインデックスに追加できます。
たとえば、node_modules
のフォルダがあります。フォルダーをすべてのコミットに含める必要があります(ほとんどの人がnode_modules
フォルダーを.gitignoreすることを好むことを知っています)。しかし、他のコミットに移動したり、他のブランチをチェックアウトしたりするときは、git
がnode_modules
フォルダーに触れないようにします。
出来ますか?
スパースチェックアウト を使用して、node_modules
ディレクトリのコミットされたコンテンツを作業ツリーから除外できます。ドキュメントにあるように:
「スパースチェックアウト」を使用すると、作業ディレクトリにスパースにデータを入力できます。
skip-worktree
ビットを使用して、作業ディレクトリ内のファイルを確認する価値があるかどうかをGitに通知します。
使い方は次のとおりです。まず、sparseCheckout
オプションを有効にします。
git config core.sparseCheckout true
次に、node_modules
パスを否定として.git/info/sparse-checkout
ファイルに追加します。
echo -e "/*\n!node_modules" >> .git/info/sparse-checkout
これにより、以下を含むsparse-checkout
というファイルが作成されます。
/*
!node_modules
これは事実上、無視node_modules
コミットのツリーを作業ディレクトリに読み込むときのディレクトリを意味します。
後でnode_modules
ディレクトリを再度含める(つまり、ファイルから skip-worktree
ビット を削除する)場合は、sparse-checkout
ファイルを変更して/*
のみを含める必要があります(つまり、「すべてのパスを含める」)。 git read-tree
を使用した作業ディレクトリ:
echo "/*" > .git/info/sparse-checkout
git read-tree -mu HEAD
次に、構成変数をfalse
に設定することにより、スパースチェックアウトを完全に無効にすることができます。
git config core.sparseCheckout false
スパースチェックアウト は Git 1.7. で最初に導入されたことに注意してください。