Publication de plug-ins WordPress avec Git

Si vous avez un plug-in hébergé sur le référentiel WordPress, vous serez assez familiarisé avec SVN et certaines de ses commandes. Dans ce tutoriel, je vais vous montrer comment utiliser Git, un autre système de contrôle de version popularisé par GitHub, pour publier et gérer votre plug-in..


Qu'est-ce que Git??

Git et SVN sont deux exemples de systèmes de contrôle de version. Le référentiel de WordPress utilise ce dernier (si vous avez un plug-in hébergé sur WordPress, vous serez familiarisé avec le "check-in" pour apporter des modifications à ce référentiel). Ils vous permettent tous les deux de suivre les modifications apportées à votre code, mais il existe de grandes différences entre ces méthodes..

SVN s'appuie sur un "référentiel central" unique du code (dans notre contexte: le référentiel de plug-in WordPress). Chaque fois que vous souhaitez modifier votre plug-in, vous devez en créer une copie locale, y apporter les modifications, puis "archiver" ces modifications dans le référentiel WordPress..

Git est un système de contrôle de version décentralisé. Plutôt que de ne disposer que d'une copie locale de votre plug-in, vous disposez d'un clone complet de son référentiel de plug-ins, avec toutes ses modifications. Le référentiel existe maintenant de manière autonome sur votre ordinateur. Vous pouvez valider et suivre les modifications, annuler les modifications ou «déconnecter» votre plug-in dans différentes directions, le tout sur votre ordinateur local. Une fois que vous êtes heureux de mettre à jour votre plug-in, vous transmettez ensuite vos modifications à votre référentiel WordPress pour les rendre publiques..

Dans ce tutoriel, je suppose que vous avez un plug-in hébergé sur le référentiel de plug-in WordPress, ou du moins que votre demande d'hébergement a été approuvée. Si vous ne savez pas comment faire héberger votre plug-in par WordPress, je vous suggère de lire notre article sur la publication dans le référentiel de plugins WordPress..


Quels sont les avantages d'utiliser Git par rapport à SVN??

Il existe de nombreux arguments pour et contre l'utilisation de Git sur SVN (ainsi que des systèmes de contrôle de version décentralisés en général). Beaucoup d'entre elles proviennent des manières fondamentalement différentes que Git et SVN suivent les changements. Vous trouverez une excellente analyse approfondie de Git et SVN dans l'article Git vs SVN de CodeForest, mais pour le développeur WordPress:

  • Accès hors ligne - Vous pouvez créer et suivre les commits sur votre propre «référentiel de développement» personnel. Vous devez avoir accès au référentiel WordPress uniquement lorsque vous souhaitez rendre vos modifications publiques..
  • Une fois que vous l'apprenez, Git est beaucoup plus facile à utiliser - Cet article décrit le flux de travail de base dont vous aurez besoin pour apporter des modifications et les mettre à jour dans le référentiel. J'ai relié à quelques ressources au bas qui fournissent des informations plus détaillées sur l'utilisation de Git.
  • GitHub - Voyons les choses en face, voici comment la plupart d'entre nous ont entendu parler de Git. Sa capacité à encourager le «codage social» est rendue possible par la nature décentralisée de Git. Vous pouvez conserver une copie de votre plug-in sur GitHub, en encourageant la communauté à participer et à apporter des améliorations ou des extensions que vous pourrez ensuite inclure. De manière générale, c'est une bonne idée d'exposer votre plug-in à d'autres développeurs..
  • Débranchez facilement votre plug-in - Vous pouvez créer des branches "expérimentales" sur votre copie locale pour tester d'éventuelles nouvelles fonctionnalités, puis les fusionner si elles fonctionnent, au moment de publier la prochaine version de votre plug-in..

Un inconvénient de l'utilisation de Git, c'est de le rendre agréable à utiliser avec un référentiel SVN. Ce n’est pas si difficile grâce à git svn, et cet article est là pour vous guider.


Étape 1 Télécharger Git

Si vous ne l'avez pas déjà fait, vous voudrez installer Git. Comment installer Git est assez bien décrit dans le livre Git Community et le livre Pro Git (les deux excellent ressources si vous êtes nouveau sur Git). Comment installer Git dépend de votre système d’exploitation, ainsi que des programmes graphiques disponibles. Dans ce tutoriel, je vais tout faire en ligne de commande - et je vous encourage à faire de même. À la fin de l'article, je suggérerai quelques programmes d'interface graphique que vous pouvez utiliser, mais en général, je ne les utilise que pour aider à visualiser les branches du référentiel..


Étape 2 Clonez le référentiel hébergé WordPress de votre plug-in

Comme mentionné précédemment, avec Git, vous ne "consultez" pas une copie de votre plug-in. Vous clonez le référentiel, complétez avec un historique des modifications apportées, ainsi que toutes ses branches et ses balises. L'étape 1 consiste ensuite à cloner le référentiel hébergé WordPress de votre plug-in. Par exemple, je publierai un plug-in 'Post Type Archives Link' basé sur un didacticiel précédent. Ainsi (une fois que vous avez été accepté sur le référentiel WordPress), ouvrez votre interface de ligne de commande et accédez à l'emplacement où vous souhaitez stocker la version locale de votre plug-in. Je vais le mettre dans un dossier appelé 'Plugins'. Une fois là-bas, nous voulons dire à Git où trouver notre plug-in. Au moment de la rédaction de ce document, près de 20 000 plug-ins sont hébergés dans le référentiel WordPress, et plus de 500 000 révisions. Nous ne voulons pas attendre que Git scrute chacun de ceux-ci pour trouver notre plug-in. Donc, tout d’abord, nous trouvons à quelle révision commence notre plug-in (nous voulons que tout son historique). Pour ce faire, nous obtenons le premier journal de votre plug-in (quand il a été ajouté à l'origine au référentiel):

 svn log -r 1: HEAD --limit 1 http://plugins.svn.wordpress.org/your-plug-in-name

Il va réfléchir pendant un moment puis vous devriez voir quelque chose comme ceci:

 r520657 | plugin-master | 2012-03-19 03:56:31 +0000 (lun. 19 mars 2012) | 1 ligne

Ce premier numéro, "520657" pour mon plug-in, est la première révision. Nous l'utilisons dans la prochaine commande qui indique à Git de cloner l'historique de notre plug-in. Remplacez XXXXXX par votre numéro de révision.

 git svn clone -s -rXXXXXX --no-minim-url http://plugins.svn.wordpress.org/your-plug-in-name cd votre nom de plugin git svn chercher git svn rebase

Le '-s'indique à Git de s'attendre à la disposition standard (balise, jonction, branches) d'un référentiel SVN. Le '--no-minimiser-url'arrête la recherche en dehors de votre dossier de plug-in. Assurez-vous qu'il ne manque pas. Si vous le laissez pas, vous risquez de copier tout le référentiel de plug-in WordPress. le -rXXXXXX indique à Git quelle révision rechercher. Si vous laissez cela de côté, Git effectuera une recherche dans l’ensemble de l’historique du référentiel. C'est plus de 500 000 révisions. J'ai laissé ceci une fois et cela a pris environ deux heures. Avec cela, cela ne devrait prendre que quelques minutes.

Une fois que c'est fait, vous devriez trouver qu'il a créé un dossier appelé 'votre-plug-in-name'dans votre dossier' Plugins '. Explorons un peu. Naviguez vers le 'votre-plug-in-name'dossier et lancez une commande pour voir quelles' branches 'existent:

 branche git -a

Cela listera toutes les branches, locales et distantes. La seule branche locale doit être maître (l'astérisque indique qu'il s'agit de la branche sur laquelle vous vous trouvez). Les autres branches sont le "tronc" et, le cas échéant, une branche pour chaque tag (SVN considère les tags comme des branches, mais Git est un peu plus intelligent que cela)..

Aller dans votre 'dossier local', 'plugins / nom de votre plugin', vous devriez voir vos fichiers de plug-in (s’il en existait). Avant de créer ou d’éditer des fichiers, nous allons créer une branche distincte sur laquelle travailler..

Mettre à jour: Les commandes ci-dessus ont été mises à jour en raison d'un problème signalé dans les commentaires ci-dessous par Neerav et John Eckman. Le code ci-dessus reflète maintenant la recommandation de Stephen Harris.


Étape 3 (facultatif) Push to GitHub

L'un des avantages de l'utilisation de Git est que vous pouvez facilement gérer une version de votre plug-in sur GitHub. Cela rend votre plug-in plus accessible aux autres développeurs, qui peuvent suggérer des améliorations ou même apporter leurs propres modifications que vous pourriez intégrer à votre propre référentiel. Si vous avez déjà configuré GitHub, vous pouvez à ce stade vouloir placer votre plug-in sur votre compte. Pour ce faire, créez vous-même un nouveau référentiel sur votre compte GitHub, puis ajoutez-le en tant que branche distante à votre référentiel local:

 git remote ajouter l'origine [email protected]:/.git

'ton nom d'utilisateur'fait référence à votre nom d'utilisateur GitHub et'votre nom de repo'fait référence au nom du référentiel que vous avez créé sur GitHub. Ensuite, il vous suffit de pousser votre référentiel local:

 maître d'origine git push

Étape 4 Modification de votre plug-in: aperçu du flux de travail

Nous allons créer une nouvelle branche 'travail'. C'est à l'intérieur de cette branche que nous allons modifier notre plug-in, apporter des modifications et ajouter des fonctionnalités, etc. Cela signifie que notre branche "Master" est conservée dans son état d'origine. Cela nous permet de revenir à la branche principale et de la déconnecter à nouveau. En particulier, supposons qu'un bug majeur se trouve dans votre plug-in pendant que vous travaillez sur certaines nouvelles fonctionnalités de votre branche "work". Vous pouvez revenir à votre branche "maître" (qui n'inclut aucune des fonctionnalités sur lesquelles vous travaillez actuellement), valider un correctif pour le bogue puis l'envoyer dans le référentiel WordPress. Vous pouvez ensuite revenir à votre branche de travail et continuer là où vous l'avez laissée. (Remarque: Git ne crée pas de copies de vos fichiers - il n'y aura toujours qu'un seul ensemble de fichiers dans votre dossier local. Le contenu de ces fichiers dépend de la branche sur laquelle vous vous trouvez.)

En fait, c'est une bonne idée de créer une branche pour chaque nouvelle fonctionnalité que vous ajoutez à votre plug-in. Lorsque vous avez terminé, il vous suffit de les fusionner dans la branche principale. Si cela provoque des «conflits», il vous sera demandé de les résoudre manuellement..

Commencez par créer une branche appelée 'work':

 travail de branche git

Puis 'check out' (allez à) branche 'travail':

 travail de caisse

Un message vous dira que vous êtes passé à la branche "travail". Maintenant, utilisez votre éditeur de texte favori pour ouvrir les fichiers de votre plug-in dans votre dossier local (ou créez-les s'il n'y en a pas encore). Une fois que vous en avez créé quelques-uns, vous voudrez peut-être voir quels fichiers vous avez modifiés. Vous faites cela avec la commande simple:

 statut git

Ceci listera les changements de suivi et non suivi des dossiers. Il se peut que certains fichiers ne soient pas gênés par le suivi de Git (tels que des fichiers temporaires), mais si vous avez ajouté de nouveaux fichiers dans le dossier, vous devez dire à Git de les suivre. Vous pouvez le faire avec la commande:

 git ajouter 

J'ai créé deux fichiers 'post-type-archive-links.php' et 'metabox.js'dans mon dossier local, je les ai donc ajoutées pour dire à Git de les suivre. Vous devez vous assurer que vous suivez votre readme fichier.

Vous pouvez également afficher les modifications depuis votre dernier commit (c’est là qu’un programme graphique devient très pratique)

 git diff

Une fois que vous souhaitez valider les modifications dans votre référentiel local:

 git commit -a -m "Est-ce que abc to xyz"

fournissant un (détaillé) message des modifications contenues dans le commit.

Lorsque vous apportez des modifications, vous pouvez (et devriez) valider le plus souvent possible - mais de manière logique, de préférence avec un commit pour chaque "chose" que vous faites. Vous devez vous assurer qu'il n'y a pas non plus d'erreur évidente dans vos commits. 'Annuler' un commit est rapide et simple: Pour ce faire, effectuez un autre commit qui annule le précédent:

 git revenez HEAD

(Un message vous invitera à décrire cette validation.)


Étape 5 S'engager dans le référentiel WordPress

Supposons que vous soyez maintenant dans une position où vous souhaitez appliquer toutes vos modifications au référentiel SVN. Avant de faire cela, nous devons garder à l’esprit quelque chose. Git vous encourage à vous engager souvent, et c'est une bonne pratique de le faire… pour développement. Cependant, votre référentiel de plug-in WordPress est là pour Distribution. Il n'a pas besoin de chaque commit. En fait, ça ne marche vraiment pas vouloir comme le dit Otto (contributeur principal de WordPress):

"Si je vous surprends [en poussant chaque commit séparément], je vous bannirai de WordPress.org. Le SVN n'a besoin que de votre version de travail finale, pas de l'historique complet des centaines de modifications que vous avez effectuées avec Git. Aplatissez vos modifications en un seul commit. "

Pour éviter cela, lorsque nous sommes prêts à transmettre le référentiel WordPress, nous fusionnons tous les commits en un seul. Il y a plusieurs façons de le faire. Nous allons fusionner (et simultanément écraser) nos modifications de notre branche de travail dans notre branche principale. Toutes nos modifications apparaissent alors comme une validation sur la branche principale. Nous supprimons ensuite la branche de travail et poussons la branche principale vers le tronc SVN de notre plug-in.

Tout d'abord, nous voulons revenir à la branche principale:

 maître de caisse

Puis écrasez et fusionnez les modifications de branche de travail dans le maître:

 git merge --squash work

Si des modifications ont été apportées à la branche principale, il peut y avoir des conflits lors de la fusion. Vous serez invité à résoudre manuellement ces conflits avant la fin de la fusion. Une fois fusionnées, validez les modifications (celle-ci contiendra toutes les validations de notre branche de travail):

 git commit -a -m "Modifications apportées a, b, c, d"

Enfin, nous supprimons la branche de travail

 branche git - travail

Si vous souhaitez fusionner plusieurs branches, vous pouvez le faire pour chacune d’elles. Il existe des méthodes alternatives, que je ne couvrirai pas, pour aplatir votre historique (comme le rebasage interactif).

À ce stade, vous pouvez, si vous le souhaitez, appliquer vos dernières modifications à votre compte GitHub:

 git push -u origine master

Pour accéder au référentiel WordPress, nous devons d’abord nous assurer que notre référentiel local est "à jour":

 Git svn rebase

Git ira ensuite chercher votre référentiel de subversion et y fusionnera toutes les modifications que nous venons de faire. Normalement, il ne devrait y avoir aucune modification dans le référentiel WordPress, vous devriez donc voir le message: Le maître de succursale actuel est à jour.

Nous pouvons maintenant appliquer nos modifications au référentiel WordPress

 git svn dcommit

Git peut alors vous demander vos identifiants WordPress.org. Une fois entrées, vos modifications seront validées dans le référentiel WordPress. Bientôt, vous devriez recevoir un e-mail du référentiel WordPress, vous informant des commits.


Étape 6 Marquer une nouvelle version

Actuellement, ces modifications resteront dans le coffre. Que faire si nous voulons marquer une nouvelle version de notre plug-in? Lors de la création de la prochaine version de votre plug-in, vous devez avoir mis à jour le fichier Lisez-moi, de sorte que la balise stable pointe vers votre nouvelle version (par exemple, «2.0»). Vous devez également avoir mis à jour les informations d’en-tête de votre plug-in dans votre votre-plug-in-name.php fichier. Si vous avez oublié de le faire, suivez la procédure ci-dessus, après avoir apporté ces modifications.

Une fois que votre 'trunk' est entièrement à jour (y compris les informations de version les plus récentes), il suffit ensuite de créer la nouvelle balise dans le référentiel WordPress:

 git svn tag "2.0"

Ceci copie tout dans votre coffre dans tags / 2.0 (ce que vous réalisez normalement avec SVN avec svn cp balises de coffre / 2.0).

Si vous souhaitez marquer la version dans votre référentiel local:

 git tag -a 2.0 -m "Marquage 2.0"

Étape 7 (Facultatif) Marquer une nouvelle version sur GitHub

Semblable à ce que nous avons fait avec le référentiel WordPress, assurez-vous que nos référentiels concordent, puis envoyez nos modifications et balises:

 git pull - origine du maître git push origine du maître git push origine --tags

Ressources utiles pour les commandes Git

  • Référence Git (contient une bonne section sur 'Comment penser comme Git')
  • Livre de la communauté Git
  • Livre Pro Git
  • Git Ready (Moins d'un guide, plus d'une collection "d'extraits")
  • Cours intensif de SVN à Git (utile si vous utilisez SVN depuis un moment)
  • Git Magic (une introduction amicale à Git)

Enfin, il y a quelques "feuilles de triche" Git qui peuvent être utiles: ici et ici.


Programmes Git GUI

les fenêtres

  • TortoiseGit (un programme populaire qui s'intègre bien avec Windows Explorer)
  • msysgit

Mac

  • Git Tower
  • GitHub pour Mac (De ceux qui vous ont apporté GitHub)

Linux / multiplateforme

  • GitG (c'est ce que j'utilise)
  • QGit
  • Git Cola (plateforme croisée)