Ho un progetto sotto git
. Un giorno ho spostato tutti i file di progetto dalla directory corrente a foo/bar/
nell'ambito del progetto. L'ho fatto usando git mv
. Poi ho aggiunto altri file e ho apportato alcune modifiche ai file già esistenti.Come posso riscrivere la cronologia in modo che tutti i file, ad eccezione di quelli che ho già spostato, si trovino in una sottodirectory?
Come risultato, ora quando guardo la cronologia di foo/bar/file.c
, posso vedere solo le modifiche che ho fatto dopo aver spostato il file.
Ho provato a risolvere questo problema in vari modi (filter-branch
con filtro sottodirectory, ecc.), Ma nulla ha aiutato, quindi sono abbastanza impilati qui. Apprezzerò qualsiasi aiuto tu possa darmi. Grazie!
@Alexander: Si consiglia di provare a inserire l'one-liner (tutto nelle virgolette singole) in uno script effettivo, con una riga di shebang bash. Penso che 'filter-branch' stia probabilmente cercando di eseguirlo in' sh', non 'bash'. – Cascabel
Ho fatto dei progressi. Sembra che le parentesi doppie in istruzione if stessero causando questo errore. Le singole parentesi funzionano meglio, ma non funziona comunque. Il problema è che prima di spostare tutto su foo/bar/avevo una directory chiamata foo con qualche contenuto nel progetto. Così ora si lamenta "non è possibile spostare' foo 'in una sottodirectory di se stesso, 'foo/bar/foo'". –
@Alexander: dovrai solo adattare lo script di conseguenza. Qualcosa come: 'if [[! -e foo/bar]]; quindi mkdir -p foo/bar; git ls-tree --name-only $ GIT_COMMIT | grep -v^pippo $ | xargs -I file mv file foo/bar; fi' Questo usa grep per filtrare 'foo' dall'elenco di file da spostare. Nota che suppongo anche che la sottodirectory 'bar' non sia mai esistita finché non hai spostato tutto sotto di essa. Se questo non è il caso, dovrai anche tenerne conto nello script. –