Frage an git, git-filter-branch, github – "Git Filter-Branch" wurde erfolgreich verwendet, um Committer / Autor zu ändern, aber Änderungen wirken sich nicht auf Github aus

6

Ich habe kürzlich den Autor, den Committer und die E-Mails in allen meinen lokalen Commits mit dem folgenden Befehl ersetzt:

git filter-branch -f --env-filter '
if [ "$GIT_COMMITTER_NAME" = "oldname" ];
then
    GIT_COMMITTER_NAME="newname";
    GIT_COMMITTER_EMAIL="newaddr";
    GIT_AUTHOR_NAME="newname";
    GIT_AUTHOR_EMAIL="newaddr";
fi

if [ "$GIT_AUTHOR_NAME" = "oldname" ];
then
    GIT_COMMITTER_NAME="newname";
    GIT_COMMITTER_EMAIL="newaddr";
    GIT_AUTHOR_NAME="newname";
    GIT_AUTHOR_EMAIL="newaddr";
fi
' -- --all

Die Updates werden sofort lokal angezeigt (z. B. in meiner SourceTree-Umgebung). Nach dem erzwungenen Verschieben des geänderten Repositorys auf GitHub ...

git push -f origin master

… Zwei einzelne Elemente sich hartnäckig weigern, ihren Committer und Autor aktualisieren zu lassen: die Datei Gemfile.lock und ein Views-Verzeichnis.

Bitte beachten Sie auch, dass:

Dies ist das zweite Mal, dass ich diese Art von Operation für dieses Repository durchführe. Ich glaube, dass ich mich beim ersten Mal nicht mit solchen Problemen konfrontiert sah.

Suche nach meinem alten Namen im Repository ...

$ find . "<oldname">

… tut Sie erhalten eine Reihe von Ergebnissen, was bedeutet, dass der alte Name immer noch in vielen Repository-Dateien lauert - einschließlich Dateien, die sowohl auf GitHub als auch lokal aktualisiert werden.

Meine Frage also: Wie kann ich den Committer / Autor der beiden "hartnäckigen" Dateien auf GitHub ändern?

Vielleicht speichert GitHub diese Informationen zwischen? Verursacht das Verschieben des Repos in eine neue Filiale oder ein neues Repo dasselbe Problem? Vladimir Panteleev
Was meinst du, wenn du Gemfile.lock und Views sagst, dass sie sich weigern, ihren Committer und Autor zu aktualisieren? Nur Commits haben Committer und Author, keine Bäume und Blobs. Außerdem würde der Filter-Zweig, den Sie ausgeführt haben, nichts mit Dateien mit dem Namen "oldname" anfangen. Es kann auch hilfreich sein, die Github-URL zu posten. Max Nanasy

Deine Antwort

2   die antwort
0

Welche genaue Ansicht auf GitHub verwenden Sie, um den Autor der Zeile zu bestimmen? Wahrscheinlich ist es entweder zwischengespeichert oder Sie sehen etwas spezielles für das alte Festschreibungs-SHA1.

Sie können testen, ob es funktioniert hat, indem Sie einen neuen Klon des Repos erstellen und überprüfengit blame filename für diese beiden Dateien. Wenn das den richtigen Autor anzeigt, dann hat es funktioniert.

5

Nach der Verwendung von git filter-branch behält git weiterhin eine Sicherungskopie des Verlaufs des Repos in refs / original. Dies ist so, dass Sie, wenn Sie etwas mit der Filter-Verzweigung vermasseln, diese bei Bedarf wiederherstellen können. Sobald Sie sicher sind, dass alles reibungslos funktioniert hat, können Sie die gesicherte Referenz mit folgendem Befehl entfernen:

git update-ref -d refs/original/refs/heads/master

Aus irgendeinem Grund ist noch ein zusätzliches Commit erforderlich, damit Github die Änderung widerspiegelt. Ich werde ein Leerzeichen oder etwas in die Readme einfügen, festschreiben und drücken ... danach spiegelt Github die richtigen Autoren auf der Projektseite wider.

Verwandte Fragen