以前はバージョン管理下になかったいくつかのコードを、既にいくつかのコミットを含む git リポジトリに含める必要があります。
私が自動化したいのは、新しいコードが子コミットになる適切な「親」コミットを見つけることです。
いくつかのテストの後、私は最もうまくいくと思いますgit diff-tree
(「親子関係」のテストに関連するコードが1つのフォルダーにしか含まれていないため)。
私のアプローチは次のようなものです:
- 既存のすべてのコミットと、コミットのノード sha1 および関連するサブツリーの sha1 をループします。
- 新しいファイルをリポジトリにコピーし、インデックスに追加します
- インデックス内の関連するサブツリーの sha1 に注意してください
- 既存の関連するサブツリーを新しい候補と比較し、似たものの git diff-tree を使用して「類似度」を計算します
- 最も類似した既存のサブツリーを選択し、それを新しいコミットの親にコミットします。つまり、新しい親をチェックアウトし (または
checkout --orphan
、適切な親が見つからない場合)、作業ディレクトリを空にし、新しいファイルで埋めてコミットします。
欠けているのは、類似性を計算する方法です! 誰かがフラグの組み合わせが役立つヒントを教えてくれるかもしれません...
それが重要な場合、コードはほとんど PASCAL のように見えます。