Come git-svn clone ultimi n revisioni da un repository Subversion?
-
09-09-2019 - |
Domanda
problema
Come si crea una copia con git-svn da un repository Subversion, ad esempio, come si fa a tirare solo le ultime tre revisioni?
Il comando git clone
può ottenere gli ultimi n revisioni da un repository Git, se si utilizza l'opzione --depth
, cioè si ottiene una copia del repository. Esempio:
git clone --depth 3 git://some/repo myshallowcopyrepo
C'è un'opzione simile per git-svn?
Le mie scoperte finora
Finora ho trovato solo l'opzione -rN
dove N
è la revisione di tirare. Esempio:
git svn clone -rN svn://some/repo
Secondo la documentazione v'è la possibilità di utilizzare -r$REVNUMBER:HEAD
. Ho provato quanto segue per ottenere gli ultimi 3 revisioni che hanno restituito un messaggio di errore.
$ git svn clone --prefix=svn/ -s -rHEAD~3:HEAD http://some/svn/repo .
revision argument: HEAD~3:HEAD not understood by git-svn
Così ho sostituito HEAD~3
con il numero effettivo della terza, ma ultima revisione 534. Che ha funzionato, ma che mi richiede prima capire il numero di revisione del terzo, ma dell'ultimo commit.
$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .
Documentazione
Soluzione
Hai già scoperto il modo più semplice per specificare un clone superficiale in Git-SVN, specificando il numero di revisione SVN che si desidera avviare il clone a (-r$REV:HEAD
).
Ad esempio: git svn clone -s -r1450:HEAD some/svn/repo
struttura di dati di Git è basata su puntatori in un grafo orientato aciclico (DAG), che lo rende banale tornare a piedi n
impegna. Ma in SVN (e quindi in Git-SVN) si dovrà trovare il numero di revisione da soli.
Altri suggerimenti
mi ritrovo con la seguente spesso per ottenere un numero limitato di revisioni fuori del nostro enorme albero di eversione (stiamo raggiungendo presto svn revisione 35000).
# checkout a specific revision
git svn clone -r N svn://some/repo/branch/some-branch
# enter it and get all commits since revision 'N'
cd some-branch
git svn rebase
E un buon modo per scoprire dove un ramo iniziare è quello di fare un svn log
e trovare il primo sul ramo (l'ultimo elencato quando si fa):
svn log --stop-on-copy svn://some/repo/branch/some-branch
Finora non ho davvero trovato la seccatura vale la pena nel monitoraggio di tutte le filiali. Ci vuole troppo tempo per clonare e svn e git non funzionano insieme come bene come vorrei. Io tendo a creare file di patch e applicarle sul clone git di un altro ramo svn.
... 7 anni più tardi, nel deserto, a colpi di Tumbleweed ...
Non ero soddisfatto della risposta accettata così ho creato alcuni script per fare questo per voi disponibili su Github . Questi dovrebbero aiutare tutti coloro che vogliono usare git svn clone
ma non vuole clonare l'intero repository e non vuole andare a caccia di una revisione specifica per clonare da nel mezzo della storia (forse si sta clonando un mazzo di pronti contro termine) . Qui possiamo solo clonare gli ultimi N revisioni:
Usa git svn clone
per clonare le 50 revisioni
# -u The SVN URL to clone
# -l The limit of revisions
# -o The output directory
./git-svn-cloneback.sh -u https://server/project/trunk -l 50 -o myproj --authors-file=svn-authors.txt
Trova la precedente revisione N da un repo SVN
# -u The SVN URL to clone
# -l The limit of revisions
./svn-lookback.sh -u https://server/project/trunk -l 5