2015-09-16 10 views
8

Il progetto corrente su cui sto lavorando è limitato a un repository git. mia directory di lavoro corrente simile a questa:Git: Come inviare una sottodirectory a un ramo separato dello stesso repository

dist/ 
    *distribution files 

src/ 
    *src files 

Abbiamo un server Azure configurato per distribuire automaticamente nulla spinto al 'distribuire' ramo della nostra repo. Quindi l'obiettivo è quello di spingere i file src a master e il contenuto della cartella dist al ramo 'deploy'.

Quello che ho fatto fino ad ora è la diramazione del master, l'eliminazione della cartella src e lo spostamento del contenuto della cartella dist alla root prima di spingere per la distribuzione.

So che idealmente avremmo repository separati, ma al momento non è un'opzione. C'è un modo più semplice per farlo?

risposta

8

Il comando git-subtree funziona alla grande per questo. Dal tuo master filiale fare:

git subtree split --branch deploy --prefix dist/ 

Basta eseguire quel comando ogni volta che si desidera aggiornare il ramo deploy. Unirà ogni commit nella sottodirectory dist (del ramo corrente - presumibilmente master) nella radice del ramo deploy e manterrà una cronologia completa del commit. Si noti che solo le modifiche nella sottodirectory dist verranno unite. Se un commit include modifiche sia al sottodir dist che ad altri file nel repository, vengono incluse solo le modifiche nel sottodir dist.

La parte difficile è l'installazione. A quanto ho capito, il comando è incluso con git 1.7.11 e versioni successive. Tuttavia, è nella sottostruttura "contrib", quindi non è installata di default. Cerca "git-subtree" nel gestore di pacchetti del tuo sistema e installa il pacchetto se esiste. In caso contrario, o se si utilizza una versione precedente di git, il modo più semplice che ho trovato è installare git-subtree dall'autore repo.

git clone https://github.com/apenwarr/git-subtree.git 
cd git-subtree/ 
make install 

Una volta ci si è installato, è possibile fare diverse cose cool con esso, come spiegato nella docs.

+0

Ha funzionato perfettamente. Grazie compagno. – Lawren

+2

C'è un modo per fare la stessa cosa, ma quando i file di build o 'dist' sono in' .gitignore' e tenuti fuori dal master? Per chiarire, voglio solo i file dist nel ramo deploy e voglio solo i file src nel master. – Lawren

Problemi correlati