Eine sicherere Alternative zu git's filter-branch
es filter-repo
Werkzeug, wie in den Git-Dokumenten vorgeschlagen aquí .
git filter-repo --commit-callback '
old_email = b"your-old-email@example.com"
correct_name = b"Your Correct Name"
correct_email = b"your-correct-email@example.com"
if commit.committer_email == old_email :
commit.committer_name = correct_name
commit.committer_email = correct_email
if commit.author_email == old_email :
commit.author_name = correct_name
commit.author_email = correct_email
'
Der obige Befehl spiegelt die Logik wider, die in este Skript, sondern verwendet filter-repo
anstelle von filter-branch
.
Der Codeteil nach commit-callback
ist im Grunde Python-Code, der für die Verarbeitung von Übertragungen verwendet wird. Sie können hier Ihre eigene Logik in Python schreiben. Siehe mehr über commit
Objekt und seine Attribute aquí .
Seit filter-repo
Tool nicht mit Git gebündelt ist, müssen Sie es separat installieren.
Ver Voraussetzungen y Installationsanleitung
Wenn Sie eine Python-Env >= 3.5 haben, können Sie pip
um sie zu installieren.
pip3 install git-filter-repo
Hinweis : Es wird dringend empfohlen, zu versuchen filter-repo
Werkzeug auf einem neuen Klon. Auch Fernbedienungen werden entfernt, sobald der Vorgang abgeschlossen ist. Lesen Sie mehr darüber, warum Fernbedienungen entfernt werden aquí . Lesen Sie auch die Einschränkungen dieses Tools unter INTERNES Abschnitt.
17 Stimmen
Frage: Bleiben bei der Verwendung von git filter-branch die SHA1-Werte für frühere Tags, Versionen und Objekte erhalten? Oder werden durch die Änderung des Autorennamens auch die zugehörigen SHA1-Sätze geändert?
0 Stimmen
Oder Sie können versuchen, mit
refs/replace/
Mechanismus.1 Stimmen
Nach der Neufassung, wenn sie ihre Arbeit nicht auf die Geschichte vor der Neufassung gestützt haben, nur
git reset --hard origin/master
oder einfachgit pull origin
(der vorspulen sollte). Wenn sie ihre Änderung als Grundlage nehmen, müssen sie eine neue Basis mitgit rebase origin/master
oder einfachgit pull --rebase origin
(die Befehle sind nur Beispiele).49 Stimmen
Hashes werden sich ändern ja
3 Stimmen
Ich habe ein kleines Skript erstellt, das die Ursache für meine Probleme beseitigt hat. gist.github.com/tripleee/16767aa4137706fd896c
0 Stimmen
@tripleee Ich finde deinen Link/deine Antwort wirklich gut, aber diese Frage ist jetzt etwa 5 Jahre alt. Dies könnte ein großartiger Q&A-Beitrag für andere Nutzer werden (beantworten Sie Ihre eigene Frage). Das wäre nützlicher, anschaulicher und sichtbarer als ein einfacher Kommentar hier.
2 Stimmen
@impinball Das Alter der Frage ist kaum relevant. Eine neue, doppelte Frage zu erstellen, kommt nicht in Frage. Ich nehme an, ich könnte eine Frage erstellen, die um diese spezielle Antwort bittet, aber ich bin nicht ganz davon überzeugt, dass sie so viel Aufmerksamkeit erhalten würde. Es ist ja nicht so, dass es hier einen Mangel an Git-Fragen gäbe... Ich freue mich jedenfalls, dass ich helfen konnte.
0 Stimmen
Diese Antwort ist viel einfacher @Flávio Amieiro stackoverflow.com/a/11768870/670229
3 Stimmen
Das github-Skript, das @TimurBernikovich erwähnt hat, ist großartig und funktioniert bei mir. Aber die github url hat sich geändert: docs.github.com/de/enterprise/2.17/user/github/using-git/
0 Stimmen
Die Antworten könnten zu viel des Guten sein. Prüfen Sie zunächst, ob dies Ihren Anwendungsfall erfüllt - stackoverflow.com/a/67363253/8293309