2016-11-25 3 views
1

コンサルタントとして、わたしはコード・ベースの混乱を継承している状況で、よく知られていない時点でgit cloneまたはdev tarballから始まっていることがよくあります。どのコミットを開始したのかはどのようにして確認できますか?このコードベースはGitに由来していますか?

コードベースは、ファイルが編集され、正確なGitチェックアウトではありませんが、あなたが継承されたコードベースがbootstrapと呼ばれるサブディレクトリが含まれている想像し、明確にするなど、

を追加しました。それは明らかにブートストラッププロジェクトを含んでおり、それを更新したいと思います。あなたが知っているのは、twbs/bootstrapがgit clone [email protected]:twbs/bootstrap.gitでダウンロードされたか、https://github.com/twbs/bootstrap/archive/v4-dev.zipでダウンロードされたことです。

この初期アクションの後、ファイルが変更、削除、追加されたこのサブディレクトリで何らかの無差別なハッキングが発生しました。私はそれを最新バージョンに更新したいと思います。そのためには、最初のダウンロードに対応するGitハッシュを探したいと思います。

+0

コンサルタントの観点からは、法的問題のために見つけなければならないもの、またはこれが責任の原因であるかどうかです。 – Makoto

+0

いいえ、それは掃除の問題です。 – chx

+0

Gitを掘り下げて、この特定のファイルを単純に書き直すよりもコミットを見つけるのに時間がかかるのだろうかと思っていますが、私はそれ以上あなたの理論的根拠に同意しません。 – Makoto

答えて

2

何千ものファイルと何千ものコミットがあるときには実行できない、多くのアイデアが素朴なものから始まります(私は各revをチェックアウトし、diff -rUNを実行してdiffstatします。 (私はすべてのファイルに対してWhich commit has this blob?を実行してコミットし、データベースに入れていくつかのクエリを書く)実際に実行可能なものにリンクされた答えに基づいて緩やかに処理する。

まず、現在のファイルのハッシュを保存し、それを比較して、指定されたコミット内のすべてのブロブのハッシュをリストし、マッチをスコアリングするというものです。

  1. 採点プログラムは、単にgrepあり、それは文字列のリスト読み取ることができます(でもパターンが、我々は、文字列を持っている)と、それらの文字列を入力して発生回数を数えます。
  2. git ls-tree -r
  3. はコミットにブロブハッシュをダンプします(そしてより多くのが、我々はそれを気にしないでください)
  4. git hash-objectは、既存のファイルのためのgit ls-treeと同じハッシュを生成します。

私はtmpfsを使用しましたが、早すぎる最適化はすべての悪の根源になるかもしれませんが、この最適化のコストはそれほど高くありませんでした。私はルートにこのスクリプトを持っていた:

#!/bin/sh 
echo "$(git ls-tree -r $1|grep -c -F -f ../hashes.txt) $1" 

basemessの下で問題のあるコードベースと手付かずのgitのクローンを置きます。

cd mess 
find . -type f -print0| xargs -0 -P8 git hash-object >> ../hashes.txt 
cd ../base 
git log --all --format=%H |xargs -n1 -P8 ../script.sh |sort -n|tail 

これは数分で終了した(しかし、私はそれはあなたがあまりにもそれらを持つことになりそうだ、私はgit logにいくつかの日付の制限があったので少しだまさが、ユースケースを与えられました)。私の出力は次のようになります。

9548 0ceb441a75cd4cd11427da2b37efd49c99f9e562 
9549 8f2c0537da72bb7ca866e6847bf887811ab3c72e 
9550 5cd36afbe23310c17caf4075d29c70a4b2252295 
9550 8da13e6c60255d2b8008d8de3d3e64de91d2bf7a 
9551 2be39c73876f9d22f8cea40777d082e3fba4cbd4 

明らかに2be39c7は9551個の一致するファイルを持っており、それが「neigbhouring」のコミットなど、いくつかの壊れた外れ値は非常に似ていますが、下の数字を持っていません。

関連する問題