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
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
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
---
- 1. Git entfernen Geschichte Commit
- 2. alle Git löscht Geschichte Commit
- 3. Reorder git commit Geschichte von Datum
- 4. Wie kombinieren Sie zwei Git Repos?
- 5. SVN - Merge Geschichte von zwei Repos
- 6. Halten Sie Git-Geschichte beim Teilen einer Datei
- 7. Finden Sie die erste Gabel von einem Commit in Git
- 8. Liste der Unterschiede zwischen zwei Git Repos (alle Zweige)
- 9. Github Anonym Commit Geschichte
- 10. Verwenden Sie git commit history, um Projekthotspots zu finden?
- 11. Verketten Sie die Geschichte von zwei Git-Repositories?
- 12. Verwenden von Git als Brücke zwischen Git und SVN Repos?
- 13. Wie teilen Sie Datenbankmodelle zwischen zwei Modulen?
- 14. Können Sie die tatsächlichen Unterschiede zwischen zwei Git-Commits erhalten?
- 15. Führen Sie Zusammenführungen in gepfropften Git-Geschichte
- 16. Zwei Git Repos in einem Ordner verwenden
- 17. git Geschichte einer Quellzeile
- 18. Rückgängig eine bestimmte in Git verpflichten, die Remote-repos
- 19. Wie finden Sie den vorherigen Merge-Commit?
- 20. Behalte nur die jüngste Geschichte des Git Repos (wegen des gebrochenen Commits)?
- 21. Squash git Geschichte
- 22. Wischen eine Remote-Filiale Geschichte ohne eine gute initiale commit
- 23. Zwei lokale Niederlassungen verfolgen getrennte Fern Git repos
- 24. Git-Tools zeigen unterschiedliche Geschichte
- 25. Wie lösche ich die alte git Geschichte?
- 26. Git-Unterverzeichnis zwei Verzeichnisse teilen
- 27. Umgang mit zwei repos wie zwei Niederlassungen in Git
- 28. mehrere repos GIT, das Hinzufügen ein vorhandenes Projekt
- 29. Wie git check in Geschichte vor bestimmten Commit beibehalten?
- 30. Finden Sie die Geschichte der SQL-Abfragen