grimboite/old/2015-06-23-git-contrib.md

2.3 KiB

Title Tags Date
Git contributions git, vcs 2015-06-23

Git est un gestionnaire de sources décentralisé. J'en ai déjà parlé [ici] [là] et [là]. Un des gros avantages est de pouvoir forker un projet pour travailler dessus à son aise et ainsi proposer ses modifications par la suite. Sur BitBucket par exemple, il est possible de donner un accès en écriture sur un projet personnel. Je ne pense pas que ce soit une bonne idée: oui, les sources doivent finir par atterrir à un endroit centralisé, mais peut-être pas de cette manière-là...

  • Si A crée un dépôt et qu'il donne les droits d'écriture à B.
  • B fait des modifications et les push sur le dépôt.
  • A continue à travailler dessus, puis, lorsqu'il/elle veut pusher ses modifications, il/elle doit d'abord faire un merge. D'accord. Mais que concernent ces modifications?

Si la communication entre ces deux personnes est mauvaise, il y a de fortes chances pour cela finisse par clasher.

La bonne solution (selon moi), c'est de forker le premier projet. Seul A un la possibilité d'écrire dans ce dépôt. Si B veut y faire des modifications, il doit prendre ce dépôt, le forker, le cloner en local, y faire ses modifications, puis les proposer à A.

Dans l'ordre, cela donne ceci (Github/Gitlab/Bitbucket facilitent ces actions à mort, puisqu'il y a de gros boutons clignotants et fluorescents):

  1. On forke
  2. On clone le nouveau dépôt en local avec git clone <url>
  3. On ajoute une source upstream qui pointe vers le dépôt initial et qui permettra de récupérer les dernières modifications de la branche source. De cette manière, il est possible de merger soi-même les modifications avant de proposer une amélioration ou correction: git remote add upstream <source url>, suivi de git fetch upstream.
  4. On merge la branche source avec git fetch upstream et git merge upstream/master.

Dans la foulée, un petit aide-mémoire sur les branches Git:

git branch -a #pour la liste complète
git branch -r #pour la liste uniquement en remote
git remote show origin
git checkout --track -b branch_name origin/branch_name
git checkout -t origin/branch_name
git branch -d branch_name
git branch -D branch_name
git push origin :branch_name