次の状況:
GIT には、削除する必要があるローカル構成ファイルがあります。
を実行してgit rm
に追加すると、.gitignore
各開発者のコンピューターでファイルが削除されます。
しかし、私たちはそれを避けたいと思っています - ファイルはもはや git リポジトリであってはなりませんが、プル/マージで削除されるべきではありません。
これは可能ですか?
次の状況:
GIT には、削除する必要があるローカル構成ファイルがあります。
を実行してgit rm
に追加すると、.gitignore
各開発者のコンピューターでファイルが削除されます。
しかし、私たちはそれを避けたいと思っています - ファイルはもはや git リポジトリであってはなりませんが、プル/マージで削除されるべきではありません。
これは可能ですか?
あなたが探していることを正確に行う方法はありません。しかし、以下はあなたのために働くかもしれません。
削除された回答へのコメントで、削除するファイルをそのファイルのテンプレートに置き換えることが目標であると述べました。そのテンプレートファイルが古いファイルが削除されたのと同じコミットによって作成され、ファイルが十分に類似している場合、git はそれを名前変更として検出します (これは実際にgit mv
行うことです)。
その後、他の開発者がその変更を自分のリポジトリにマージしようとすると、そのコピーは削除されるのではなく、名前が変更されます。おそらく、コミットのマージを妨げるファイルへのローカル変更があった場合。その時点で、ファイルのバージョンを一時的な名前にコピーし、git checkout HEAD <thefile>
元のファイルへの変更を破棄するために使用できます。これにより、名前の変更を含め、マージを続行できます。その後、一時コピーを元の名前に戻すことができます。
これには、そのリポジトリのベアではない各コピーでいくらかの作業が必要ですが、作業が削除されることは決してありません。
git rm --cached
ローカル ファイルは保持しますが、リポジトリからは削除します。
1)マスターブランチで作業しているとしましょう:
git rm dont-track-me.txt
git commit
git push origin master
2)開発者のボックスに:
git pull # yep, this will delete the file
git checkout HEAD^ dont-track-me.txt
git reset # prevents restaging the file in the index
'dont-track-me.txt'は、開発者の作業ツリーに追跡されていないファイルとして表示されるようになりました。これは、ステップ(1)と(2)の間に他のアクティビティが発生しないことを前提としています。そうしないと、もう少しいじる必要があるかもしれません。