2016-09-28 13 views
2

私はいくつかのオープンソースライブラリのソースも含むレガシープロジェクトを持っています。残念ながら、一部のライブラリは、リビジョン情報のない簡単なスナップショットです。 私はライブラリリポジトリ(git-driven)で一致するコミットを識別する方法を探しています。gitリポジトリとバージョン管理されていないソースを一致させる

私がこれまで行ってきたことは、単一ファイルの精神的な「バイセクシュアル」な変更ですが、これらのファイルはコミット間で頻繁に移動され、その後はやや難しいと判明しました。

利用することができる前提条件:

  • 正確な一致が
  • いくつかのヒューリスティックな時間が存在する間隔情報
  • プロジェクトは
(< 100KB C++コード)が大きすぎない可能性も適用可能です

答えて

2

どうすればよろしいですか?

  1. クローンライブラリーのリポジトリ

  2. 手ですべてのコミットに対して

  3. 実行git diffあなたが持っているバージョンで作業ツリーを上書き:

    #!/usr/bin/env bash 
    for rev in $(git rev-list --all) 
    do 
        if git diff --exit-code $rev &> /dev/null 
        then 
         echo $rev 
        fi 
    done 
    

でもありの場合を完全に一致していない場合、この手順を簡単に拡張して、バージョンとの差が最も小さいリビジョンを検索することができます。

+0

とても良いテンプレートです。それが判明したので、私の最初の前提条件は真実ではなかった、少し修正する必要があった。しかしその後、私は正しい答えを簡単に見つけることができました: 'git diff -exit-code --shortstat $ rev' – Michael

+0

もちろん、 '--exit-code'は省略可能です – Michael

関連する問題