3

Git の下に (大規模な) Fortran プロジェクトがあります。開発中の機能に対応するさまざまなアクティブなブランチがあります。各ブランチのコードのコンパイル済みバージョンを維持する便利な方法を見つけたいと思います。

コードは現在 Make を使用してコンパイルされており、すべてのオブジェクト ファイルはバイナリと共に別のフォルダー (build_branch1 など) に保持されています。ディレクトリ構造は次のようになります。

Makefile
./src
./build_branch1/objects
./build_branch1/bin
./build_branch2/objects
./build_branch2/bin
...

したがって、原則として、次のようにすべてのブランチをコンパイルできます。

git checkout branch1
make --prefix=build_branch1
git checkout branch2
make --prefix=build_branch2
など...

Make はソース (Git によって新たにチェックアウトされたもの) のタイムスタンプを build_branchN フォルダー内のオブジェクト ファイルと比較し、変更されたものを再コンパイルします。問題は、ブランチ 1 とブランチ 2 の間で異なるすべてのソース ファイルのタイムスタンプが Git によって変更されるため、必要のないときに多くのファイルが再コンパイルされることです。コードのコンパイルには長い時間がかかるため (最大 30 分)、これは大きな不便になる可能性があります。

この場合の最善の戦略は何だろうと思っていました。この投稿のように、チェックアウトごとにタイムスタンプを更新することを考えています。 あなたは何をお勧めします?

4

1 に答える 1

3

各 checkout でタイムスタンプを変更する代わりに、それらの回答の時点では存在しなかったメカニズムを使用できます (のものを含む): git notes

あなたは出来る:

  • 各ビルドの後、ビルド タイムスタンプを使用してビルドされたコミットに注意してください
  • 各ビルドの前に、(ブランチにちなんで名付けられた名前空間で) 最後のビルド タイムスタンプのメモを探し、そのタイムスタンプを持つファイル (git ステータスによると、現在変更されていない) を変更します。

アイデアは、必要な情報を記録することです。

  • Git リポジトリで (永続化できるように)
  • 現在の履歴を変更しない方法で (コミットの SHA1 は変更されません)
于 2012-11-21T13:33:48.870 に答える