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.
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'auraicvs/master
,cvs/HEAD
, etc. pointé localement parmaster
. -
authors-file.txt
est le fichier qui contient les correspondances entre le compte CVS et le nom+E-Mail, chaque ligne contientuserid=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 queproject_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 .
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
.
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 utilisantgit cvsserver
.