web-dev-qa-db-fra.com

Quelle est la différence entre Forking et Cloning sur GitHub?

J'aimerais connaître les différences entre faire un fork d'un projet et en faire un clone.

Puis-je envoyer des demandes de tirage via GitHub uniquement si j'ai créé un projet?

173
Steve Dunn

En gros oui. A fork est juste une demande pour que GitHub clone le projet et l'enregistre sous votre nom d'utilisateur; GitHub garde également une trace de la relation entre les deux référentiels afin que vous puissiez visualiser les commits et les tractions entre les deux projets (et d’autres forks).

Vous pouvez toujours demander à des personnes d'extraire de votre référentiel cloné, même si vous n'utilisez pas fork - mais vous devez vous assurer de le rendre vous-même accessible au public. Ou envoyez aux développeurs les correctifs (voir git format-patch) qu'ils peuvent appliquer à leurs arbres.

107
michel-slm

Lorsque vous dites que vous êtes un référentiel , vous créez une copie du référentiel sous votre identifiant GitHub. Le point principal à noter ici est que toutes les modifications apportées au référentiel d'origine seront répercutées dans vos référentiels forkés (vous devez extraire et rebaser). Toutefois, si vous apportez des modifications à votre référentiel forké , vous devrez explicitement créer une demande d'extraction dans le référentiel original . Si votre demande d'extraction est approuvée par l'administrateur du référentiel d'origine , vos modifications seront validées/fusionnées avec l'original d'origine . base de code. Jusque-là, vos modifications ne seront reflétées que dans la copie que vous avez branchée .

En bref:

Le modèle Fork & Pull permet à quiconque de bifurquer un référentiel existant et de transférer les modifications dans leur branche personnelle sans qu'il soit nécessaire d'accéder au référentiel source. Les modifications doivent ensuite être extraites dans le référentiel source par le responsable du projet.

Notez qu’après la conversion, vous pouvez cloner votre référentiel (celui sous votre nom) localement sur votre ordinateur. Apportez des modifications et transférez-le dans votre référentiel forké. Toutefois, pour refléter vos modifications dans le référentiel d'origine, votre demande d'extraction doit être approuvée.

Quelques autres discussions intéressantes -

Les fourches git sont-elles réellement des clones git?

Comment puis-je mettre à jour un dépôt GitHub forké?

128
Aniket Thakur
  • Le projet Forked se trouve sur votre référentiel en ligne (repo).
  • Le projet cloné est sur votre ordinateur local (je clone généralement après avoir bricolé le dépôt).

Vous pouvez vous engager sur votre référentiel en ligne (ou sur votre référentiel local, puis sur Push vers votre référentiel en ligne), puis envoyer une demande d'extraction.

Le chef de projet peut l’accepter pour que vos modifications soient apportées dans sa version principale en ligne.

24
Alisa

Un clone est l'endroit où vous avez une duplication appropriée et une séparation entre deux versions (éventuellement différentes) d'un référentiel. Lorsqu'un rapport est modifié, le nouveau contenu doit être activement copié dans l'autre rapport à l'aide d'une commande Push. Et les changements dans l'autre repo récupérés.

Lorsque vous branchez un référentiel sur un serveur, il n'est pas nécessaire de dupliquer le contenu, car les deux référentiels utiliseront le même contenu [objet fixe] à partir du même serveur. Le "truc" consiste à gérer les différents points de vue des utilisateurs, de sorte que chaque utilisateur estime disposer d'une copie personnelle complète du rapport. Les poussées et les extractions entre les fourches mettent simplement à jour les pointeurs de l'utilisateur.

À un niveau inférieur, git fait la même chose en interne. Si vous avez trois fichiers différents, chacun contenant Hello World, alors git 'tout simplement' sa seule copie du blob Hello World et l'offrira à chacun des trois endroits souhaités.

La possibilité de faire des transferts sur le serveur signifie que la capacité de stockage importante de Github n’est pas aussi importante en moyenne, chaque corps partageant le même référentiel sous-jacent.

14
Philip Oakley

En résumé, Forking est peut-être la même chose que "cloner sous votre identifiant/profil GitHub". Un fork est toujours meilleur qu'un clone, à quelques exceptions près, évidemment. Le référentiel forké est toujours surveillé/comparé au référentiel d'origine contrairement à un référentiel cloné. Cela vous permet de suivre les modifications, d'initier des demandes d'extraction et de synchroniser manuellement les modifications apportées dans le référentiel d'origine avec celui que vous avez créé.

6
Farhan Haque

Au cas où vous auriez fait ce que le questionneur a laissé entendre (oublié de bifurquer et cloné localement un référentiel, apporté des modifications et devant désormais émettre une demande de tirage), vous pouvez revenir sur la bonne voie:

  1. créer le repo auquel vous voulez envoyer une demande de tirage
  2. Poussez vos modifications locales sur votre télécommande
  3. demande de tirage
3
Princess Ruthie

Une autre différence subtile étrange sur GitHub est que les modifications apportées aux forks ne sont pas comptabilisées dans votre journal d'activité tant que vos modifications ne sont pas entrées dans le référentiel d'origine. De plus, pour changer un fork en un clone approprié, vous devez apparemment contacter le support de Github.

De Pourquoi mes contributions n'apparaissent-elles pas :

Commit a été fait dans une fourchette

Les commits faits dans une fourchette ne compteront pas dans vos contributions. Pour les faire compter, vous devez effectuer l’une des opérations suivantes:

Ouvrir une requête d'extraction pour que vos modifications soient fusionnées dans le référentiel parent. Pour détacher la fourche et la transformer en un référentiel autonome sur GitHub, contactez support GitHub . Si la fourche a ses propres fourchettes, informez le support technique si elles doivent se déplacer avec votre référentiel vers un nouveau réseau ou rester sur le réseau actuel. Pour plus d'informations, voir " À propos des forks ".

3
BJennings

Alors que la réponse de @ AniketThakur est très bonne. Personne n'a encore répondu à la question suivante.

Puis-je envoyer des demandes de tirage via GitHub uniquement si j'ai créé un projet?

Non. Si vous contribuez à un référentiel, vous pouvez: Créer un clone local. Faire une branche locale. Ajoutez des commits à cette branche. Repoussez la branche locale dans github (création d'une branche distante dans le processus). Faites une demande d'extraction en demandant que cette branche soit fusionnée dans la branche principale (ou selon la branche de votre choix).

3
Theodore Norvell

En résumé, "fork" crée une copie du projet hébergé sur votre propre compte GitHub.

"Clone" utilise le logiciel git sur votre ordinateur pour télécharger le code source et l'historique complet de ses versions sur cet ordinateur.

2
Tester Man