Vous ne pouvez pas toujours créer une branche ou tirer une branche existante et la repousser, car vous n'êtes pas inscrit en tant que collaborateur pour ce projet spécifique.
Forking n'est rien de plus qu'un clone côté serveur GitHub :
- sans possibilité de repousser directement
- avec la fonction de file d' attente fork ajoutée pour gérer la demande de fusion
Vous gardez un fork synchronisé avec le projet d'origine en:
- ajout du projet d'origine en tant que télécommande
- aller chercher régulièrement à partir de ce projet original
- rebaser votre développement actuel au-dessus de la branche d'intérêt que vous avez mise à jour à partir de cette extraction.
Le rebase vous permet de vous assurer que vos modifications sont simples (aucun conflit de fusion à gérer), ce qui rend votre demande d'extraction plus facile lorsque vous souhaitez que le responsable du projet d'origine inclue vos correctifs dans son projet.
Le but est vraiment de permettre la collaboration même si la participation directe n'est pas toujours possible.
Le fait que vous cloniez du côté de GitHub signifie que vous avez maintenant deux référentiels "centraux" ("centraux" comme "visibles par plusieurs collaborateurs).
Si vous pouvez les ajouter directement en tant que collaborateur pour un projet, vous n'avez pas besoin d'en gérer un autre une avec une fourchette.
L'expérience de fusion serait à peu près la même, mais avec un niveau d'indirection supplémentaire (poussez d'abord sur la fourche, puis demandez une traction, avec le risque d'évolutions sur le référentiel d'origine, ce qui rend vos fusions rapides plus rapides) .
Cela signifie que le flux de travail correct consiste à git pull --rebase upstream
(rebaser votre travail au-dessus des nouvelles validations à partir de l'amont), puis git push --force origin
, afin de réécrire l'historique de telle manière que vos propres validations sont toujours au-dessus des validations du référentiel d' origine (en amont) .
Voir également:
Voici les différences de haut niveau:
Forking
Avantages
Les inconvénients
Ramification
Avantages
Les inconvénients
la source
write
autorisations sur le référentiel.Cela a à voir avec le flux de travail général de Git. Il est peu probable que vous puissiez accéder directement au référentiel du projet principal. Je ne sais pas si le référentiel du projet GitHub prend en charge le contrôle d'accès basé sur une branche, car vous ne voudriez pas accorder à quiconque la permission de pousser vers la branche principale par exemple.
Le schéma général est le suivant:
Sans cela, il est assez inhabituel pour des projets publics de laisser quiconque pousser ses propres engagements directement.
la source
Forking crée un référentiel entièrement nouveau à partir du référentiel existant (simplement en faisant git clone sur gitHub / bitbucket)
La stratégie de branche crée une nouvelle branche sur le référentiel existant / fonctionnel
Plus spécifique: - Dans les projets open source, c'est le propriétaire du référentiel qui décide qui peut pousser vers le référentiel. Cependant, l'idée de l'open source est que tout le monde peut contribuer au projet.
Ce problème est résolu par les fourches: chaque fois qu'un développeur veut changer quelque chose dans un projet open source, il ne clone pas directement le référentiel officiel. Au lieu de cela, ils le fourchent pour créer une copie. Une fois le travail terminé, ils font une demande d'extraction afin que le propriétaire du référentiel puisse examiner les modifications et décider de les fusionner avec son projet.
À la base, la fourche est similaire à la fonction de branchement, mais au lieu de créer des branches, une fourchette du référentiel est créée, et au lieu de faire une demande de fusion, vous créez une demande d'extraction.
Les liens ci-dessous fournissent la différence d'une manière bien expliquée:
https://blog.gitprime.com/the-definitive-guide-to-forks-and-branches-in-git/
https://buddy.works/blog/5-types-of-git-workflows
http://www.continuousagile.com/unblock/branching.html
la source