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.
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
) :
fast-export
an --anonymize
Option: %Vor%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ürfast-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:
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 vonfast-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.
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.
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.
Tags und Links git version-control