Ho creato uno script semplice per migrare un repository SVN abbastanza grande. Invece di usare git svn clone
, sto usando git svn init
e git svn fetch
in modo da poter specificare la revisione e recuperarla in blocco. Più o meno, è qualcosa di simile:Come fare git-svn recuperare e mantenere la directory vuota?
while [ "$CURRENT_REVISION" -lt "$MAX_REVISION" ]; do
END_REVISION=$((CURRENT_REVISION + 100))
if [ "$END_REVISION" -ge "$MAX_REVISION" ]
then
END_REVISION=$MAX_REVISION
fi
git svn fetch -r "$CURRENT_REVISION":"$END_REVISION" --authors-file="$AUTHORS_FILE"
#increasing the current and end revision
CURRENT_REVISION=$END_REVISION
END_REVISION=$((CURRENT_REVISION + 100))
done
Tuttavia, ho capito che di default il comportamento del recupero/clone non manterrà le directory vuote. Quindi, potrei aver bisogno di controllare manualmente quelle directory vuote (* che sto cercando di evitare).
C'è un parametro --preserve-empty-dirs
nello git svn clone
ma non in git svn fetch
.
Esiste una soluzione alternativa per risolvere il problema?
UPDATE
Anche se non è menzionato nella documentazione ufficiale che siamo in grado di utilizzare la chiave di configurazione per l'recuperare, è in realtà funziona
C'è spiegazione dettagliata da @Vampire relative a questo domanda. Quindi semplificherò questo.
Dopo aver fatto il repository init, ho dovuto cambiare la configurazione del mio ramo remoto:
git config svn-remote.<remote name>.preserve-empty-dirs "true"
git config svn-remote.<remote name>.placeholder-filename ".gitkeep"
È possibile verificare la configurazione, cercando in /.git/config. Basta fare il recupero normale e la tua directory sarà preservata.
Lo usi per una conversione una tantum o vuoi usare git-svn per usare Git come frontend per il repository Subversion che sarà comunque la fonte canonica per il tuo codice? – Vampire
Sì, posso dire che è una conversione una tantum. – alfonzjanfrithz