Ignorierte Konfigurationsdatei hinzufügen, um Repo als Beispiel zu git

8

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.

%Vor%

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.

    
sleepynate 10.09.2010, 16:08
quelle

4 Antworten

2

Sie können auch versionieren und verteilen:

  • a .gitattributes files deklarieren ein Filtertreiber (nur für 'config.dist')
  • ein Smudgeskript, das diesen Inhalt erkennt und das finale (und private, wie in "nicht versionierte" 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:

%Vor%

Sie können Ihr Smudgeskript (das während des Checkout-Schritts beim Erstellen / Aktualisieren des Arbeitsverzeichnisses angewendet wird) wie folgt registrieren:

%Vor%     
VonC 17.09.2010, 06:23
quelle
6

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.

    
Jonathan Leffler 10.09.2010 16:28
quelle
4

Das ist eine gute Frage, aber AFAIK gibt es keine git Lösung dafür.

Wenige Problemumgehungen:

  • Konfigurieren Sie Ihre App so, dass config.dist gelesen wird, wenn config nicht vorhanden ist (z. B. PHPUnit verwendet diese Technik)
  • Verwenden Sie Build-Skript, um für Sie umzubenennen (z. B. Ant oder Phing)
  • benutze Git-Hooks, um die Konfigurationen umzubenennen
takeshin 10.09.2010 21:48
quelle
1

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.

Rene Saarsoo 16.09.2010 20:32
quelle

Tags und Links