Comment importer et tenir à jour un dépôt CVS dans Git? [fermé]

il y a un dépôt central dans CVS, et je voudrais l'utiliser avec Git localement, puis envoyer mes modifications à CVS.

Que puis-je faire au quotidien?

Les tâches que je voudrais accomplir sont:

  • branches importatrices,
  • obtention d'histoire dans GIT format, et
  • exporter mes modifications / commits vers le serveur centralisé

BTW, j'ai aussi regardé les Meilleures pratiques pour l'utilisation de git avec CVS . Mais ça n'a pas marché et je n'ai pas compris ce que j'avais manqué ou fait de mal.

33
demandé sur Community 2012-07-06 16:57:53

3 réponses

Ce que j'ai fait dans le passé est:

importer le dépôt CVS

utilisant:

$ git cvsimport -C target-cvs -r cvs -k -vA authors-file.txt -d $CVSROOT module

où:

  • target-cvs est le répertoire pour conserver ma copie locale du dépôt.
  • cvs est le nom à utiliser pour référencer le dépôt distant. Donc, j'aurai cvs/master , cvs/HEAD , etc. pointé localement par master .
  • authors-file.txt est le fichier qui contient les correspondances entre le compte CVS et le nom+E-Mail, chaque ligne contient userid=User Name <useremail@hostname>
  • $CVSROOT est le serveur CVS respository. Si j'utilise un clonage anonyme à partir d'un dépôt sourceforge, alors j'utiliserai: :pserver:anonymous@project_name.cvs.sourceforge.net:/cvsroot/project_name
  • module est le module à l'intérieur du dépôt que je veux cloner. Si le dépôt n'a qu'un seul module, puis sera probablement le même que project_name .

mettre à Jour le référentiel

il est possible de répéter la commande que j'ai écrite précédemment. Dans cet exemple particulier, il doit être exécuté dans le répertoire parent de 151930920" . Pour le rendre plus facile à l'avenir, vous pourriez vouloir configurer certaines variables (vous pouvez lire plus de détails dans la réponse de " comment exporter l'historique de révision de mercurial ou Git vers cvs? " )

$ git cvsimport

ce qui serait suffisant pour maintenir le dépôt local dans git synchronisé avec le dépôt distant dans CVS.

travail quotidien

à partir de Maintenant, chaque changement doit aller dans une branche git locale. Une caractéristique, une branche. Pour cela, j'utilise un flux de travail décrit dans " un modèle de branchement git réussi ". La seule différence est que maître renvoie à CVS, mais théoriquement les mêmes flux de travail peuvent être appliqués ici. C'est juste une convention.

une fois que votre commit est poussé dans CVS, il sera de nouveau maître dans la prochaine mise à jour ( git cvsimport ). Ensuite, vous pouvez supprimer la branche locale qui a implémenté cette fonctionnalité.

pour les travaux en cours (dans les branches locales), vous devez rebase eux contre maître. Parce que vous avez les traits séparés, il devrait être plus facile à résoudre conflit. La partie délicate est quand certaines branches dépendent d'autres, mais encore gérable. Micro commits aide beaucoup (comme dans tout flux de travail git).

si chaque branche locale est rebasée et maître jamais touché (sauf pour les mises à jour), alors git cvsexportcommit devrait juste fonctionner. Rappelez-vous, ça marche pour un commit. C'est un peu fastidieux, mais c'est mieux que rien. Dans l'exemple précédent, la commande devrait ressembler à quelque chose comme:

$ git cvsexportcommit -vc commit-id

si vous vous n'avez qu'un accès en lecture seule aux CVS distants, alors vous pouvez envoyer les patches par e-mail ou rendre votre dépôt git public, de sorte que les propagateurs puissent récupérer vos patches pour les appliquer. Rien de différent d'un flux de travail normal de CVS dans ce cas. Encore une fois, dans la prochaine mise à jour, vous verrez les changements dans maître .

42
répondu gpoo 2017-05-23 12:10:54

avec la version récente git cvsimport est cassé, en raison de cvsps incompatibilité d'outil .

donc vous devez installer cvsps-2.1 .

sur OSX vous pouvez (ayant brew ):

brew tap homebrew/versions
brew install cvsps2
brew unlink cvsps
brew link --overwrite cvsps2

et importer sur un dépôt git vide comme d'habitude, par exemple:

git cvsimport -C RepoName -r cvs -o master -k -v -d:pserver:anonymous@reponame.cvs.sourceforge.net:/cvsroot/path ModuleName

vous pouvez également utiliser cvs2git outil qui peut convertir un dépôt CVS en git. Cependant, vous devez avoir accès à un répertoire CVSROOT.

Vérifier cvs2git documentation les étapes de l'installation.

exemple d'usage:

cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git /path/to/cvs/repo

cela créerait deux fichiers de sortie au format git fast-import. Les noms de ces fichiers sont spécifiés par votre fichier d'options ou d'arguments de ligne de commande. Dans l'exemple, ces fichiers sont nommés cvs2git-tmp/git-blob.dat et cvs2git-tmp/git-dump.dat .

ces fichiers peuvent être importés dans un dépôt git vide par:

cat git-blob.dat git-dump.dat | git fast-import

puis supprimer la branche TAG.FIXUP et exécuter gitk --all pour afficher les résultats de la conversion.

Vérifiez pour plus, en exécutant: cvs2git --help .

7
répondu kenorb 2017-05-23 11:33:24

je crois qu'il n'y a pas de recette prête à utiliser dans votre cas. Mais, vous pouvez essayer de suivre:

  • synchronisation manuelle des données CVS avec Git, ou écriture de scripts pour cela. Ils obtiendront des informations de CVS et les transmettront à Git. Cela vous donnera une sorte d'histoire dans Git. Pas complètement propre, pas totalement utilisable, mais quand même.
  • Migrer vos CVS, Git à l'aide de outils comme git cvsimport . Et demande à Git de faire semblant d'être CVS pour les autres développeurs, en utilisant git cvsserver .
2
répondu shytikov 2012-07-10 13:46:52