web-dev-qa-db-fra.com

Comment relier git à ClearCase?

J'ai récemment utilisé git svn et j'ai beaucoup apprécié. Maintenant, je commence un nouveau projet chez un autre client. Sur ce site, le SCM de choix est ClearCase. Je n'ai pas trouvé d'équivalent cuit au four de git svn pour ClearCase. Y a-t-il quelqu'un qui a essayé d'utiliser git localement en tant que frontal pour ClearCase en utilisant des astuces, une configuration ou des scripts avec une certaine mesure de succès? Si oui, pouvez-vous expliquer la méthode utilisée?

41
Bas Bossink

Voici une méthode qui évite les détournements, que notre équipe a utilisé cette méthode avec succès pendant plus d'un an, jusqu'à ce que nous retirions ClearCase pour Subversion (selon la politique de l'entreprise, bien que ce soit un pas en arrière pour notre équipe - nous utilisions simplement ClearCase comme un idiot système de fichiers, et fonctionnant pratiquement nativement dans git, mais maintenant nous utilisons le pont git-svn qui n'est pas aussi agréable que git natif.)

Nous avons utilisé deux répertoires, un pour le snapshot ClearCase et le référentiel git maître, que nous avons partagés avec toute l'équipe et sans jamais modifier les fichiers, et un pour notre répertoire "de travail".

La préparation dans la vue d'instantané ClearCase est la suivante:

% git init 
% git add **/*. cxx **/*. h **/Makefile (et ainsi de suite) 
% git commit -m "initial" 

Ensuite, clonez dans votre répertoire de travail:

% mkdir ~/work 
% git clone /path/to/repo

Travaillez dans le répertoire de travail, sur une branche:

% git checkout -b fonctionnalité 
% ... éditer/compiler ... 
% git add -u 
% git commit 

Assurez-vous que l'instantané ClearCase est à jour avec vierge (ce qu'il a toujours été pour nous, car nous l'avons partagé avec l'équipe et nous avons tous utilisé git).

Fusionnez ensuite la branche sur le maître en la rebasant, pour éviter un commit de fusion automatique:

% git checkout master 
% git pull 
% git checkout feature 
% git rebase master 
% git checkout master 
% fonction de fusion git 
% fonction git branch -d 
 
% git diff --name-status Origin/master 

Préparez la vue ClearCase en extrayant/mkelem/rmname tous les fichiers modifiés/nouveaux/supprimés, en fonction de la sortie de git diff --name-status. Nous avons utilisé un script roulé à la main pour ce faire. N'oubliez pas de vérifier tous les répertoires qui ont ajouté/supprimé des fichiers:

Ensuite, repoussez le truc git et connectez-vous avec ClearCase:

% git Appuyez sur 
% cd /path/to/repo[.____.[% git reset --hard 
% cleartool ci `cleartool lsco -r -short -me` 

Cela ressemble à beaucoup de commandes, mais cela inclut la configuration et votre flux de travail quotidien n'utilise pas beaucoup de commandes. Vous pouvez facilement créer un script autour de l'étape Push-back-to-ClearCase, et découvrir/montrer progressivement à votre équipe tous les trucs extra géniaux au fur et à mesure que tout le monde s'habitue au flux de travail de base.

La vraie beauté de ce système est, après un certain temps lorsque tout le monde est compétent avec git, , vous pouvez abandonner trivialement ClearCase et tout le travail et les frais de singe individuels associés. Peut-être donner au gars de ClearCase de l'entreprise des vacances bien méritées et un peu de recyclage avec les économies. (Malheureusement dans ma société, les trucs git étaient tous des skunkworks, et nous sommes passés à Subversion - en avant de ClearCase mais en arrière de git!)

Je fortement vous recommande d'utiliser le script pristine de ClearCase globalement, Git localement , qui s'exécute dans ClearCase vue instantanée et s'assure que git et sont synchronisés. Nous avons configuré cela comme un travail cron qui s'exécutait deux fois par jour, et nous l'avons également exécuté manuellement chaque fois que nous étions sur le point de repousser à git. Malheureusement, le lien vers l'article de blog n'est plus valide. Cependant, le script est toujours disponible sur Github .

38
Matt Curtis

Bien que cela ne soit pas sans quelques verrues (vous avez été prévenu), je pense que je devrais mentionner que j'ai écrit une sorte de pont.

http://github.com/charleso/git-cc

Le pontage entre les deux systèmes n'est pas facile, et je souhaite que ma solution soit à moitié aussi bonne que git-svn. Une grande limitation est que vous êtes vraiment limité à la mise en miroir d'un seul flux; git-cc ne peut pas cloner toutes vos branches Clearcase (aussi sympa que cela puisse être). Cependant, étant donné que la plupart des scripts alternatifs se résolvent autour d'une seule vue Clearcase, vous n'êtes pas moins bien loti (IMO).

Personnellement, je trouve l'histoire assez importante et ce qui manque aux autres solutions, c'est leur importation de l'histoire dans Git. Pouvoir lancer git-blame sur des fichiers et voir leurs vrais auteurs est très utile de temps en temps.

Si rien d'autre ne git-cc ne peut gérer l'étape 'git log --name-status' mentionnée ci-dessus dans la solution de Matt.

Je suis certainement curieux d'entendre ce que VonC et Matt (et d'autres) pensent de cela, car je conviens que tout pont vers Clearcase est semé d'embûches et peut être plus problématique qu'il n'en vaut la peine.

13
charleso

Le seul processus que je suis habituellement:

  • cd d'instantané dans un ClearCase view/vobs/myComponent
  • git init.

Cela me permet de considérer un composant ClearCase comme un dépôt Git.
.

Une fois que j'ai un commit final stable, je mets à jour ma vue d'instantané, qui répertorie tous les fichiers "piratés": je les extrait et les réintègre dans ClearCase.

Compte tenu des limites Git , un dépôt par composant ClearCase (UCM) est la bonne taille pour un dépôt Git.
Voir aussi Quels sont les concepts de base de clearcase que tout développeur doit connaître? pour une comparaison entre ClearCase et Git.

L'idée demeure:

  • pas de git-cc
  • pas besoin d'importer tout l'historique de ClearCase (qui n'a pas de notion de base de référentiel, contrairement aux révisions SVN)
  • création d'un référentiel Git dans une vue ClearCase pour les validations intermédiaires
  • final Git commit mis en miroir dans la vue ClearCase via un archivage de tous les fichiers modifiés.
5
VonC