45 votes

Migrer un projet de RCS vers git ?

J'ai un Un projet vieux de 20 ans que je voudrais migrer de RCS vers git, sans perdre l'historique. Toutes les pages web suggèrent que la seule vraie voie est celle de CVS. Mais après une heure de recherche sur Google et l'essai de différents scripts, je n'ai pas encore trouvé quelque chose qui avec succès convertit mon arbre de projet RCS en CVS. J'espère que les bonnes gens de Stackoverflow sauront ce qui fonctionne réellement, par opposition à ce qui est prétendu fonctionner et ne fonctionne pas.

(J'ai fait des recherches sur Stackoverflow en utilisant à la fois la recherche SO native et une recherche Google, mais s'il y a une réponse utile dans la base de données, je l'ai manquée).

UPDATE : Le site rcs-fast-export outil à http://git.oblomov.eu/rcs-fast-export a été réparé le 14 avril 2009, et cette version semble fonctionner pour moi. Cet outil convertit droit à git sans CVS intermédiaire. Merci Giuseppe et Jakub ! !!


Des choses qui n'ont pas fonctionné et dont je me souviens encore :

  • En rcs-to-cvs script qui est livré avec le logiciel contrib répertoire des sources CVS

  • En rcs-fast-export outil à http://git.oblomov.eu/rcs-fast-export dans les versions antérieures au 13 avril 2010

  • En rcs2cvs script trouvé dans un document appelé "CVS-RCS- HOW-TO Document for Linux"

6 votes

Si vous avez trouvé de nombreuses façons no Je pense qu'il serait judicieux de dresser la liste des méthodes qui n'ont pas fonctionné afin que personne ne perde plus de temps :)

0 votes

Par ailleurs, certaines personnes considèrent que le meilleur moyen de passer de CVS (une fois que vous y êtes) à git est de passer par subversion. stackoverflow.com/questions/881158/

0 votes

Pourquoi exactement devez-vous garder l'histoire ?

24voto

Jakub Narębski Points 87537

Voir InterfacesFrontendsAndTools sur Git Wiki, dans "Tools", "Interaction with other Revision Control Systems", "Other". Vous y trouverez une description et un lien vers rcs-fast-export ( gitweb ) Ruby script par Giuseppe "Oblomov". Bilotta.

(Une recherche sur Internet permettrait de trouver également la page Ohloh et l'annonce du projet mentionné). .

3 votes

Pour clarifier pour Norman, un outil d'"exportation rapide" est un standard moderne de facto pour communiquer entre systèmes VCS, l'outil de git pour lire ces données s'appelle git fast-import

0 votes

Malheureusement, cet outil se bloque avec une trace de pile, commençant par une erreur à la ligne 420. C'est assez typique de mes tristes expériences. Ai-je mentionné que l'histoire du RCS couvre 20 ans ?

0 votes

Avez-vous essayé de contacter l'auteur de rcs-fast-export ? Il est probable cependant qu'il s'agissait d'un outil de conversion unique pour l'auteur, et que le script n'est pas maintenu.

1voto

Edward Falk Points 3650

OK, après un peu de bricolage, j'ai trouvé qu'il était trivial de convertir RCS en CVS. Les fichiers sont dans le même format, il s'agit donc simplement de déplacer les fichiers dans un Root CVS existant. Cela suppose que vous ayez accès aux fichiers RCS.

# Create CVS root dir. You only need to do this once.
mkdir $HOME/cvs/
cd $HOME/cvs/
cvs init

# Import a repository from RCS to CVS
cp -a _projectname_/RCS $HOME/cvs/_projectname_

0voto

md0 Points 41

En règle générale, vous devez faire attention aux scripts que vous exécutez. Pour RCS -> GIT, il peut être dans votre intérêt de suivre la méthodologie RCS->CVS->GIT.

J'ai jeté un coup d'œil rapide à rcs-fast-export.rb en date du 2011-01-12 et je suis tombé sur cette partie du code. C'est effrayant au mieux.

# steal username/email data from other init files that may contain the
# information
def steal_username
    [
            # the user's .hgrc file for a username field
            ['~/.hgrc',   /^\s*username\s*=\s*(["'])?(.*)\1$/,       2],
            # the user's .(g)vimrc for a changelog_username setting
            ['~/.vimrc',  /changelog_username\s*=\s*(["'])?(.*)\1$/, 2],
            ['~/.gvimrc', /changelog_username\s*=\s*(["'])?(.*)\1$/, 2],
            []
    ].each do |fn, rx, idx|
...

2 votes

La terminologie peut être effrayante, mais il n'y a rien de néfaste ici. RCS utilise des noms d'utilisateurs unix et git veut des noms de style "First Last first.last@domain.com".

0voto

user317023 Points 1

J'ai eu ce problème aussi et j'ai lutté avec cvs2svn, parsecvs et d'autres choses. parsecvs a été le plus proche mais Keith semble l'avoir laissé derrière lui et maintenant des forks aléatoires apparaissent. Le problème que j'ai rencontré avec lui était qu'il analysait les fichiers RCS très bien mais la dernière chose qu'il faisait était git rm le fichier, donc j'aurais eu à m'embrouiller avec git reset pour annuler la suppression.

Puis j'ai découvert que mercurial convert : https://www.mercurial-scm.org/wiki/ConvertExtension Problème résolu !

J'ai essayé d'ajouter de manière incrémentielle des éléments provenant d'arbres RCS séparés, cela semble avoir fonctionné.

0voto

Jonas Berlin Points 719

Je viens de trouver ceci, qui a bien fonctionné pour moi :

http://cynic.cc/blog/posts/migrate-from-rcs-to-git/

Notez simplement que "cvs-source-dir" sur cette page doit être un chemin absolu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X