Wie kann ich von Github aus pushen und ziehen, ohne vertrauliche Informationen zu teilen? Verschmieren & Reinigen?

Wenn ich von Github auf ein Server-Repository ziehe, möchte ich das Überschreiben lokalisierter vertraulicher Informationen in bestimmten Dateien, z. B. config.php, vermeiden.

Hinweis: Es handelt sich nicht um ein Open-Source-Repo. Ich habe die volle Kontrolle über das Repository, ich bin der einzige Benutzer, es ist privat, aber kritisch, Es basiert auf einem Open-Source-Framework, das möglicherweise die Struktur der Konfigurationsdateien ändert.. Ich möchte nur in der Lage sein, daraus zu testen, zu inszenieren und zu produzieren und nicht versehentlich die Konfiguration der Produktion zu testen usw. Aber ich kann die Konfigurationsdateien nicht neu codieren, um Daten von einem anderen Ort zu ziehen, ohne dafür zu sorgen schwierige Zusammenführungssituationen später, wenn das Framework aktualisiert wird.

Im Idealfal Ich möchte Git mitteilen können, dass er beim Abrufen von REPO_URI beim Ziehen immer alle Hunks verwirft, die die derzeit in Zeile 24 von FILE_PATH zu findenden Informationen ändern könnten. Allerdings habe ich festgestellt, dass das nicht möglich ist (korrigiere mich, wenn ich mich irre).

Jedoc es sei denn, jemand kann eine Möglichkeit anbieten, dies zu tun, dann lesen Sie bitte die folgende Lösung und lassen Sie mich wissen, ob dies der ideale Weg ist, dies zu tun:

Ich würde Keyword-Erweiterung verwenden wie hier in der Bedienungsanleitung von git beschrieben. Im Folgenden beschreibe ich, wie ich dies tun würde, und stelle dann unten einige Fragen zu diesem Ansatz.

Beschreibung der Methode

Zunächst würde ich zwei Skripte schreiben, "sensitive_values_inserter" und "sensitive_values_remover", die bestimmte Dummy-Schlüsselwörter (die sich im Github-Repo-Master befinden) mit den bestimmten vertraulichen Informationen wie Kennwörtern, Benutzernamen, Datenbankpfaden usw. tauschen

#! /bin/sh -f
sed -e 's/@USERNAME@/dummyvalue/' -e 's/@PASSWORD@/dummyvalue/' $1

etc

Zweitens würde ich drei Versionen dieses Skripts erstellen, eine für jede Umgebung: Test / Staging / Produktion. Jede Version enthält anstelle der Dummy-Werte die spezifischen Kennwörter, Benutzernamen und Datenbankpfade, die für die Umgebung relevant sind, zu der sie gehört. Ich würde jedes dieser Skripte in einen Pfad relativ zu jedem dieser Code-Repositorys einfügen:

/live/filters/sensitive_values_inserter
/live/filters/sensitive_values_remover
/live/repo/{LIVE}
/test/filters/sensitive_values_inserter
/test/filters/sensitive_values_remover
/test/repo/{TEST}
/stag/filters/sensitive_values_inserter
/stag/filters/sensitive_values_remover
/stag/repo/{STAG}

Jeder dieser Filter hätte die spezifischen Werte für die relevanten Einstellungen.

Dann würde die Konfiguration des gesamten Repos wie folgt geändert:

$ git config filter.infosafe.smudge '../filters/sensitive_values_inserter'
$ git config filter.infosafe.clean '../filters/sensitive_values_remover'

Zuletzt im Server-Repository:

$ echo 'config.php filter=infosafe' >> .gitattributes

Wenn ich dies richtig verstehe, ersetzen diese Filter beim Abrufen vom Hauptserver die "Dummy" -Werte durch die, die ich verwenden möchte.

Hinweis um dies zum Laufen zu bringen, wie in @ gezeidiese andere Stapelüberlauf-Frage, nachdem Sie alles wie oben beschrieben eingerichtet haben, müssen Sie:

cd /path/to/your/repo
git stash save
git checkout HEAD -- "$(git rev-parse --show-toplevel)"
git stash pop

Zwischen dem Checkout und dem Stash Pop musste ich alle Änderungen an den Dateien festschreiben, in denen die Bereinigung stattgefunden hatte. Machen Sie sich keine Sorgen, nachdem Sie sie festgeschrieben haben, werden diejenigen im Arbeitsverzeichnis verschmiert. (Es ist irgendwie kontraintuitiv, aber es funktioniert.)

Ich konnte erfolgreich auf Github pushen und nur die sauberen Werte werden angezeigt.

(In diesem Sinne gibt es eine alternative, weiterentwickelte Technik, bei der ein .gitignore pro Zweig sowie zwei Treiber und zwei Filter pro Zweig verwendet werden. Auf diese Weise können Live-Kennwörter beim Wechsel zum Testzweig gelöscht werden und umgekehrt Der Trick besteht darin, die Cleaner für beide Zweige im .gitignore jedes Zweiges aufzurufen, aber nur den Smudger des Zweiges aufzurufen, in dem sich der .gitignore befindet, sodass das Kennwort von sich selbst wiederhergestellt wird alle sensiblen informationen zu github bleiben bereinigt, das ist nett. ich könnte darauf eingehen, wenn jemand interessiert ist.)

Fragen zu dieser Methode & Alternativen

Ich habe das getestet und es funktioniert. Aber..

ibt es einen besseren Weg, dies zu tu using git? Ich könnte hinzufügen, dass es keine Option ist, nur die Dateien mit den vertraulichen Informationen zu ignorieren und Änderungen beim Zusammenführen zu ignorieren, da ich Änderungen an diesen Dateien unter Beibehaltung bestimmter Konfigurationswerte übernehmen möchte . Deshalb möchte ich nicht einfach @ verwendgit update-index --assume-unchanged FILENAME, um zukünftige lokale Änderungen an den gesamten Dateien dauerhaft zu ignorieren.

Vielen Dank

Antworten auf die Frage(0)

Ihre Antwort auf die Frage