2010-04-19 14 views
117

Come copiare tutti i file in una directory da un altro ramo? Posso elencare tutti i file in quella directory facendoGit: copia tutti i file in una directory da un altro ramo

git ls-tree master:dirname 

Posso quindi copiare tutti i file singolarmente facendo

git checkout master -- dirname/filename 

Tuttavia, utilizzando i caratteri jolly è stato fino ad ora un totale sicuro. Questo non fa nulla:

git checkout master -- dirname/*.png 

Anche Credo di poter utilizzare uno script bash per fare questo, ci deve essere un modo più semplice, giusto?

risposta

167

Come non si sta cercando di spostare i file in giro per l'albero, si dovrebbe essere in grado di checkout solo la directory:

git checkout master -- dirname 
+0

E se volessi conservare i messaggi di commit per i file copiati? – totels

+2

@totels, in senso stretto non ci sono messaggi di commit associati ai file; il messaggio di commit è associato all'oggetto commit stesso. Questo è quello che sto cercando di indovinare: 'git checkout master - dirname; git aggiungi dirname; git commit -c $ COMMIT_SHA1 --reset-author; 'dove' $ COMMIT_SHA1' potrebbe essere come 'branch_a' e sarebbe l'oggetto commit che ha il messaggio di commit desiderato. Non so a priori come determinare in modo programmatico il commit con la modifica più recente a 'dirname' –

+1

Questo ha un effetto collaterale molto strano. Copia 'dirname' su, ma copia anche tutti i file che si trovano nel file' .gitignore' del ramo 'master'. Qualche idea del perché? – Milimetric

12

Se non ci sono spazi nei percorsi, e sei interessato, come ho era, solo nei file di estensione specifica, è possibile utilizzare

git checkout otherBranch -- $(git ls-tree --name-only -r otherBranch | egrep '*.java') 
+2

È un peccato che Git non supporti direttamente questa funzione. Esattamente come l'OP, avrei pensato che sarebbe stato qualcosa come 'git checkout master - * .c' –

Problemi correlati