Il existe un référentiel central dans CVS, et je voudrais l'utiliser localement avec Git, puis renvoyer mes modifications à CVS.
Que puis-je accomplir quotidiennement?
Les tâches que j'aimerais accomplir sont:
BTW, j'ai également regardé Meilleures pratiques pour utiliser git avec CVS . Mais cela n'a pas fonctionné et je n'ai pas pu comprendre ce que j'ai raté ou fait de mal.
Ce que j'ai fait dans le passé, c'est:
En 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 référentiel.cvs
est le nom à utiliser pour référencer le référentiel 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 Nom + e-mail, chaque ligne contient userid=User Name <useremail@hostname>
$CVSROOT
est le serveur de dépôt CVS. Si j'utilise un clonage anonyme à partir d'un référentiel sourceforge, j'utiliserais alors: :pserver:anonymous@project_name.cvs.sourceforge.net:/cvsroot/project_name
module
est le module à l'intérieur du référentiel que je veux cloner. Si le référentiel n'a qu'un seul module, il sera probablement identique à project_name
.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 target-cvs
. Pour vous faciliter la tâche à l'avenir, vous souhaiterez peut-être configurer certaines variables (vous pouvez lire plus de détails dans la réponse de " Comment exporter l'historique des révisions de Mercurial ou git vers cvs ? ")
$ git cvsimport
Cela suffirait à garder le référentiel local dans git
synchronisé avec le référentiel distant dans CVS.
Dorénavant, chaque changement devrait aller dans une branche git locale. Une fonctionnalité, une branche. Pour cela, j'utilise un flux de travail décrit dans "n modèle de branchement Git réussi". La seule différence est que master pointe vers CVS, mais conceptuellement, les mêmes flux de travail peuvent être appliqués ici. Ce n'est qu'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 succursales locales), vous devez rebase
contre maître. Étant donné que les fonctionnalités sont séparées, il devrait être plus facile de résoudre les conflits. La partie délicate est lorsque certaines branches dépendent d'autres, mais toujours gérables. Micro commits aide beaucoup (comme dans tout flux de travail git).
Si chaque branche locale est rebasée et que le maître n'est jamais touché (sauf pour les mises à jour), alors git cvsexportcommit
devrait simplement fonctionner. N'oubliez pas, cela fonctionne pour un commit. C'est un peu fastidieux, mais c'est mieux que rien. Étant donné l'exemple précédent, la commande devrait ressembler à ceci:
$ git cvsexportcommit -vc commit-id
Si vous ne disposez que d'un accès en lecture seule au CVS distant, vous pouvez envoyer les correctifs par e-mail ou rendre votre référentiel git public, afin que les valideurs puissent récupérer vos correctifs 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 master .
Avec la version récente git cvsimport
est cassé à cause de cvsps
incompatibilité d'outil .
Vous devez donc installer cvsps-2.1
.
Sous OSX, vous pouvez (avoir brew
):
brew tap homebrew/versions
brew install cvsps2
brew unlink cvsps
brew link --overwrite cvsps2
Et importez sur le référentiel git vide comme d'habitude, par exemple:
git cvsimport -C RepoName -r cvs -o master -k -v -d:pserver:[email protected]:/cvsroot/path ModuleName
Vous pouvez aussi utiliser cvs2git
outil qui peut convertir un dépôt CVS en git. Cependant, vous devez avoir accès à un répertoire CVSROOT.
Vérifiez documentation cvs2git pour les étapes d'installation.
Exemple d'utilisation:
cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git /path/to/cvs/repo
Cela créerait deux fichiers de sortie au format d'importation rapide git. Les noms de ces fichiers sont spécifiés par votre fichier d'options ou vos 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 référentiel git vide par:
cat git-blob.dat git-dump.dat | git fast-import
Supprimez ensuite le TAG.FIXUP
branchez et exécutez gitk --all
pour afficher les résultats de la conversion.
Vérifiez-en plus en exécutant: cvs2git --help
.
Je crois qu'il n'y a pas de recette prête à l'emploi dans votre cas. Mais, vous pouvez essayer de suivre:
git cvsimport
. Et demandez à Git de faire semblant d'être CVS pour d'autres développeurs, en utilisant git cvsserver
.