J'aimerais en savoir plus sur les avantages et les inconvénients de forger un projet github par rapport à la création d'une branche d'un projet github.
Forking rend ma version du projet plus isolée de la version originale car je n'ai pas besoin de figurer sur la liste des collaborateurs du projet d'origine. Depuis que nous développons un projet en interne, il n’ya aucun problème à ajouter des personnes en tant que collaborateurs. Cependant, nous aimerions comprendre si le fait de créer un projet rendrait plus difficile la fusion des modifications apportées au projet principal. Autrement dit, je me demande si la création de branches facilite la synchronisation des deux projets. En d'autres termes, est-il plus facile de fusionner et de transférer des modifications entre ma version du projet principal et le projet principal lorsque je crée une branche?
Vous ne pouvez pas toujours créer une branche ou extraire une branche existante et y accéder de nouveau, car vous n'êtes pas inscrit en tant que collaborateur pour ce projet spécifique.
Le fork est simplement un clone du côté du serveur GitHub:
Vous gardez une fourchette en phase avec le projet d'origine en:
La nouvelle base vous permet de vous assurer que vos modifications sont simples (pas de 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 le référentiel deux _ "central" ("central" en tant que "visible de plusieurs collaborateurs).
Si vous pouvez les ajouter directement en tant que collaborateur pour un projet un, vous n'avez pas besoin d'en gérer un autre avec un fork.
L'expérience de fusion serait à peu près la même chose, mais avec un niveau d'indirection supplémentaire (appuyer d'abord sur la fourche, puis demander un pull, avec le risque d'évolution sur le référentiel d'origine rendant plus rapide la fusion accélérée) .
Cela signifie que le flux de travail correct est git pull --rebase upstream
(rebassez votre travail par-dessus les nouveaux commits en amont), puis git Push --force Origin
, afin de réécrire l'historique de telle manière que vos propres commits soient toujours au-dessus des commits du repo d'origine (en amont).
Voir également:
Voici les différences de haut niveau:
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 les branches, car vous ne voudriez accorder à personne l'autorisation de pousser vers la branche principale, par exemple.
Le schéma général est le suivant:
Sans cela, il est assez inhabituel que des projets publics laissent directement à qui que ce soit leur propre engagement.
Forking crée un dépôt entièrement nouveau à partir d'un dépôt existant (il suffit de faire un clonage de git sur gitHub/bitbucket)
Les fourchettes sont mieux utilisées: lorsque l’intention de la division est de créer un projet logiquement indépendant, qui ne pourra jamais être réuni avec son parent.
La stratégie de branche crée une nouvelle branche sur le référentiel existant/actif
Les branches sont mieux utilisées: lorsqu'elles sont créées en tant qu'emplacements temporaires pour travailler sur une fonctionnalité, dans le but de fusionner la branche avec l'origine.
Plus spécifique: - Dans les projets open source, c'est le propriétaire du référentiel qui décide qui peut accéder au 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 des fourchettes: chaque fois qu'un développeur souhaite modifier quelque chose dans un projet open source, il ne clone pas directement le référentiel officiel. Au lieu de cela, ils le bifurquent pour créer une copie. Lorsque le travail est terminé, ils effectuent 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.
En principe, le forking est similaire à la création de branches, mais au lieu de créer des branches, un fork du référentiel est créé 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/