git-p4 au secours de Perforce

A la manière d’un git-svn, il est possible d’utiliser git pour se synchroniser avec un dépôt Perforce (ouf). On peut profiter de la souplesse de git en local et continuer de travailler avec ses collègues sur le dépot central Perforce.

Principe de fonctionnement

Git-p4 permet de cloner un dépot Perforce dans un repository git.

Le script va parcourir chaque révision des fichiers et peupler un répository git via la commande p4 print. On peut importer la totalité de l’historique, enfin si on a le temps surtout, le premier import peut-être assez long en fonction de la taille du dépot Perforce.

La phase un peu plus compliquée est le report des changements dans Perforce (à cause des spécificités de ce SCM). Il faut pour celà passer par un workspace Perforce différent de l’emplacement du répository git.

Les commits git sont alors reportés par le script dans le workspace Perforce via des git diff/format-patch… | git apply puis p4 submit s’occupe de transférer les changements dans Perforce.

Git-p4 utilise git-notes sur chaque commit pour repérer ceux déjà synchroniser avec Perforce.

Fonctionnement git-p4

Installation

git

Après l’installation classique des binaires, on ajoute quelques propriétés spécifiques à git-p4 dans le fichier de configuration .gitconfig :

[git-p4]
detectRename=true
detectCopy=true

Celà permettra à git-p4 de détecter les fichiers déplacés lors du submit dans Perforce (le copy ne semble pas utilisé…).

perforce

Après l’installation des binaires, exposer la variable d’environnement P4CONFIG.

Par la suite j’utilise un fichier .p4config pour configurer les accès Perforce.

python 2.x

git-p4 est écrit en python, installation.

git-p4

Télécharger le script Pour windows, créer le fichier git-p4.bat avec le contenu suivant:

@python "%~d0%~p0git-p4" %*

Copier ces deux fichiers dans le répertoire d’installation de git /libexec/git-core/

Vérification de l’installation

git --version
p4 help
python --version
git p4 help`

Utilisation

Structure d’un projet

Structure projet git-p4

Le dossier git contiendra le repository git, et p4 le workspace Perforce.

Contenu du fichier .p4config :

P4USER=nom d’utilisateur
P4PASSWD=mot de passe
P4CHARSET=encoding du serveur
P4COMMANDLINE=encoding du CLI
P4CLIENT=nom du workspace`

Création du client Perforce

Dans le dossier p4, utiliser la commande p4 client pour créer un nouveau workspace. Les données du fichier .p4config sont automatiquement utilisées, il suffit donc seulement de renseigner le mapping vers le projet.

Penser à créer l’arborescence complète du mapping côté client avant de tenter votre premier commit.

Import initial du projet

Dans le dossier git, utiliser la commande git p4 clone //depot/chemin/projet . (attention au point à la fin de la commande).

Par défaut seule la dernière révision sera importée, pour importer l’historique complet il suffit de suffixer le chemin du dépôt par @all.

Voilà on peut maintenant travailler dans le répository git !

Mise à jour incrémentale

Une fois le premier import effectué, git p4 rebase permet de récupérer les dernières changelist depuis Perforce.

Pour ceux qui préfèrent voir les changements distants avant de les intégrer dans les commit locaux git p4 sync puis git rebase p4/master

Report des changements locaux dans Perforce

Penser à toujours faire un git p4 rebase avant de soumettre les changements locaux dans Perforce sinon les possibles conflits devront être résolus depuis le workspace Perforce, et c’est quand même plus simple de les gérer dans git. En oubliant l’update avant le submit il est également possible de se retrouver avec des changelists Perforce non importées dans git (pas cool).

git p4 submit permet de reporter les changements sur le serveur Perforce.

Utiliser l’option --auto pour que Perforce ne demande pas de modifier le commentaire des commits. Il utilisera automatiquement ceux de git.

Précautions

  • Comme lorsque l’on travaille uniquement avec git, ne pas réécrire l’historique de changements déjà synchroniser avec Perforce,
  • Penser à toujours rebaser les modifications Perforce sur les changements locaux de git avant de tenter un submit,
  • Éviter les merge entre branches locales, de toute façon il faudra rebaser les modifications au final. Celà pourrait amener à régler les mêmes conflits plusieurs fois.

Workflow

git p4 clone
Modifier des fichiers
git commit
Modifier des fichiers
git commit
git p4 rebase
git p4 submit`

Pour aller plus loin

  • Utiliser le même répository git pour gérer plusieurs branches du dépot Perforce (Pour le moment j’utilise un repository git par branche),
  • Repasser sur le script maintenu sur le repository git officiel, j’ai eu des problèmes sous windows avec ce dernier il y a quelques mois quand j’ai commencé à utiliser git-p4.
comments powered by Disqus