différence entre fork et branch sur github


127

Si je fork un projet hébergé sur github. Dois-je fourcher toutes les branches? Comment savoir sur quelle branche mon fork est basé? En d'autres termes, quelle branche sera téléchargée sur mon PC?


1
Explication simple en anglais: une branche est comme un fork qui provient d'un fork parent. Un fork est comme une branche qui n'a pas de branche parente.
Ken Kin

Réponses:


41

Toutes les branches sur GitHub seront copiées dans un fork. (Évidemment, cela n'inclut pas les branches qui n'ont jamais été poussées vers GitHub en premier lieu.)

Mais un fork est une opération GitHub-to-GitHub; rien n'est copié sur votre PC. Ce n'est pas tout à fait la même chose qu'un clone Git . Si vous voulez demander «qu'est-ce qui est copié lorsque je cloné un projet?», Consultez le manuel de git-clone(1).


153

Pense-y de cette façon:

Le repo [sitory] correspond au travail collaboré de l'équipe sur une ou plusieurs branches. Tous les contributeurs en ont leur propre copie.

Chaque fourchette du repo principal correspond au travail d'un contributeur. Un fork est en fait une construction Github (pas Git) pour stocker un clone du dépôt dans votre compte utilisateur. En tant que clone, il contiendra toutes les branches du repo principal au moment où vous avez créé le fork.

Chaque branche dans le fork et / ou dans le repo principal peut correspondre à plusieurs types de choses, selon la façon dont vous voulez travailler. Chaque branche peut faire référence à une version du projet mais peut également correspondre à différents canaux de développement, comme des correctifs ou des travaux expérimentaux.

La pull request (dans l'écosystème GitHub) correspond à la tâche. Chaque fois que je souhaite contribuer une tâche terminée isolée au référentiel principal, je crée une pull request correspondant aux validations effectuées dans cette tâche. Ces validations sont extraites de ma fourchette ou de ma branche vers le repo principal .

Un commit est un ensemble de modifications du code. C'est l'une des choses les plus intéressantes à propos de Git. Vous ne transférez pas de fichiers, vous transférez les journaux des modifications.


4
J'ai aimé la façon dont vous avez expliqué tous les bits pertinents tels que le mappage de demande d'extraction vers fork / branch. "vous ne transférez pas de fichiers, vous transférez les logs des changements" ... je le savais déjà mais cette phrase est parfaite!
harshvchawla

2
plus-un pour clarifier que fork est un github, pas git. Merci!
emery.noel

10

Fork est un clone côté GitHub (il clone tout).
Lorsque vous clonez un repo, vous obtenez l'historique complet dudit repo, avec toutes ses branches.

Même si vous pouvez en théorie modifier la branche par défaut d'un référentiel distant , un clone d'un référentiel GitHub recherche principalement la branche principale. Cela signifie que pour changer la branche "par défaut" qu'un clone GitHub obtiendra, vous devez renommer la branche principale.


Ainsi, lorsque je cloné le dépôt fourchu (le télécharger efficacement sur mon PC), toutes les branches sont-elles sur mon PC? Mais dans une branche, des fichiers supplémentaires ont été ajoutés. Mon PC aura-t-il ces fichiers ou non?
Jonathan.

1
@Jonathan: votre PC obtiendra toutes les branches avec tous les fichiers. Mais votre répertoire de travail (l'espace où vous récupérez l' une de ces branches) sera en fait le seul espace où vous verrez ces fichiers.
VonC

Alors, où les autres fichiers seront-ils réellement stockés dans le dossier .git?
Jonathan.

@Jonathan: en tant qu'objets en vrac ou emballés, voir book.git-scm.com/7_how_git_stores_objects.html (les objets étant un blob (vos "fichiers"), un arbre, un commit ou une balise: book.git-scm.com/ 1_the_git_object_model.html )
VonC

4

Si vous forkez un projet, vous faites une copie de l'ensemble du projet sur votre compte git hub. vous ne copiez rien sur votre PC

Pour faire une copie sur votre PC, vous devez le cloner et extraire tout le contenu et vous obtiendrez toutes les branches et le code de ce projet


2

Si vous créez un fork d'un projet à partir du site Web Github, vous obtenez toutes les branches du projet en amont.

Si vous clonez de votre fourchette nouvellement créée sur votre PC local, vous aurez la origintélécommande sur votre PC pointant vers la branche principale de votre fourchette sur Github.


Selon la page Help.GitHub Forking un projet , la création de la upstreambranche est quelque chose que vous devez faire; et ils vous disent comment le faire.
JC Salomon

2
C'est une télécommande, pas une succursale.
Arrowmaster

1

Cela s'explique très bien. Vous avez un référentiel central sur GitHub. Chaque fois que vous en prenez un clone sur votre ordinateur personnel pour apporter des modifications, ce clone local du référentiel principal est appelé un fork.

La branche est quelque chose de différent et est incluse dans le fork / repo. En fait, la branche est votre travail à différents stades de développement. Ils sont créés au fur et à mesure des besoins pour sauvegarder un ensemble de fonctionnalités, pour donner accès à différents utilisateurs, pour démontrer le site au client, etc.


1

Je voudrais partager un exemple concret de quand nous utilisons Branches et quand nous utilisons Forks

Nous avons GitLab dans notre boutique et parfois nous devons travailler sur des packages d'un projet Laravel. Nous créons normalement une branche et envoyons les modifications à la branche que nous avons testée dans notre environnement de développement VM local lorsque nous travaillons avec le projet Laravel.

Disons que notre projet est situé à

https://github.com/yardpenalty/mainproject.git

Utilisation de la succursale:

Disons que la branche est appelée It_doesnt_matter

Une fois que nous avons notre branche comme nous le souhaitons pour la production, nous effectuons notre dernière poussée vers cette branche et créons une demande de fusion qui va ensuite dans UAT pour le test.Une fois le test passé par QC, les changements sont fusionnés dans la production.

La fusion de la It_doesnt_matter branche est maintenant poussée vers le projet maître

à https://github.com/yardpenalty/mainproject.git

Disons que le projet de package est situé à

https://github.com/yardpenalty/mypackage.git

Gardez à l'esprit que le projet principal utilise ce package en production, nous ne pouvons donc pas apporter de modifications en les poussant simplement vers ce package (entre autres raisons). Disons qu'un développeur Web doit modifier ce package pour apporter des modifications à la production.

Une simple branche ne fonctionnera pas non plus car nous ne pouvons pas voir nos modifications sans publier le package, etc.

Utilisation de Fork: C'est maintenant que nous devons faire un peu de supercherie avec notre package afin de créer un clone du package de production via un fork. Les fichiers composer.json peuvent être mis à jour pour pointer vers le fork qui se trouve maintenant sur un chemin utilisateur ou groupe

Nous allons donc créer une fourchette dans https://github.com/yardpenalty/mypackage.git

et l'appelle https://github.com/yardpenalty/yards/mypackage.git

Nous pouvons maintenant mettre à jour notre fichier composer.json pour qu'il pointe vers ce paquet dans nos "dépôts": [tableau comme tel et c'est parti!

 {
            "type": "github",
            "url": "https://github.com/yardpenalty/yard/mypackage.git"
 }

]

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.