2017-02-27 23 views
0

私は2つのGitリポジトリを持っていますが、どちらも同じコードベースを含んでいますが、1つはその歴史を取り除かれています。特定のファイルの存在に基づいて曖昧な日付範囲を超えた第2のレポのソースについて何も知らないと、自動的に履歴をスキャンして2番目のレポの状態に最も近い最初のレポでコミットを見つけることはできますか?履歴を共有しない2つのgit reposの間で最も近いコミットを見つけますか?

答えて

0

あなたはRepoA & RepoBRepoAは最も歴史であることを起こる2つのレポを持っていると仮定すると。 RepoA

は今、あなたはRepoB /マスターには存在しないRepoAのmasterブランチにあるコミットを確認するためにlogコマンドを使用することができますRepoB

git remote add old /path/to/RepoB 
git fetch old 

の歴史をコミットフェッチ

git log old/master..master 
0

gitの履歴のある時点でファイルにアクセスしたときに、次のスクリプトを使用します。このスクリプトを使用すると、関連するコミットを正確に特定できるはずです。

#!/bin/bash 
KNOWN_FILE=$1 
KNOWN_SUM=$(cat $KNOWN_FILE | sha1sum) 
FILE_REVISION="$2" 
shift 
shift 
SEPARATOR="---\n" 
echo "The file $KNOWN_FILE($FILE_REVISION) is located in the following commits" 
git log "[email protected]" --pretty=format:'%H' | while read commit ; do 
    if [ "${KNOWN_SUM}" == "$(git show $commit:$FILE_REVISION 2>&- | sha1sum)" ]; then 
     echo "$commit" 
     SEPARATOR="---\n" 
    else 
     echo -ne "${SEPARATOR}" 
     SEPARATOR="" 
    fi 
done 

それは最初のパラメータを使用して、既知のファイルリポジトリのgitの履歴に存在し、第二は、Gitのリポジトリ内の相対ファイルパスであり、少なくとも2つのパラメータを取ります。残りのパラメータはgit logに与えられます。

使用例

$ ~/bin/history_locate.sh ../pom.xml.old pom.xml --all 
The file ../pom.xml.old(pom.xml) is located in the following commits 
--- 
7144ad970b1db19356941b97bc72564290403497 
--- 
51c1cacc2b04ebeed47a4b27b9bf8b8301f5fe7c 
e69d6f60edbb76ed3f377f2aac5be6289b19eee5 
2b0f446fca4dec8d84781877f0b38d020e5ac2af 
46d412ff0a95bea1cf340e736f5a87a90f13bedd 
--- 
関連する問題