Wie entferne ich einen Autor aus einem Git-Repository?

8

Wenn ich ein Git-Repository erstelle und es öffentlich publiziere (zB auf GitHub etc.), und ich von einem Mitwirkenden eine Anfrage an das Repository bekomme, seinen Namen aus welchem ​​Grund auch immer zu entfernen oder zu verdecken, gibt es einen Weg, dies einfach zu tun ?

Grundsätzlich hatte ich eine solche Anfrage und möchte vielleicht ihren Namen und ihre E-Mail-Adresse durch etwas wie "Anonymous Contributor" oder vielleicht einen SHA-1-Hash ihrer E-Mail-Adresse oder etwas ähnliches ersetzen.

    
Tom Morris 12.08.2010, 00:20
quelle

4 Antworten

4

Jeff hat recht, der richtige Track ist git filter-branch. Es erwartet ein Skript, das mit den Umgebungsvariablen spielt. Für Ihren Anwendungsfall möchten Sie wahrscheinlich Folgendes:

%Vor%

Sie können testen, dass es so funktioniert:

%Vor%

Bitte pass auf. Es gibt keine Möglichkeit, den Namen des Autors zu löschen, ohne alle späteren Commit-Hashes ungültig zu machen. Das wird später zu einem Schmerz für Leute führen, die Ihr Repository benutzt haben.

    
nes1983 12.08.2010 07:50
quelle
2

Wenn Sie ein Git Repo nicht nur für einen Benutzer, sondern für alle Benutzer "anonymisieren" müssen, bietet Git 2.2 (November 2014) eine interessante Funktion mit dem verbesserten und erweiterten git fast-export :

Siehe commit a872275 und committe 75d3d65 von Jeff King ( peff ) :

teach fast-export an --anonymize Option:

  

Manchmal möchten Benutzer einen Fehler in ihrem Repository melden, aber es ist ihnen nicht erlaubt, den Inhalt des Repositorys zu teilen.
  Es wäre nützlich, wenn sie ein Repository erzeugen könnten, das eine ähnliche Form wie sein Verlauf und Baum hat, ohne jedoch irgendwelche Informationen zu verlieren.
  Dieses "anonymisierte" Repository könnte dann mit den Entwicklern geteilt werden (unter der Annahme, dass es immer noch das ursprüngliche Problem repliziert).

     

Dieser Patch implementiert die Option " --anonymize " für fast-export , die einen Stream generiert, der ein solches Repository neu erstellen kann.
  Durch die Erzeugung eines einzelnen Streams kann der Anrufer leicht überprüfen, dass keine nützlichen Informationen durchsickern. Sie können einen Überblick darüber erhalten, was bei der Ausführung eines Befehls geteilt wird:

%Vor%
  

zeigt jede eindeutige Zeile, die wir generieren, modulo beliebige Zahlen (jedem anonymisierten Token wird eine Zahl wie " User 0 " zugewiesen, und wir ersetzen es konsistent in der Ausgabe).

     

Neben der Anonymisierung erzeugt Testfälle, die relativ klein sind (im Vergleich zum ursprünglichen Repository) und schnell generiert werden können (im Vergleich zur Verwendung von filter-branch oder der Ausgabe von fast-export selbst)

Doc:

  

Wenn die Option --anonymize angegeben wird, versucht git, alle identifizierenden Informationen aus dem Repository zu entfernen, während immer noch genug von den ursprünglichen Baum- und Historienmustern zur Reproduktion einiger Fehler beibehalten wird.

     

Mit dieser Option ersetzt git alle refnames, Pfade, Blob-Inhalte, Commit- und Tag-Nachrichten, Namen und E-Mail-Adressen in der Ausgabe durch anonymisierte Daten.   Zwei Instanzen desselben Strings werden äquivalent ersetzt (z. B. haben zwei Commits mit demselben Autor den gleichen anonymisierten Autor in der Ausgabe, aber keine Ähnlichkeit mit der ursprünglichen Autor-Zeichenkette).
  Die Beziehung zwischen Commits, Zweigen und Tags wird beibehalten, ebenso wie die Commit-Zeitstempel (aber die Commit-Nachrichten und Ref-Namen haben keine Ähnlichkeit mit den Originalen).
  Die relative Struktur des Baums bleibt erhalten (z. B. wenn Sie einen Stammbaum mit 10 Dateien und 3 Bäumen haben, so wird auch die Ausgabe), aber ihre Namen und der Inhalt der Dateien werden ersetzt.

    
VonC 03.12.2014 08:22
quelle
1

Sie können die Änderung in Ihrem lokalen Repository vornehmen, git commit --amend das entsprechende Commit (wo Sie den Namen hinzugefügt haben) und dann git push --force , um github mit Ihrer Version des Repositorys zu aktualisieren.

Das ursprüngliche Commit mit dem Namen des Contributors ist im reflog noch verfügbar (bis es abläuft, aber es würde eine Menge Aufwand erfordern, es zu finden. Wenn dies ein Problem ist, können Sie dieses spezifische Commit auch aus dem Reflog löschen - Siehe git help reflog für die Syntax und wie man sie in der Liste findet.

    
Ether 12.08.2010 00:45
quelle
1

Wenn Sie mehr als ein Commit ändern möchten, sehen Sie sich die Manpage für

an %Vor%

Sie können git-filter-branch verwenden, um den Inhalt / Meta früherer Commits zu ändern.

Beachten Sie, dass Sie keine Möglichkeit haben, um den Autor von jemandem zu entfernen, der Ihre Zweigstelle bereits geklont hat. p>

Es ist auch eine schlechte Übung, einen Zweig zu ändern, der bereits veröffentlicht wurde, da dies für Leute, die den Zweig verfolgen, zu Verwirrung führen kann.

    
Jeff 12.08.2010 05:51
quelle

Tags und Links