以前にも同様の質問をしたことがありますが、この件についてかなり徹底的な分析を行った結果、これgit filter-branch
が私が探している主力製品であるという結論に達しました。それか、.git
それ自体で汚れた作業を行うシェル スクリプトのいずれかです (とにかく、git はその内臓をインターフェイスの一部として公開しているため)。
ビルド スクリプトとビルド構成定義を含むプロジェクト ディレクトリがあります。さらに重要なことはsrc
、プロジェクトのあらゆる種類のソース コードを含むフォルダーが含まれており、git リポジトリであることです。
含まれているソース コード フォルダーだけでなく、プロジェクト フォルダー全体を git リポジトリにする必要があることに気付きましたが、ソース コード開発の履歴を保持したいと考えています。実際、履歴が完全に書き直されるmain.c
ことを望みますsrc/main.c
. 次に、親フォルダー (ビルド スクリプトがある場所) からファイルを移動し、リポジトリでチェックするだけです。
サブツリーのマージや git サブモジュールに煩わされたり、リポジトリが変更された後に何かをマージしたりリセットしたりする必要はありません。私は現在、gits の内部構造についてかなりの知識を持っています。コミットは、ファイル名とペアになったブロブを参照するツリーを参照します。
この知識があれば、すべてのパスにプレフィックスを付けて、履歴を書き換えることができるはずだと思いますsrc/
私は余分な作業をしたくないだけです。それfilter-branch
が進むべき道のようですが、使用後の例と必要なハウスキーピングに混乱します。「元の参照」?もう1つの問題は、「裸の」リポジトリで完全に問題がないことです。作業ツリーは必要ありません。また、インデックスが必要な理由もまったくわかりません。