2017-06-23 3 views
0

Ich verwende meinen master Zweig, um 'Material' Dateien zu halten, die in untergeordneten Zweigen für verschiedene Projekte verwendet werden. Sagen wir, ich arbeite für eine Firma, die sowohl Waggons als auch Abfahrtsskier herstellt. Mein Masterzweig würde alle Dateien enthalten, die als Teile für diese Produkte verwendet werden. Jedes Produkt ist von master (wagon Zweig, ski Zweig, etc) verzweigt. Die Teile, die nicht für jedes Projekt benötigt werden, werden dann mit git rm entfernt (obwohl Ski auf einem Wagen tun klingen wie Spaß).Wie kann ich Git sagen, eine Datei komplett zu vergessen?

Das Problem ist, wenn ich meine master Zweig verschmelzen (Material ändert sich vielleicht) in ein Projekt Zweig (Wagen zum Beispiel) git denkt, dass ich wirklich die Änderungen an den Dateien wollen, die ich git rm habe ‚d in Vergessenheit, und fügt sie zurück für mich - Version Meister der Skier links in Baum wie Code unten gezeigt.

Wie kann ich git-wirklich und wirklich vergessen über eine Datei ich ihm gesagt habe Tracking zu vergessen und zu stoppen?


einige Teile master hinzufügen und begehen:

$ pwd 
/tmp/parts 
$ git init 
Initialized empty Git repository in /tmp/parts/.git/ 
$ echo rubber > wheels 
$ echo steel > skis 
$ echo vinyl > seat 
$ echo wood > sides 
$ ls 
seat sides skis wheels 
$ 
$ git add . 
$ git commit -a -m 'initial parts' 
[master (root-commit) ca7610e] initial parts 
4 files changed, 4 insertions(+) 
create mode 100644 seat 
create mode 100644 sides 
create mode 100644 skis 
create mode 100644 wheels 

erstellen wagon Projekt Zweig und entfernen Sie die Teile, die wir nicht brauchen, auf einem Wagen:

$ git checkout -b wagon 
Switched to a new branch 'wagon' 
$ ls 
seat sides skis wheels 
$ git rm skis 
rm 'skis' 
$ git rm seat 
rm 'seat' 
$ git commit -a -m 'initial wagon design' 
[wagon 384b246] initial wagon design 
2 files changed, 2 deletions(-) 
delete mode 100644 seat 
delete mode 100644 skis 

Das Engineering Das Team hat beschlossen, einige Materialien zu ändern. Commit jene Änderungen master so dass sie für alle unsere Projekte zur Verfügung:

$ git checkout master 
Switched to branch 'master' 
$ ls 
seat sides skis wheels 
$ 
$ echo 'titanium' > skis 
$ echo 'metal' > sides 
$ git commit -a -m 'design requirements call for stronger sides and skis'  
[master a8bf4c4] design requirements call for stronger sides and skis 
2 files changed, 2 insertions(+), 2 deletions(-) 

Wir im wagon Projekt einige der Änderungen müssen so verschmelzen master sie zu bekommen, aber jetzt git beschwert:

$ git checkout wagon 
Switched to branch 'wagon' 
$ git merge master 
CONFLICT (modify/delete): skis deleted in HEAD and modified in master. Version master of skis left in tree. 
Automatic merge failed; fix conflicts and then commit the result. 

Antwort

0

Bisher ist die praktikabelste Lösung, die ich gefunden habe, ist Meister in den aktuellen Zweig zu fusionieren und dann --porcelain verwenden, um eine Liste von Deleted Updated Dateien auszudrucken und xargs dann, sie entfernen rufen:

git status --porcelain | awk '{if ($1=="DU") print $2}'

Es ist nicht schön. Es wäre schön, dies in einen pre-merge Git Haken zu stecken, aber das scheint nicht zu existieren.

+2

Daumen hoch für komisch den Punkt fehlt.Sie missbrauchen 'git' und müssen wirklich darüber nachdenken, ein besseres Paket für das zu finden, was Sie tun. –

+0

Kann sein, aber wenn Sie eine andere Lösung haben, um dies zu erreichen, bitte posten Sie es. – wufoo

4

Ich denke, dass Sie git nicht als Quellcodeverwaltungssystem, sondern eher als Lösungsmanager verwenden. Denken Sie darüber nach, warum sollten Sie Dateien unter Quellcodeverwaltung stellen, wenn Sie einen anderen Teil davon entfernen möchten, wenn Sie einen neuen Zweig auschecken?

Feature-Verzweigungen sind Verzweigungen auf dem Entwicklungspfad, die mit dem Master zusammengeführt werden sollen und zusätzliche Funktionalität für das gesamte Projekt bereitstellen.

Sie können ein Repo für jedes Material erstellen und anschließend einen Projektbuild einrichten, um die erforderlichen Materialien aus den Materialrepositionen abzurufen.

Verwandte Themen