2012-07-27 7 views
13

Cercando di migrazione di una grande ma svn lineare repository git. Il repository svn non ha il layout standard (tronco, rami, i tag) ... solo una directory con il tronco.migrazione git-svn fatale: senza uno SHA1 update-ref ref/testine/arbitri anagrafici/telecomandi/tronco valida: comando restituito l'errore: 128

Ubuntu 12.4 LTS, git 1.7.9.5.

$ git svn clone https://coawstmodel.sourcerepo.com/coawstmodel/COAWST --authors-file=../users.txt COAWST 

... 

    D WPS/metgrid/storage_module.F 
    D WPS/metgrid/process_domain_module.F 
W: -empty_dir: WPS/metgrid/gridinfo_module.F 
W: -empty_dir: WPS/metgrid/input_module.F 
W: -empty_dir: WPS/metgrid/interp_option_module.F 
W: -empty_dir: WPS/metgrid/module_date_pack.F 
W: -empty_dir: WPS/metgrid/process_domain_module.F 
W: -empty_dir: WPS/metgrid/storage_module.F 
r635 = c19181c9718e701788b540ed0cc559e4fbddf413 (refs/remotes/git-svn) 
    M Tools/Docs/COAWST_User_Manual.doc 
r636 = 1b7849c3e5a20856c9ddb909a5f53ddf8501ad33 (refs/remotes/git-svn) 
Auto packing the repository for optimum performance. You may also 
run "git gc" manually. See "git help gc" for more information. 
Counting objects: 14143, done. 
Delta compression using up to 8 threads. 
Compressing objects: 100% (14039/14039), done. 
Writing objects: 100% (14143/14143), done. 
Total 14143 (delta 8350), reused 0 (delta 0) 
fatal: refs/remotes/trunk: not a valid SHA1 
update-ref refs/heads/master refs/remotes/trunk: command returned error: 128 

Ho provato varianti con combinazioni di -s, Tronco -t, COAWST -t, --preserve-empty-dirs (che desidero fare), --no-meta-dati (per Pro Git) ... sempre lo stesso errore finale.

Grazie per eventuali suggerimenti!

+1

Una directory con il trunk è ancora il layout standard. Hai accesso al server con repository SVN? –

+0

Sì. Per chiarire, non c'è nulla nel repository svn chiamato "trunk" –

+0

Ma c'è una directory che riproduce il ruolo di trunk (potrebbe essere chiamato "Trunk" o "Project" o COASWST o altro, voglio dire: vorresti che Git si impegna a contiene solo il contenuto di quella directory o anche quella directory) o tutti i dati sono concentrati nella radice del repository SVN? E un'altra domanda: è vero che il tuo repository SVN contiene 636 revisioni (è l'ultima revisione che posso vedere nell'output)? –

risposta

9

Penso che si esegue il comando corretto. In alternativa è possibile eseguire

$ git svn clone https://coawstmodel.sourcerepo.com/coawstmodel --trunk=COAWST --authors-file=../users.txt COAWST 

git-svn quasi finisce il suo lavoro in ogni caso. L'unica cosa che cerca di fare è impostare "master" in modo che punti al bagagliaio. A causa di alcuni bug si cerca di impostare il valore di sbagliato, ma è possibile eseguire manualmente con

$ git update-ref refs/heads/master refs/remotes/git-svn 

Se si avrà ancora problemi che si possono provare a convertire il repository con SubGit in 3 passi:

$ subgit configure path/to/svn/repository 
#edit path/to/svn/repository/conf/subgit.conf to set trunk = COAWST:refs/heads/master and authorsFile = path/to/users.txt 
$ subgit install path/to/svn/repository 

Il repository convertito sarà a path/to/svn/repository/conf/.git

+1

Ho avuto lo stesso problema e fare una importazione in una sola volta con SubGit ha funzionato per me: http://subgit.com/book-remote/index.html#import –

+0

Ho avuto lo stesso errore, ho eseguito il comando con successo. Ma io non so davvero un modo chiaro come controllare se ha funzionato? – lvthillo

1

Ho avuto lo stesso problema oggi.

Il problema è probabilmente che il repository SVN non ha una directory tronco. Le directory trunk, tag e branches standard sembrano essere facoltative in SVN. Ma git-svn deve saperlo quando si esegue la migrazione.

È anche possibile che alcune delle directory siano lì ma denominate in modo diverso. (Per esempio tronco potrebbe essere denominato "progetto" al posto di "tronco", rami potrebbero essere chiamati "rami" come al solito e tag potrebbero mancare. Or "tronco" potrebbe essere denominato "Trunk".)

  • Se non ci sono nessuna di queste directory standard nel repository SVN e tutto è appena inserito nella root del repository, la soluzione consiste semplicemente nel non provare a clonare le directory svn standard. Basta clonare la radice.

  • Se esistono (o alcuni di essi lo fanno), ma con nomi diversi, git-svn deve essere detto su questi nomi.

Ho usato Tortoise Git migrare da SVN a Git. In TortoiseGit, viene eseguito clonando dal repository svn (sì!) E selezionando la casella di controllo "Da repository SVN".

  • Se non ci sono tronco, tag o filiali directory nella repo SVN, semplicemente deselezionare la "tronco", "tag" e la sezione del clone "rami" caselle di controllo nella "da SVN Repository" dialogo.

  • Se le directory standard sono presenti, ma sono denominate in modo diverso da normale, tenerle controllate ma scrivere i nomi utilizzati nella casella di testo accanto a loro.

    (dalla linea di comando questo può essere fatto con la -T, -t e switch -b. Vedi http://www.sailmaker.co.uk/blog/2013/05/05/migrating-from-svn-to-git-preserving-branches-and-tags-3/ sotto "la layout SVN non standard").

(Quelli erano i due casi che ho incontrato -.. Possono esistere casi più complessi ho avuto diversi repository SVN con né tronco, tag o filiali le directory e deselezionando questi 3 caselle di controllo ha reso il lavoro ho avuto anche un caso in cui la dir del tronco era chiamata "project" invece di "trunk", ma la dir diramazioni veniva denominata normalmente e non c'erano le tag dir. Deselezionando la casella di controllo dei tag e inserendo il nome della directory principale faceva funzionare quel caso.)

8

Ogni volta che mi è successo, Git semplicemente non è riuscito a recuperare un commit da trunk in Subversion:

fatal: refs/remotes/trunk: not a valid SHA1 

Motivi:

  • Non è stato specificato il layout Subversion quando non era standard (tronco-tags-rami). In particolare per l'errore - non hai /trunk.
  • Non è stato eseguito il recupero da una revisione abbastanza vecchia da includere almeno un commit nel trunk (ad esempio, utilizzando l'opzione -r).
  • Combinazione di quanto sopra.
+2

+1: ho provato il recupero con l'opzione '-r' e l'errore è successo. Quando ho recuperato tutte le revisioni, il problema è andato via. – pesche