2017-02-27 2 views
0

Ich habe zwei Git-Repos, beide enthalten die gleiche Codebasis, aber eine davon ist ihrer Geschichte beraubt worden. Wenn ich nichts über die Quelle des zweiten Repos über einen vagen Datumsbereich aufgrund des Vorhandenseins bestimmter Dateien weiß, wie würde ich dann automatisch den Verlauf durchsuchen, um den Commit im ersten Repo zu finden, der dem Zustand des zweiten Repos am nächsten kommt?Finden Sie das engste Commit zwischen zwei Git Repos, die keine Geschichte teilen?

Antwort

0

Angenommen, Sie haben 2 repos RepoA & RepoB und RepoA mit den meisten Geschichte passiert sein.

Innerhalb RepoA holen begehen Geschichte RepoB

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

Jetzt können Sie den log Befehl verwenden, um die Commits, um zu sehen, die in der Master-Zweig von REPOA sind, die in Master RepoB/nicht vorhanden sind

git log old/master..master 
0

Ich benutze das folgende Skript, wenn ich Zugriff auf Dateien habe, die irgendwann im git-Verlauf kopiert wurden. Mit diesem Skript sollte es ziemlich einfach sein, relevante Commits zu lokalisieren.

#!/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 

Es dauert mindestens zwei Parameter, wobei der erste Parameter ist die Datei, die Sie in der git Geschichte eines Endlagers bekannt existiert und das zweite ist die relative Dateipfad im Git Repository. Der Rest der Parameter wird Git Protokoll gegeben.

Beispiel für die Verwendung

$ ~/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 
--- 
Verwandte Themen