2

商業会社はオープンソースプロジェクトをフォークし、独自のコマンドラインオプションを追加しました。私の問題は、フォークがかなり前のものであり、新しい機能を利用するためにコードを更新したいということです。

彼らがGPLに準拠し、変更されたソースのアーカイブをリリースしたことを考えると、どのようにして彼らが分岐したgitバージョンを最もよく判断できますか?

4

3 に答える 3

3

単に tarball に対してそれを見つける必要があるため、分岐点の最良の推測は、tarball との差分が最小限であるコミットを見つけることです。

リリース済みのタグ付きバージョンからフォークが開始されたと思われる場合は、これを使用できます。

  1. tarball をブランチにインポートします (もちろんどこにも公開する必要はありません)。
  2. そのブランチに切り替える
  3. 次のコマンドを実行します。

eval "git for-each-ref --shell --format 'echo -n %(objectname) " "; git diff %(objectname) --minimal | wc -l' refs/tags" | sort -n -k 2 -r | tail

このコマンドは、最初の列にコミット名を出力し、2 番目の列に変更された行の番号を出力します (およそ、差分のヘッダーもカウントしますが、あまり変化しないはずなので)、変更された行の数でソートされます。あなたのフォークポイントはそこの最後の行でなければなりません。

これがどのように機能するか: すべてのタグと tarball 入力の間で git diff を実行し、統一された形式で、この diff のコンテキストとカウント行なしで実行します。次に、この変更された行数でソートされます。

于 2013-01-03T08:36:13.163 に答える
0

会社が編集を開始する前 (分岐点) の最後のコミット ID を見てください。

次に、os リポジトリでそのコミット ID を見つけます。

次に、両方のリポジトリの最新のコミットを比較し、会社のリポジトリからの変更にパッチを適用して、新しいブランチの os リポジトリに適用することをお勧めします。いくつかの競合を修正し、テスト、テスト、テスト、そしてうまくいけばあなたの良いことです!

于 2013-01-02T20:01:41.803 に答える
0

Assuming you have access to the Git repositories of the original open source project and the commercial fork, you can use git merge-base:

git merge-base original_project/master commercial_fork/master

This will find the most recent common ancestor of both original_project/master commercial_fork/master. The output of this command is the Git revision the fork is currently derived from. You can use git describe or git tag --contains to try to identify the project version corresponding to that Git revision.

于 2013-01-02T20:37:43.123 に答える