2015-02-24 62 views
2

我有一個git倉庫中的兩個文件,可能在兩個不同的分支。在他們各自分支的歷史中,他們有相同的內容。我想在文件相同的每個分支上找到最新的提交。找到兩個文件相同的最近提交

我可以編寫一個工具來迭代每次提交的歷史並散列該文件,然後在另一個分支上重複並找到最佳匹配。 git中有更好的方法嗎?

如果我想用兩組文件而不是單個文件來做到這一點,並且我不知道以前哪些對相同?

上下文:我的一個項目從過去某個時間點的其他地方抽取代碼,現在事情已經發生分化,包括在文件結構中。我希望生成一個提交列表,以考慮從初始導入代碼後發現的提交併僅影響導入的文件,從而從上游獲取提交。

+0

應該有。隨着一些git內部。不知道,但我認爲這些內容已被散列並用作blob的文件名。如果這是真的,你可以找到一種方法來找到(a)你正在尋找的散列,(b)查詢所有參考給定blob的樹/提交的git,你就完成了。 – 2015-02-24 10:12:12

回答

0

下面是它首次切割,有人可能會拿出更好的東西

(git log --first-parent branch2..branch1 --pretty='%H 1'|cat -n # branch1 commits and 
    git log --first-parent branch1..branch2 --pretty='%H 2'|cat -n # branch2 commits 
) | while read l h b; do     # append each commit's path/to/file's hash 
      echo $l $h $b $(git rev-parse -q --verify $h:path/to/file); 
    done   | 
    sort -s +3 | # collect identical content together (key +3 is the hash) 
    uniq -2  | # keep only latest of each per branch (key -2 is branch & hash 
    uniq -D -3  # and only show content that appears on both branches 

上排序的關鍵規格是棄用的形式,我用在這裏,以匹配uniq的用法。

要在多個文件集合中找到重複只在上面做多個回聲,這個想法保持不變。

相關問題