865 votes

Les fourches de Git sont-elles en fait des clones de Git ?

Je continue à entendre des gens dire qu'ils forkent du code dans Git. Le terme "fork" de Git ressemble étrangement au terme "clone" de Git, plus une volonté psychologique (sans signification) de renoncer aux fusions futures. Il n'y a pas de commande fork dans Git, n'est-ce pas ?

GitHub rend les fourches un peu plus réelles en y agrafant la correspondance. En d'autres termes, vous appuyez sur le bouton fork et plus tard, lorsque vous appuyez sur le bouton pull request, le système est suffisamment intelligent pour envoyer un courriel au propriétaire. Il s'agit donc d'une petite danse autour de la propriété du dépôt et des permissions.

Oui/Non ? Y a-t-il des craintes que GitHub étende Git dans cette direction ? Ou des rumeurs selon lesquelles Git absorberait cette fonctionnalité ?

12 votes

Oui, c'est juste un type de clone qui est suivi par la base de données github.

16 votes

GitHub ne fait-il pas quelque chose de spécial pour éviter de doubler les besoins de stockage (sur les propres serveurs de GitHub) ?

21 votes

Pas encore mentionné : La suppression d'un repo privé supprime toutes ses fourches. La suppression d'un repo public conserve les forks mais promeut un fork pour être le nouveau repo parent. Si votre patron rend votre repo public privé, cela casse tous les forks existants et vous ne pourrez pas faire de demandes de pull depuis ceux-ci vers le repo privé. aide.github.com/articles/

973voto

VonC Points 414372

Fourche dans le contexte de GitHub, n'étend pas Git.
Il n'autorise le clonage que du côté du serveur.

Lorsque vous clonez un dépôt GitHub sur votre poste de travail local, vous ne pouvez pas contribuer au dépôt amont, sauf si vous êtes explicitement déclaré comme "contributeur". Cela s'explique par le fait que votre clone est une instance distincte de ce projet. Si vous souhaitez contribuer au projet, vous pouvez utiliser le forking pour le faire, de la manière suivante :

  • clonez ce dépôt GitHub sur votre compte GitHub (c'est le "Partie "fourchette un clone du côté serveur)
  • contribuer à ce dépôt GitHub (il se trouve dans votre propre compte GitHub, vous avez donc tout à fait le droit d'y pousser).
  • signaler toute contribution intéressante en la renvoyant au dépôt GitHub d'origine (c'est-à-dire le "partie "pull request par le biais des changements que vous avez effectués sur votre propre dépôt GitHub)

Voir aussi " Flux de travail collaboratif sur GitHub ".

Si vous voulez garder un lien avec le dépôt d'origine (également appelé amont), vous devez ajouter une référence distante à ce dépôt d'origine.
Voir " Quelle est la différence entre origin et upstream sur GitHub ? "

fork and upstream

Et avec Git 2.20 (Q4 2018) et plus, l'extraction à partir de la fourche est plus efficace, avec îles du delta .

7 votes

"Lorsque vous clonez un repo GitHub sur votre poste local, vous ne pouvez pas contribuer en retour au repo amont, sauf si vous êtes explicitement déclaré comme "contributeur"." --- Est-ce que cela n'est pas vrai avec la "forking" ? Veuillez expliquer.

66 votes

@TestSubject528491 non, avec un fork, cela signifie que vous clonez le repo amont en tant que votre propre du côté du serveur GitHub. Vous pouvez ensuite cloner localement ce nouveau dépôt "fork" sur votre ordinateur et le modifier librement, puisque vous êtes le créateur et le propriétaire de ce dépôt.

14 votes

Pour moi, le point clé est que vous ne pouvez pas soumettre un RP à partir de votre copie locale. à moins que vous ne soyez déclaré comme étant un contributeur . J'ai tellement l'habitude de soumettre des PR depuis mon repo local, mais c'est parce que je suis toujours marqué comme contributeur. Si vous y pensez, pour soumettre un PR, vous devez pousser une branche vers le repo distant et ensuite créer le PR. Je suppose que cela a du sens si vous ne voulez pas que des personnes aléatoires créent des branches sur votre repo. Et que vous préférez qu'ils le bifurquent et soumettent des PR de cette façon à la place.

144voto

meagar Points 85475

Je continue à entendre des gens dire qu'ils forkent du code dans git. Git "fork" ressemble étrangement à git "clone" plus une volonté psychologique (sans signification) de renoncer aux fusions futures. Il n'y a pas de commande fork dans git, n'est-ce pas ?

La "bifurcation" est un concept, et non une commande spécifiquement prise en charge par un système de contrôle de version.

Le type le plus simple de bifurcation est synonyme de branchement. Chaque fois que vous créez une branche, quel que soit votre VCS, vous avez "bifurqué". Ces bifurcations sont généralement assez faciles à fusionner à nouveau.

Le type de fork dont vous parlez, où une partie distincte prend une copie complète du code et s'en va, se produit nécessairement en dehors du VCS dans un système centralisé comme Subversion. Un VCS distribué comme Git a une bien meilleure prise en charge de la bifurcation de la base de code entière et du démarrage effectif d'un nouveau projet.

Git (pas GitHub) supporte nativement le "forking" d'un repo entier (c'est-à-dire le cloner) de plusieurs façons :

  • quand vous clonez, une télécommande appelée origin est créé pour vous
  • par défaut, toutes les branches du clone suivront leurs origin équivalents
  • récupérer et fusionner les modifications du projet original à partir duquel vous avez bifurqué est trivialement facile

Avec Git, il suffit de demander à un membre du projet d'origine de reprendre les sources de la bifurcation, ou de demander un accès en écriture pour reprendre les modifications. C'est cette partie que GitHub rend plus facile et standardise.

Des craintes concernant l'extension de git par Github dans cette direction ? Ou des rumeurs d'absorption de cette fonctionnalité par git ?

Il n'y a pas d'angoisse parce que votre hypothèse est fausse. GitHub "étend" la fonctionnalité de bifurcation de Git avec une interface graphique agréable et une manière standardisée d'émettre des demandes de retrait, mais il ne ajouter la fonctionnalité à Git. Le concept de full-repo-forking est intégré dans le contrôle de version distribué à un niveau fondamental. Vous pouvez abandonner GitHub à tout moment et continuer à pousser/tirer les projets que vous avez "bifurqués".

6 votes

Merci pour votre excellente réponse. Je veux juste clarifier, cela signifie, en dehors du contexte de github Je pourrais cloner quelques X project sur ma machine. Si j'apporte des modifications à mes fichiers locaux et n'ont pas écrire l'accès à l'origine, je vais envoyer un courriel à l'auteur du projet pour demander un pull. Il créera un fichier distant appelé gideon qui sera une url vers mon clone local, et il peut tirer, d'accord ?

1 votes

Si vous souhaitez apporter vos modifications à un projet, vous pouvez soit les sauvegarder dans des fichiers, par exemple en utilisant git format-patch, et les joindre à un courriel adressé à une personne disposant d'un accès en écriture, soit obtenir votre propre hébergement, y pousser votre travail et envoyer l'URL dans un courriel, par exemple en utilisant la commande git request-pull. Les dépôts sur les stations de travail ne sont généralement pas directement accessibles en ligne.

0 votes

Mais oui, si votre poste de travail est accessible par internet à l'auteur du projet, vous pouvez simplement lui envoyer l'URL et il pourra l'ajouter comme un poste distant et l'utiliser.

86voto

ssapkota Points 1781

Oui, la fourchette est un clone. Il est apparu parce que, vous ne pouvez pas pousser les copies des autres sans leur permission . Ils font un copie pour vous ( fourchette ), où vous aurez également la permission d'écrire.

À l'avenir, si le propriétaire actuel ou d'autres utilisateurs d'un fork apprécient vos modifications, ils pourront les transférer dans leur propre dépôt. Vous pouvez également leur envoyer une "pull-request".

1 votes

Puis-je simplement cloner le dépôt sur ma machine locale, créer une branche, puis soumettre une demande de pull au propriétaire d'origine ? Il semble redondant d'avoir plusieurs copies de dépôts hébergés sur GitHub, juste pour faciliter les mises à jour de code.

5 votes

@Casey Vous ne pouvez envoyer une demande de retrait via GitHub qu'à partir de GitHub lui-même et vous ne pouvez envoyer une demande de retrait GitHub qu'à partir d'une branche qui existe sur GitHub. Si vous n'êtes pas un collaborateur du dépôt en question, il n'y a aucun moyen pour vous de créer une branche à partir de laquelle vous pouvez lancer une demande de retrait GitHub. Rien ne vous empêche de le faire par courriel à l'ancienne, mais GitHub ne joue aucun rôle à cet égard.

3 votes

@Casey, a raison c'est que normalement les autres n'ont pas d'accès URL à votre poste de travail. Le site GitHub fork signifie qu'il y a une copie de votre travail sur le serveur GitHub, que vous pouvez push et à laquelle les autres ont accès par URL afin de pouvoir pull . Le site pull request est simplement un moyen standard de transmettre l'URL de votre copie (sur GitHub) afin qu'ils puissent facilement l'intégrer à leur dépôt.

39voto

Daenyth Points 11297

"Fork" dans ce contexte signifie "Faire une copie de leur code afin que je puisse ajouter mes propres modifications". Il n'y a pas grand chose d'autre à dire. Chaque clone est essentiellement un fork, et c'est à l'original de décider s'il faut retirer les modifications du fork.

5 votes

En particulier : "Faire une copie de leur code on the GitHub server afin que je puisse ajouter mes propres modifications and others can have URL access to my version ". La plupart des postes de travail locaux n'offrent pas d'accès URL permettant à quiconque de tirer. Mais si vous poussez vers votre fork sur le serveur, alors ils peuvent avoir l'URL pour le pull.

0 votes

La question ne porte pas sur le forking en général, mais sur le forking de GitHub en particulier.

27voto

Sam Johnson Points 192

Le clonage consiste à faire une copie du dépôt git sur une machine locale, tandis que la bifurcation consiste à cloner le dépôt dans un autre dépôt. Le clonage est réservé à un usage personnel (bien que des fusions futures puissent avoir lieu), mais avec la bifurcation, vous copiez et ouvrez un nouveau chemin de projet possible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X