HowToWork - hattrick-french-dtn/dtn-interface GitHub Wiki

Travail avec Github

Prérequis

Avoir un ensemble permettant le développement en PHP.

  • un serveur LAMP, WAMP, MAMP ou LEMP, WEMP, MEMP
  • récupérer via une demande aux admins du groupe un dump de la base de données
  • un éditeur texte

Cloner le repo et créer un fork

Pour ajouter une clef SSH, il suffit de suivre les étpes ici : https://help.github.com/en/articles/adding-a-new-ssh-key-to-your-github-account.

Après avoir ajouté votre clef SSH sur Gitlab vous pouvez cloner le repo en local (je vous conseille Git Bash sur Windows) :

git clone [email protected]:hattrick-french-dtn/dtn-interface.git hattrick # Crée une copie locale du projet dans le dossier hattrick
cd hattrick

Vous pouvez ensuite forker le projet, via l'option Github. Pour le faire également en local et vérifier, voici les commandes à saisir :

git clone NOM_UTILISATEUR [email protected]:NOM_UTILISATEUR/dtn-interface.git 
git remote add NOM_UTILISATEUR [email protected]:NOM_UTILISATEUR/dtn-interface.git
git remote -v
git fetch NOM_UTILISATEUR

Le projet utilise des projets référencés en des sous-modules. Il est nécessaire de les récupérer pour exécuter le code sur votre serveur local.

git submodule init
git submodule update

Voilà, vous êtes prêt.

Développer en utilisant les branches

Depuis la branche master, voici comment créer une branche et pousser des modifs :

git checkout master # Vous place sur master (on repart TOUJOURS de master)
git fetch --all && git pull origin master # Vérifie les nouveautés et les télécharge
git checkout -b mabranche # Crée une nouvelle branche mabranche depuis la branche actuelle 

* vous faites vos modifs *

git add fichiersmodifiés # Ajoute vos fichiers modifiés pour un commit
git commit -m "Message de commit" # Crée un commit avec un message

Un commit = une modification mineure, qu'on peut expliquer en 50 caractères à peine. Si vous voulez refaire un commit, reprenez les deux dernières étapes après vos nouvelles modifs, puis :

git push -u monfork mabranche # Pousse mabranche sur votre fork en ligne

Si vous travaillez depuis le site Github, vous pouvez simplement modifier les fichiers depuis votre fork, les enregistrer sur une branche, et vous arrivez au même résultat.

Il ne vous reste plus qu'à créer une Pull Request de votre branche vers Master, en explicitant vos modifications. Un administrateur se chargera de tester puis valider vos modifications.

Il est possible de faire plusieurs commits par PR (un commit par modification mineure que vous pouvez expliquer en une ligne est une bonne pratique).

Utiliser les Issues

Quelques règles de bon fonctionnement pour les Issues :

  • Une issue par problème
  • On référence chaque PR à l'Issue à laquelle elle est liée en commentant #idIssue sous la PR
  • Lorsqu'une Issue est résolue, on la clôture.

Avoir un historique propre avec rebase

Parfois lors d'un développement complexe, vous devez corriger une faute mineure sur l'un de vos commits précédents. C'est simple à faire :

* Vous faites votre correction et la committez*

git status # Vous affiche les fichiers modifiés
git add lefichier && git commit -m "correction mineure !" # Crée un nouveau commit
git rebase -i HEAD~2 # Vous permet de modifier votre arborescence de commits. Remplacer "pick" par "fixup" sur le commit de correction suffit. Enregistrer et quitter. 
git push monfork mabranche --force # L'option est nécessaire si vous aviez déjà pushé auparavant.

Parfois, vous voudrez insérer une correction sur un ancien commit et pas nécessairement sur le dernier. Voici comment faire :

* Vous faites votre correction et la committez *

git rebase -i HEAD~3 # Vous remontez 3 commits en amont, ce qui vous affiche ceci :
- pick 121212 Traduction en burgonde
- pick 457878 Traduction en entique
- pick 363636 Correction sur ma traduction burgonde

# Vous avez simplement a déplacer le commit et le passer en fixup : 

- pick 121212 Traduction en burgonde
- fixup 363636
- pick 457878 Traduction en entique

# Enregistrer et quitter.

Autre possibilité, votre branche est larguée par master depuis longtemps et vous voulez la mettre à jour.

* depuis la branche en question *

git fetch --all
git rebase origin/master
git log # Permet de vérifier que tout est en ordre (q pour quitter)
git push monfork mabranche --force

Repartir proprement depuis une branche buguée

Le plus simple reste de la supprimer et de repartir proprement.

git checkout master # On se replace sur master
git fetch --all # On s'assure qu'on est à jour
git branch -D mabranche # Supprime en local la branche en question. A partir de là, deux options :

* Si je veux récupérer la version en ligne de la branche *
git checkout -b mabranche monfork/mabranche # Je recrée une branche locale qui correspond à celle de Github

* Si je veux repartir de master *
git checkout -b mabranche

Quelques commandes utiles

Je suis bloqué dans un merge ou un rebase

git merge --abort
* ou *
git rebase --abort

Je veux mettre à jour la branche master de mon fork

git checkout master # Je me place sur la branche
git fetch --all && git pull # Je la mets à jour
git push monfork master # Je la mets à jour sur mon fork en ligne (--force si nécessaire)

Je veux faire du ménage dans mes branches

git branch # Affiche toutes les branches locales
git branch -D mabranche # Supprime en local la branche en question
git push keseru44 :mabranche # Supprime la branche sur Github

Je veux modifier un message de commit

# Si c'est le dernier commit : 
git commit --amend # Réouvre l'éditeur de message, modifier et enregistrer

# Sinon : 
git rebase -i HEAD~3 # Pour remonter à 3 commits. Cela affiche : 
- pick 252525 mESSAGE RAT2
- pick 747474 Commit sympa
- pick 565656 Pouët coin coin

# A remplacer par : 
- reword 252525 mESSAGE RAT2
- pick 747474 Commit sympa
- pick 565656 Pouët coin coin

# Enregistrer et quitter. Votre éditeur est automatiquement réouvert et vous pouvez modifier le message puis sauver.