web-dev-qa-db-ja.com

大規模で複雑なレガシープロジェクトをGitの制御下に置く

私はgitに関しては初心者ですが、一般にバージョン管理についてはそうではありません。CVSとSubversionを何年も使用しています。私はProgitとO'Reilly(Git)本、そして私は一般的な概念をよく理解していると思います。既存のプロジェクト用にgitを設定しようとしています。いくつかのガイダンスが必要な問題が発生しています。

背景:このプロジェクトには、Linuxを実行する組み込みSoCチップが含まれます。サードパーティがアプリケーションの初期開発を行い、コードを保持するために4つの個別のgitリポジトリを設定しました。

  • チップベンダーのSDK用
  • Linuxカーネル用
  • サードパーティによって作成されたカスタムAPIレイヤー用
  • 1つは実際のアプリケーションコード用です。

これに加えて、バージョン管理下にない(まだ)トップレベルのファイルがいくつかあります。

最初の問題は、これらすべてを1つのgitリポジトリに結合したいということです。最終的に、この新しい最上位リポジトリのベアクローンは、独自のクラウドサービスでホストされます。サブモジュールとサブツリーの関係について、ネット上の多くの資料( here から始まる)を見てきましたが、どちらが自分の状況に最も適しているかはまだわかりません。サードパーティのサーバーで発生する可能性のある4つのリポジトリの変更を引き続き追跡できるようにしたいのですが、ローカルの変更の独自の履歴も維持する必要があります。助言がありますか?

2番目の問題は、ローカル開発者がプロ​​ジェクト全体のスナップショットをときどき作成することを除いて、バージョン管理をまったく行っていないことです。さらに水を濁らせるために、さまざまなスナップショットが撮られた順序は明確に文書化されていません。これらの各スナップショットは、200Kを超えるファイルと6GBを超えるデータのツリーであることに注意してください。ただし、99.99%のファイルはスナップショット全体で同一であると確信しています。これらのスナップショット間の違いを見つけ、最終的にそれらを配置する正しい順序を理解する最良の方法は何ですか?

私の現在の考えは、私が最も古いと思うものを取り、最初にそれをgitにコミットすることです。次に、他のそれぞれに対して個別のブランチを作成します。 git diffツールを使用すると、違いを効率的に見つけて、masterブランチにマージする順序を理解できます。考え?

3
Dave Tweed

まず、gitを使用して、さまざまなダンプを比較できます。

  • 新しいgitリポジトリを作成します。ほとんどの場合、これをどこかでホストすることを望みますが、ローカルでディスク上でのみ作業できます。
  • 使用しているバイナリファイルタイプをリストした.gitattributesファイルを追加し(これは、CR-LF処理によってファイルが破損する可能性があるWindowsを使用する場合に特に重要です)、初期コミットを実行します。これがマスターブランチになりました。

ダンプのそれぞれについて、次のことを行います(dumpnameを、その特定のダンプの適切な短い識別子に置き換えます-日付タグで問題ない場合があります)。

  1. git checkout master-ローカルリポジトリには.gitフォルダと.gitattributesファイルのみが存在するはずです。
  2. git checkout -b dumpname
  3. ダンプをローカルリポジトリに解凍します。
  4. git add .
  5. git commit-すべてのファイルが含まれていることを確認し、適切な1行のコミットメッセージを追加します。
  6. ホストされている場合、git Push -u Origin(またはあなたの作品はローカルでのみ利用可能になります)

(ブランチ間の同一ファイルは一度だけ保存されます)

完了したら、ダンプごとにブランチがあります。これで、git diff dumpname1 dumpname2を使用して2つのダンプ(またはその他のgitツール)を比較できます。これにより、移動されたファイルを識別できます(100%同一でなくても)

これにより、タイムラインと違いの概要を確立できます。タイムラインがある場合は、最終的に最新のものになっていることがわかった順序で、単一のブランチでこれをやり直すことができます。

次に、最新のローカル変更をアップストリームの4つのクローンにバックポートし、現在と同じ結果が得られるものからビルド環境を作成することをお勧めします。