---
layout: post
title: Gérer un fork avec Git
---

Lorsque l'on souhaite contribuer à un projet public utilisant Git comme gestionnaire de versions, il est d'usage de dupliquer le projet (*fork*), créer une branche spécifique aux changements que l'on souhaite effectuer et enfin demander un tirage (*pull request*).
Cela est relativement simple à faire si les modifications sont très limitées dans le temps, vous pouvez travailler puis demander son intégration sans que le projet originel n'ait avancé.

Néanmoins cela se corse si vos modifications prennent du temps ou si le projet originel évolue très rapidement. Il est nécessaire que vous synchronisiez régulièrement votre copie du projet afin de ne pas trop diverger.

Pour cela il est déjà nécessaire d'afficher les dépôts distants existants : `git remove -v`.  
En général vous retrouverez le dépôt `origin` qui correspond à votre dépôt distant personnel.

Il faut alors ajouter le dépôt distant original : `git remote add <nom> <url>`.  
Le nom du dépôt distant communément utilisé est `upstream` afin d'indiquer qu'il s'agit du projet originel (vous pourriez utilisez le nom `originel` mais il est un peu trop proche du nom de votre dépôt distant `origin`).

Vous pouvez désormais récupérer les modifications du dépôt distant originel :

    git fetch upstream

Si des modifications ont eu lieu sur le dépôt originel il faut les intégrer à votre copie :

    git merge --ff-only <branche> # par exemple upstream/master

Cela permet de créer une fusion linéaire. Ce n'est pas toujours applicable dans le cas où vos modifications divergent par rapport au projet originel.

Pour finir une petite recommandation. Si vous souhaitez travailler sur deux sujets différents et les intégrer ensuite au projet originel il vaut mieux que chaque branche thématique parte de votre branche `master`. Ainsi dans le cas où une branche est refusée l'autre n'en dépendra pas et pourra être intégrée sans problème.

Add post to handle Git forks
Add post to handle Git forks
