Domanda

Sto usando del ComponentSoftware CS-RCS base per molti anni ora per gestire i miei vari progetti di singoli sviluppatori. Ha funzionato molto bene per me, ma ora voglio migrare a un moderno sistema di revisione di controllo, e dopo aver studiato le mie opzioni ho deciso Mercurial.

Il problema è che ho sempre usato un repository centrale per CS-RCS, e mi piacerebbe ora piace usare i singoli repository Mercurial per i singoli progetti, mantenendo la storia dal mio repository RCS.

Dopo un po 'Googling ho concluso in profondità che l'unico modo per farlo è quello di convertire il mio repository RCS ai singoli repository CVS, quindi convertire quelli a Mercurial. Questi due siti sono stati probabilmente il più utile:

In linea con l'idea di Jeff Atwood di chiedere e rispondere alla mia domanda, ho intenzione di rispondere a questa per chiunque altro bloccato in questa situazione, e nel caso in cui devo trovarlo nuovamente in futuro. Come si vedrà, anche se ho trovato una soluzione, è goffo e ha almeno un problema significativo. Se qualcun altro ha qualche metodo migliore che avrei certamente come sentire parlare di esso.

È stato utile?

Soluzione

Ecco il metodo che mi è venuta, verruche e tutti. E 'un po 'di carico coltà', dal momento che in fondo so niente di CVS e non molto (ancora) su Mercurial:

Ho una macchina virtuale Windows XP che posso prendere istantanee di, così ho fatto e poi installato CVSNT e la versione della riga di comando di Windows di Mercurial (io uso TortoiseHg sulla mia macchina principale). Ho fatto questo in una VM così ho potuto facilmente sbarazzarsi di CVSNT, Mercurial, e qualsiasi altra cosa ho dovuto creare mentre si fa questa migrazione di una volta. Sì, probabilmente non c'era bisogno di fare questo, ma il VM era già disponibile e ho già avuto abbastanza bit dispari di applicazioni lasciati da installare / disinstallare cicli nel corso degli anni. : -)

Per quanto ho potuto capire, CVSNT era l'unico programma disponibile che potrebbe facilmente configurare un server CVS su una macchina Windows. Sembra che questo era libero in una sola volta, ma del proprietario attuale sito ora chiede soldi. Che non è una brutta cosa, ma io davvero non poteva giustificare spendere soldi solo per fare una conversione di una volta. alla fine ho fatto rintracciare una vecchia versione di CVSNT con una ricerca su Google ed ho installato che senza problemi.

Qui ci sono le note che ho preso mentre imparare a fare questo lavoro di conversione:

La versione lunga

Copia il codice sorgente cartella è necessario dal rigido del computer principale per unità della VM. Copiare i vari "v" file dalla cartella C: \ RCS cartella struttura a questa stessa cartella codice sorgente sul VM. Basta copiare i file, v dalla cartella corrispondente in C: \ RCS. Aprire una finestra del prompt dei comandi sulla macchina virtuale e digitare la seguente:

path %PATH%;C:\Program Files\cvsnt
mkdir \cvs-repo  [or clean the folder out if it already exists]
cvs -d \cvs-repo init
[A DIR of \cvs-repo should show a CVSROOT folder in there.]

Fare una copia del codice sorgente delle cartelle in \cvs-repo. \cvs-repo dovrebbe ora solo avere due cartelle: CVSROOT e la nuova cartella. Copiare nella appropriata "v" file pure.

mkdir \cvs-checkout [or clean that folder out if it already exists]
cd \cvs-checkout
cvs -d \cvs-repo co name_of_your_source_code_folder

A DIR di "\ cvs-checkout \ name_of_your_source_code_folder" dovrebbe mostrare tutti i file di codice sorgente, che sono ora controllati da CVS.

Se non l'hai già fatto, scarica Mercurial da https: //www.mercurial-scm. org / e installarlo. Aprire una copia di Blocco note e trascinare il file "C: \ Program Files \ Mercurial \ hgrc.d \ Mercurial.rc" in esso. Sotto "[le estensioni]", togliere il punto e virgola alla partenza della ";convert =" linea. Salvare il file "C: \ Documents and Settings \ nome_utente \ Mercurial.ini"

Torna nella riga di comando VM:

path %PATH%;C:\Program Files\Mercurial
mkdir \my-repo.hg  [or clean that folder out if it already exists]
hg convert --datesort \cvs-checkout\source_code_folder_name \my-repo.hg
cd \my-repo.hg
[A DIR of \my-repo.hg should show a new ".hg" folder.]
hg update
[A DIR should now show the ".hg" folder and all the checked-out files.]

Copia nella cartella ".hg" da \ my-repo nella cartella di codice sorgente sul disco rigido del computer principale. La cartella di destinazione sarà ora presentarsi in TortoiseHg con tutta la cronologia delle modifiche del caso, ma tutti i file contrassegnati come modificato (icona overlay di un punto esclamativo in un cerchio rosso). Questo perché il nuovo repository Mercurial pensa che i file sono stati controllati con fine riga Unix (0x0A) al posto di Windows (0x0D, 0x0A). Questo sembra accadere nel processo "hg convert", e non ho trovato alcun modo intorno ad esso.

La versione breve

Una volta che tutto è impostato nella VM, ecco cosa fare:

  • Elimina tutto in \ cvs-repo, \ cvs-checkout e \ my-repo.hg.
  • Nella riga di comando, cvs -d \cvs-repo init.
  • Ritornare alla vostra macchina principale, copiare la cartella di codice sorgente nella cartella condivisa del vostro Virtual Machine (è così che si fa in VirtualBox, altri software VM potrebbe farvi appena drag-and-drop la cartella nella VM) <. / li>
  • Copiare l'appropriato "v" file nella cartella codice sorgente nella cartella condivisa della macchina virtuale.
  • Torna nella VM, spostare la cartella di codice sorgente per \ cvs-repo.
  • cd \cvs-checkout
  • cvs -d \cvs-repo co name_of_your_source_code_folder
  • hg convert --datesort \cvs-checkout\name_of_your_source_code_folder \my-repo.hg
  • cd \my-repo.hg
  • hg update
  • Copiare la cartella .hg da \ my-repo alla L:. Unità sul VM (L è la lettera di unità della mia VM cartella condivisa)
  • Spostare la cartella dalla cartella di trasferimento Virtual Machine nella cartella di codice sorgente finale sul computer host.

Handy Batch File

Una volta ho avuto questo lavoro, ho creato questo file batch sul VM per automatizzare il processo il più possibile:

@echo off
rem Converts source code under RCS control to a Mercurial repository.
rem This batch takes one argument: the name of the source-code folder (in quotes if necessary).
rem
rem This is for a VirtualBox VM that already has CVSNT and Mercurial installed, and has a Shared Folder mapped to drive L.
@echo On the host, copy the source-code folder into the Virtual Machine Transfer folder.  Copy the appropriate ",v" files into the source-code folder in the Virtual Machine Transfer folder.
pause
@echo on
cd \
rmdir /S/Q \cvs-repo
mkdir \cvs-repo 
rmdir /S/Q \cvs-checkout
mkdir \cvs-checkout
rmdir /S/Q \my-repo.hg
mkdir \my-repo.hg
cvs -d \cvs-repo init
xcopy L:\%1 \cvs-repo\%1 /E/I
cd \cvs-checkout
cvs -d \cvs-repo co %1
hg convert --datesort %1 \my-repo.hg
cd \my-repo.hg
hg update
xcopy \my-repo.hg\.hg L:\.hg /E/I

Conclusione

Quindi, tutto questo ha funzionato, ma mi ha lasciato con i file che ha avuto il fine riga sbagliate. Guardando questa domanda , vedo che non sono il unico con questo problema. Posso vivere con questo, ma mi piace ancora di risolvere il problema se qualcuno sa di una soluzione.

Altri suggerimenti

Se Mercurial ha il supporto fast-import / fast-export, e se i repository multi-file non utilizzano i rami, probabilmente si può provare a utilizzare il mio strumento RCS-fast-export (disponibile @ http://git.oblomov.eu/rcs-fast-export ). Anche se ho usato solo per l'esportazione da RCS a git finora, non sono a conoscenza di alcun git-specifici comandi di fast-export in uso in modo che potrebbe funzionare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top