Ho un repository git che contiene altri repository git. Ci sono comandi che spingono e/o tirano in modo ricorsivo non solo per il meta-repository ma per i sotto-repository?Git ricorsivo push/pull?
risposta
se si parla di sottomoduli, vedere la risposta cupcakes.
se si sta parlando di una certa gerarchia di cartelle contenente repo git, potete verifica clustergit
, uno strumento ho programmato: https://github.com/mnagel/clustergit
Grazie, ci proverò. Supponendo che i telecomandi siano stati precedentemente impostati, dovrei semplicemente eseguire "clustergit -p" nella directory in alto per eseguire ricorsivamente? –
@ DavidY.Stephenson sì, clustergit scriverà ricorsivamente una directory (default: '.') per le directory' .git' per decidere dove risiedono i repository git. quindi esegue 'git status' su questi. se lo stato è pulito e '-p' è specificato, farà un' git pull' che avrà successo solo se è stato impostato un telecomando, altrimenti apparirà un avviso (ma clustergit continuerà con altri repository). – mnagel
Potrebbe darmi un comando di esempio per dire, spingere in modo ricorsivo al master di origine?Sto avendo qualche problema a metterlo insieme dalla documentazione. –
Non proprio git pull
, ma quasi:
git fetch --recurse-submodules
Da the Git docs:
--recurse-submodules[=yes|on-demand|no]
Questa opzione controlla se e in quali devono essere recuperati anche condizioni nuove impegna di sottomoduli popolate. Può essere usato come opzione booleana per disabilitare completamente la ricorsione quando è impostato su no o per ricorrere incondizionatamente a tutti i sottomoduli popolati quando è impostato su sì, che è il valore predefinito quando questa opzione viene utilizzata senza alcun valore. Usa on-demand per recurse solo in un sottomodulo popolato quando il superproject recupera un commit che aggiorna il riferimento del sottomodulo a un commit che non è già nel clone del sottomodulo locale.
Non mi riferisco (consapevolmente) ai sottomoduli. Ho un repository che contiene altri repository. Tutti questi repository dove sono stati inizializzati da me. Devo trasformarli in qualche modo in sottomoduli? –
mi trovo nella stessa situazione ogni volta che voglio aggiornare i miei repository LLVM/Clang e con un po 'di aiuto bash posso 'git pull' ognuno di loro in questo modo:
$> for dir in $(find . -name ".git"); do cd ${dir%/*}; git pull ; cd -; done
questo sarà 'git pull' tutti i pronti contro termine git trovati sotto la directory corrente, e il lavoro probabilmente non se sono repository nudi .
Ho appena scritto uno script da eseguire in modo ricorsivo su più repository git. È possibile prendere da qui:
https://github.com/DariuszOstolski/rgit
L'idea è esattamente lo stesso come in clustergit ma la loro attuazione è diversa.
Avevo bisogno di questo tempo fa e ho reso disponibile un cli tramite npm. https://github.com/kenglxn/gitr/blob/master/README.md
Basta eseguire "npm install -g gitr" e quindi è possibile eseguire ricorsivamente qualsiasi comando git utilizzando gitr.
Possibile duplicato di [Git: modo più semplice per estrarre tutti i sottomoduli] (http://stackoverflow.com/questions/1030169/git-easy-way-pull-latest-of-all-submodules). –