2009-05-11 9 views
4

Ich habe ein Repository, das Inhalt & Quelldateien enthält. Entwickler sollten nur mit Quelldateien arbeiten. Um Platz zu sparen, sollten Entwickler die Inhaltsdateien (die in GB sind) nicht zu ihrem lokalen Repo klonen. Quelldateien sind im Projekt nicht als Untermodule vorhanden, sondern befinden sich am selben Speicherort wie der Inhalt.Verschmelzen nur modifizierte Dateien mit Git

Mein Ansatz wie das ist - ich Quelle von Meister einen Zweig erstellt und gelöscht dann die Inhaltsdateien aus diesem Zweig. Und ich habe denselben Zweig zum Klonen für die Entwickler veröffentlicht.

Als ich die Änderungen aus der Branche Quelle zurück Meister am verschmelzenden werden die Inhaltsdateien in Meister gelöscht zu werden. Wie man es einschränkt? Und wenn es nicht möglich ist, gibt es einen Weg, meine Anforderung zu erfüllen, einen separaten Zweig/Klon zu haben, der nur gefilterte Dateien hat, d.h. die Quelldateien darin?

Antwort

1

Verwenden git-merge die beiden Zweige zu fusionieren und dann entfernen git-revert der Commit, dass der Inhalt von Dateien gelöscht.

% git checkout Master 
% git merge Source 
% git revert <content-removal-commit-id> 

Oder man könnte es anders tun um, und entfernen Sie den Inhalt Entfernungs verpflichten, bevor Sie in Meister verschmelzen. Es ist ein wenig komplexer, aber es könnte deine Meistergeschichte etwas sauberer halten.

% git checkout Source 
% git branch SourceMerge 
% git checkout SourceMerge 
% git revert <content-removal-commit-id> 
% git checkout Master 
% git merge SourceMerge 
2

Sie sollten die Dateien überhaupt nicht aus dem Zweig Source entfernt haben. Wenn Source und Master nur Zweige im selben Repository sind, haben Ihre Entwickler den Inhalt trotzdem; Es schadet nicht, dass es herumliegt.

+0

Die Art der Dateien sind FLV, WMV, PDF, doc, welche Größen mehr als 200 GB. Es wird einen immensen Aufwand für das Netzwerk beim Remote-Klonen mit sich bringen, da es sich um ein standortübergreifendes Entwicklungsteam handelt. Und ich denke, dass es ein Leistungsengpass für Git sein wird, solch eine große Menge von Dateien zu scannen, um Änderungen in einigen Quelldateien zu erkennen. – kaychaks

+0

"Sie denken"? Du bist also in Aktion gegangen, ohne vorher zu prüfen, ob das wirklich ein Problem ist? Duh. 1) Mein Punkt steht immer noch: Wenn Source und Master Zweige im _same_ Repository sind, werden sie trotzdem auf die Maschinen der Entwickler geklont. 2) Wie oft planen Sie das Klonen kompletter Repositories? 3) Git verwendet zuerst Dateimodifikationszeiten; nur wenn diese sich unterscheiden, wird der Inhalt überprüft. Kein Verlust hier. 4) Lassen Sie Ihr Remote-Team das Repository einmal klonen, dann lassen Sie die Leute dort das Repository klonen. Einfach wie Kuchen. – Bombe

5

Die offensichtliche Antwort ist, dass Sie separate Quellen- und Inhaltsrepositorys haben sollten. Oder lass den Inhalt einfach stehen.

+0

Das Anwendungsframework erlaubt es nicht, Quelldateien vom Inhalt zu trennen. Kann ich Git verwenden, um separate Repositorys mit Dateimustern (z. B. .java, .groovy usw. für Quelldateien und Rest für den Inhalt) aus derselben Quelle zu erstellen? – kaychaks

+0

+1 Einverstanden.In meinem eigenen CMS-Projekt habe ich ein Root-Projekt, das den Code enthält, ein Testprojekt, das kleine Beispieldateien zum Testen enthält, und ein Content-Projekt, das die Hauptsache ist und nur Konfiguration und Inhalt enthält. –

+1

@kaychaks: Holen Sie sich die Quelle für das App-Framework und beheben Sie den Fehler. Wenn Sie die Quelle nicht finden können, reichen Sie einen Fehlerbericht ein. –

0

Sind Sie sicher, dass Sie diese Medien-/DOC-Dateien in Ihr Repo einbinden möchten? Möchten Sie Änderungen an einer 200-GB-Medienbibliothek verfolgen?

Wenn Sie ihre Eigentümerreferenz in eine .gitignore-Datei einfügen, wenn Sie sich in Ihrem Quellenzweig befinden, ignoriert git diese Dateien und wird sie nicht berühren/löschen.

http://git-scm.com/docs/gitignore

+0

Es ignoriert sie nur, wenn sie nicht verfolgt werden - was ich denke, dass sie nicht sind. – Bombe