2011-01-10 4 views
0

Ich habe eine komplexe Web-Projektvorlage, wo Dateien in drei Kategorien unterteilt werden können. Erstens, Einstellungen, die Dateien betreffen, die auf jedem Server eindeutig sein sollten, werden nicht häufig aktualisiert, aber es wäre schön, sie in der Versionskontrolle zu haben. Zweitens, Entwicklungsdateien, welche die tatsächlichen Dateien sind, die von den Entwicklern codiert wurden und die pro Projekt eindeutig sind und die Hauptdateien sind, die versionskontrolliert werden. Und schließlich, benutzergenerierte Inhalte, die meist Testdaten auf der Stage- und Entwicklungsumgebung sind, aber richtige Daten auf einem Live-Server und idealerweise auch versionskontrolliert sein sollten.Git: "Sub-Projekt" Differenzierung in einer Bühne, Live, Entwicklung Web-Umgebung

Im Stammordner jedes Projekts befindet sich eine Einstellungsdatei, die Teil der ersten Gruppe ist. Dann gibt es drei Ordner mit Entwicklungsdateien und schließlich einen Ordner mit Bildern für die Website sowie von Benutzern erstellte Dateien.

Was ich versucht habe:

ich nicht den gesamten Ordner verwenden kann, wie ich dann die gleichen User Generated Content auf lokalen Live und Bühne haben würde und die Einstellungen neu zu justieren hat Dateien jeweils Zeit dränge ich von Lokal zu Bühne und von Bühne zu Bühne.

Ich habe versucht, mit dem Master-Zweig für die Entwicklungsdateien, und einen separaten Zweig für Benutzer generierte Inhalte und Einstellungen Dateien, und dann drücken Sie den Master von lokalen zu Bühne usw. Aber wenn ich einen Checkout auf der Bühne löscht es die nicht verwandten Dateien.

Ich habe versucht, separate Zweige für die Entwicklung, benutzergenerierte Inhalte und Einstellungen zu machen, und dann nach Push-to-Bühne nur alles in Master zu verschmelzen. Das Problem tritt in diesem Fall auf dem lokalen Dev-Server auf, wo der Commit-Prozess leicht verworren wird: checkout dev; füge geänderte Dateien hinzu; commit dev; Kasse Master; merge dev ugc einstellungen. Ich bin auch besorgt, dass einige der UGC-Dateien in diesem Fall verloren gehen.

Die große Frage

Kann mir jemand eine neue Lösung oder etwas vorschlagen, den aktuellen Lösungen hinzuzufügen, um sie möglich zu machen? Leider kann ich keine separaten Ordner verwenden, da das verwendete Framework (ein privates) dies nicht erlaubt.

Antwort

0

Obwohl es eine wirklich schreckliche Art und Weise, die Dinge zu organisieren, können Sie verschachtelte Git-Repositories mit .gitignore Dateien verwenden, die alles ignorieren, die in einem bestimmten Repository gehören nicht:

.git/ 
.gitignore <---- ignoring everything except settings-file 
your_project 
    .git/ 
    .gitignore <---- ignoring settings-file, user content, and user-content/.git 
    dev-folder-1/ 
    dev-folder-2/ 
    settings-file 
    user-content/ 
    .git/ 
    .gitignore <-- ignoring everything except user content 

Das würden Sie effektiv erlauben haben 3 verschiedene "überlappende" Repositories, die verschiedene Teile der Dateistruktur verfolgen.

Aber wirklich, es wäre besser, nur einen Weg zu finden, um Ihre Dateien und/oder Versionskontrolle zu reorganisieren.

+0

Das funktioniert ganz gut, aber ich kann nicht die Einstellungen-Datei ignorieren richtig funktionieren. Ich habe versucht, eine Zeile mit einem * in, gefolgt von einer Zeile mit '!/Your_project/settings-file' in der .gitignore, aber es erlaubt mir nicht, die Einstellungsdatei ohne die Kraft hinzuzufügen. –

+0

Versuchen Sie es ohne den führenden Schrägstrich: '! Your_project/settings-file' – Amber

+0

(Auch im schlimmsten Fall können Sie es einfach beim ersten Mal erzwingen - sobald es hinzugefügt wird, wird Git es unabhängig vom' .gitignore' verfolgen .) – Amber

Verwandte Themen