2011-10-21 21 views
10

Sviluppo alcuni script per la gestione dei miei database bibtex e PDF.git push solo parte di un repository

Per comodità, gestisco sia il database che gli script nello stesso repository git (cosa che non voglio cambiare). Tuttavia, vorrei rendere disponibili i miei script (ad esempio su github) ma non il mio database o i miei pdf. Comunque, voglio avere la stessa cronologia di commit sia su github che localmente per gli script.

Ho pensato di avere un ramo github e di spingere solo questo ramo. Ma come aggiornerei il ramo con i commit fatti agli script nel ramo principale?

Ci sono altri modi per farlo?

risposta

1

Ma come aggiornare il ramo con i commit eseguiti sugli script nel ramo principale?

Cherry-pick i commit relativi agli script dal master nel ramo pubblico. In alternativa, modifica gli script nel proprio ramo, quindi unisci le modifiche in master quando ne hai bisogno.

+0

ma il cherry-picking non ottiene solo le modifiche apportate da questo commit? Supponiamo che abbia fatto diversi commit in master, alcuni relativi al db alcuni agli script, dovrei assicurarmi di scegliere tutti quelli relativi agli script, giusto (non solo l'ultimo)? Immagino che il ramo separato con l'unione sia l'alternativa migliore ... – thias

+0

@thias: ecco perché raccomanderei di sviluppare gli script nel ramo pubblico invece di 'master'. O utilizzando repository separati ... –

+0

ok, io uso un ramo separato ... – thias

9

È possibile utilizzare git subtree per suddividere la directory degli script nel proprio ramo (con cronologia completa per tale sottodirectory) che è possibile quindi inviare a GitHub. È possibile eseguire nuovamente git subtree per mantenere aggiornato il repository diviso.

per fare un esempio, una volta installato git subtree si può fare:

git subtree split --prefix script-directory --branch just-scripts 
git push github-scripts just-scripts:master 

... supponendo che gli script sono in script-directory, e github-scripts è un telecomando che punta alla URL del vostro GitHub repository destinato solo agli script.

+0

Che sembra interessante! Ma come aggiornerei il nuovo ramo? O dovrei semplicemente cancellarlo dopo aver premuto ed eseguire nuovamente i comandi per la prossima spinta? – thias

+0

È possibile eseguire nuovamente lo stesso comando senza eliminare il ramo e dovrebbe aggiornarlo (credo). –

+0

@Mark, mi chiedo, è possibile farlo in una riga - qualcosa come git push --split subDir - per semplicità. – shabunc

1

Ho seguito il consiglio dato da @larsmans e si è rivelato molto conveniente. Qui ci sono alcuni dettagli per la procedura:


## getting the scripts into a separate branch for github 

# create a root branch 'scripts' 
git symbolic-ref HEAD refs/heads/scripts 
rm .git/index 
git clean -fdx # WARNING: all non-commited files, checked in or not, are lost! 
git checkout master script1.py script2.py 
git commit -a -m "got the original scripts" 
git checkout master 
git merge scripts 

# push the scripts branch to github 
$ git remote add github [email protected]:username/repo.git 
$ git push github scripts 

Ora posso sviluppare in script-ramo e si fondono con la branch master ogni volta che ne ho bisogno per la mia base di dati.

Un avvertimento: la prima unione dopo l'aggiunta di un nuovo file che si trova in entrambi i rami provocherà un conflitto (perché il ramo di script è un ramo di radice). Quindi è meglio prendere gli script dal ramo principale e commetterli immediatamente.

Problemi correlati