Ich habe ein Repository für eine App, an der ich gerade arbeite, die eine Konfigurationsdatei enthält. Derzeit verteile ich mit einer Erweiterung .dist
und lasse den Benutzer die Datei umbenennen, bevor er sie bearbeitet.
Das ist gut und schön, und die tatsächliche Konfiguration wird ignoriert.
%Vor% Es wäre jedoch süß , wenn ich diese Konfigurationsdatei einfach unter ihrem echten Namen und fertig zum Editieren verteilen könnte, während sie ignoriert wird, so dass eine neu geklonte Kopie des Repositorys sie hat eine "funktionale" Verteilung, und sie wird nicht überschrieben, verfälscht oder auf andere Weise belästigt, und so müssen sich die Benutzer nicht darum sorgen, ihre super-geheimen Konfigurationsdetails per Webbrowser an die Interwebs zu übertragen oder zu veröffentlichen unbeabsichtigt git commit -a -m 'hurrrr derp! oopsies!' && git push
Gibt es eine Möglichkeit, dies zu tun? Von git um eine einzelne Originalversion der Datei zu erhalten, die geklont wird, wird danach ignoriert?
Ich bin sicher, dass das schon einmal gefragt wurde, aber für mein Leben ist mein Google-Fu gescheitert. Leg die Schule auf tief, SO.
Sie können auch versionieren und verteilen:
.gitattributes
files deklarieren ein Filtertreiber (nur für 'config.dist') config
-Datei) generiert Nun, das ist etwas verbiegend, worum es bei einem Filtertreiber geht (es geht darum, den Inhalt einer Datei zu ändern, unabhängig von seinem" state ", dh seinem vollständigen Pfad und Namen ). Aber es kann funktionieren.
Das .gitattributes
würde enthalten:
Sie können Ihr Smudgeskript (das während des Checkout-Schritts beim Erstellen / Aktualisieren des Arbeitsverzeichnisses angewendet wird) wie folgt registrieren:
%Vor%Ich würde wahrscheinlich ein "install" -Skript hinzufügen, das 'config.dist' in 'config' kopiert hat.
Ich glaube nicht, dass es eine Möglichkeit gibt, eine Datei nicht zu ignorieren und zu ignorieren.
Das ist eine gute Frage, aber AFAIK gibt es keine git Lösung dafür.
Wenige Problemumgehungen:
config.dist
gelesen wird, wenn config
nicht vorhanden ist (z. B. PHPUnit verwendet diese Technik) Wie andere darauf hingewiesen haben, gibt es dafür in Git keine magische Lösung. Und soweit ich weiß, ist es bei anderen Versionskontrollsystemen gleich.
Hooks sind auch hier keine Lösung, wenn sie auf diese Weise funktionieren würden, wäre das eine ernsthafte Sicherheitsbedrohung - nur durch das Klonen eines Repos könnte ein böser Code in Ihrem Rechner ausgeführt werden.
Aber um Ihre App nutzen zu können, muss der Benutzer neben dem Klonen mit git noch mindestens eine weitere Aufgabe erledigen: die App ausführen.
Wenn das Ändern der Konfigurationsdatei nicht zum Ausführen der Anwendung erforderlich ist, dann sollte IMHO genug sein, wenn Ihr Programm if [ ! -e config ] ; then cp config.dist config ; fi
beim Start ausführt. Zusätzlich solltest du eine Warnung in config.dist
haben, die besagt, dass du diese Datei nicht modifizieren solltest, sondern stattdessen eine Kopie davon erstellen sollst.
Wenn die Änderung der Konfigurationsdatei erforderlich ist , kann das Starten des Programms ohne Konfigurationsdatei einen Installationsmodus starten, der den Benutzer auffordert, die erforderlichen Konfigurationsoptionen einzugeben und zu speichern.
Eine dritte Möglichkeit ist, dass Ihre App unfähig ist, die Konfigurationsdatei beim Start zu ändern (vielleicht sind es nur einige JavaScript + HTML-Dateien). In diesem Fall sehe ich keine andere Möglichkeit, als ein separates Build-Skript zu erstellen oder den Benutzer einfach manuell auszuführen.
Tags und Links git