Je n'arrête pas d'entendre des gens dire qu'ils bifurquent du code dans Git. Git "fork" ressemble étrangement à Git "clone" plus une certaine volonté psychologique (sans signification) de renoncer aux futures fusions. Il n'y a pas de commande fork dans Git, non?
GitHub rend les fourches un peu plus réelles en y agrafant de la correspondance. Autrement dit, vous appuyez sur le bouton de fourche et plus tard, lorsque vous appuyez sur le bouton de demande de traction, le système est suffisamment intelligent pour envoyer un e-mail au propriétaire. Par conséquent, c'est un peu une danse autour de la propriété et des autorisations du référentiel.
Oui Non? Une angoisse sur GitHub étendant Git dans cette direction? Ou des rumeurs selon lesquelles Git absorbe la fonctionnalité?
--reference
utilisé. La façon exacte dont les dépôts et suppressions publics sont traités n'est pas du tout claire (déplacer les remplaçants vers un référentiel promu choisi au hasard? Pointer toutes les fourchettes vers un remplaçant commun qui ne fait pas partie de la fourche d'origine?), Mais l'utilisation d'alternatives explique divers comportements observables.Réponses:
Fork , dans le contexte GitHub, n'étend pas Git.
Il autorise uniquement le clonage côté serveur.
Lorsque vous clonez un référentiel GitHub sur votre poste de travail local, vous ne pouvez pas contribuer à nouveau au référentiel en amont, sauf si vous êtes explicitement déclaré comme "contributeur". C'est parce que votre clone est une instance distincte de ce projet. Si vous souhaitez contribuer au projet, vous pouvez utiliser forking pour le faire, de la manière suivante:
Vérifiez également " Workflow collaboratif GitHub ".
Si vous souhaitez conserver un lien avec le référentiel d'origine (également appelé en amont), vous devez ajouter une télécommande référençant ce référentiel d'origine.
Voir " Quelle est la différence entre l'origine et l'amont sur GitHub? "
Et avec Git 2.20 (Q4 2018) et plus, la récupération depuis la fourche est plus efficace, avec les îles delta .
la source
"Forking" est un concept, pas une commande spécifiquement prise en charge par un système de contrôle de version.
Le type de fourche le plus simple est synonyme de ramification. Chaque fois que vous créez une branche, quel que soit votre VCS, vous avez "fourchu". Ces fourches sont généralement assez faciles à fusionner.
Le type de fourchette 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 un bien meilleur support pour bifurquer la base de code entière et démarrer efficacement un nouveau projet.
Git (et non GitHub) prend en charge nativement le "forking" d'un dépôt entier (c'est-à-dire le clonage) de deux manières:
origin
est créée pour vousorigin
équivalentsGit rend les modifications apportées à la source du fork aussi simples que de demander à quelqu'un du projet d'origine de vous retirer ou de demander un accès en écriture pour repousser les modifications vous-même. C'est la partie que GitHub facilite et standardise.
Il n'y a pas d'angoisse parce que votre hypothèse est fausse. GitHub « étend » la fonctionnalité de fork Git avec une interface graphique agréable et d' une manière standardisée d'émettre des demandes de tirage, mais il n'a pas ajouter la fonctionnalité à Git. Le concept de repo-forking complet est directement intégré au contrôle de version distribué à un niveau fondamental. Vous pouvez abandonner GitHub à tout moment et continuer à pousser / tirer des projets que vous avez "bifurqués".
la source
X project
sur ma machine. Si j'apporte des modifications dans mon local et que je n'ai pas accès en écriture à l'origine, j'enverrai un e-mail à l'auteur du projet pour demander un pull. Il fera une télécommande appelée gideon qui sera une URL pour mon clone local, et il peut tirer, non?Oui, fork est un clone. Il est apparu parce que vous ne pouvez pas pousser les copies des autres sans leur permission . Ils en font une copie pour vous ( fork ), où vous aurez également la permission d'écrire.
À l'avenir, si le propriétaire réel ou d'autres utilisateurs avec un fork aiment vos modifications, ils peuvent le récupérer dans leur propre référentiel. Vous pouvez également leur envoyer une "pull-request".
la source
fork
signifie qu'il existe une copie de votre travail sur le serveur GitHub, que vous pouvezpush
consulter et à laquelle d'autres ont accès par URL pour qu'ils puissentpull
. Lepull request
est juste un moyen standard de leur envoyer l'URL de votre copie (sur GitHub) afin qu'ils puissent facilement la glisser dans leur référentiel."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 une fourchette, et c'est à l'original de décider de retirer ou non les modifications de la fourchette.
la source
on the GitHub server
afin que je puisse ajouter mes propres modificationsand others can have URL access to my version
". La plupart des postes de travail locaux n'offrent pas d'accès URL pour que quiconque puisse tirer. Mais si vous poussez vers votre fork sur le serveur, ils peuvent avoir l'URL pour le pull.Le clonage implique de faire une copie du référentiel git sur une machine locale, tandis que forking clone le référentiel dans un autre référentiel. Le clonage est réservé à un usage personnel (bien que de futures fusions puissent se produire), mais avec la fourche, vous copiez et ouvrez un nouveau chemin de projet possible
la source
Le fork est fait lorsque vous décidez de contribuer à un projet. Vous feriez une copie de l'ensemble du projet avec ses journaux d'historique. Cette copie est entièrement effectuée dans votre référentiel et une fois que vous avez effectué ces modifications, vous émettez une demande de tirage. Il appartient maintenant au propriétaire de la source d'accepter votre demande d'extraction et d'incorporer les modifications dans le code d'origine.
Git clone est une commande réelle qui permet aux utilisateurs d'obtenir une copie de la source. git clone [URL] Cela devrait créer une copie de [URL] dans votre propre référentiel local.
la source
Je pense que fork est une copie d'un autre référentiel mais avec la modification de votre compte. par exemple, si vous clonez directement un autre référentiel localement, l'origine de l'objet distant utilise toujours le compte à partir duquel vous clonez. Vous ne pouvez pas valider et contribuer votre code. Ce n'est qu'une pure copie de codes. Sinon, si vous créez un référentiel, il clonera le dépôt avec la mise à jour des paramètres de votre compte dans votre compte github. Et puis en clonant le dépôt dans le contexte de votre compte, vous pouvez valider vos codes.
la source
Il y a un malentendu ici en ce qui concerne ce qu'est une «fourchette». Un fork n'est en fait rien de plus qu'un ensemble de branches par utilisateur. Lorsque vous poussez vers un fork, vous poussez réellement vers le référentiel d'origine, car il s'agit du SEUL référentiel.
Vous pouvez essayer cela en poussant vers une fourchette, en notant la validation, puis en vous rendant dans le référentiel d'origine et en utilisant l'ID de validation, vous verrez que la validation est "dans" le référentiel d'origine.
Cela a beaucoup de sens, mais c'est loin d'être évident (je ne l'ai découvert que accidentellement récemment).
Lorsque John forks repository SuperProject, ce qui semble réellement se produire, c'est que toutes les branches du référentiel source sont répliquées avec un nom comme "John.master", "John.new_gui_project", etc.
GitHub "cache" le "John". de nous et nous donne l'illusion que nous avons notre propre "copie" du référentiel sur GitHub, mais nous n'en avons pas et nous n'en avons même pas besoin.
Ainsi, la branche de ma fourchette "master" est en fait nommée "Korporal.master", mais l'interface utilisateur de GitHub ne le révèle jamais, ne me montrant que "master".
C'est à peu près ce que je pense de toute façon sous le capot, basé sur des choses que j'ai faites récemment et quand vous y réfléchissez, c'est un très bon design.
Pour cette raison, je pense qu'il serait très facile pour Microsoft d'implémenter les fourches Git dans leur offre Visual Studio Team Services.
la source
git clone
un tout nouveau référentiel (même un "nu") chaque fois que quelqu'un appuie sur le bouton "fork" - ce serait un gaspillage de stockage incroyable, et probablement un vecteur d'attaque également .Mis à part le fait que le clonage s'effectue du serveur vers votre machine et que forking effectue une copie sur le serveur lui-même, une différence importante est que lorsque nous clonons, nous obtenons en fait toutes les branches, étiquettes, etc.
Mais lorsque nous bifurquons, nous n'obtenons en fait que les fichiers actuels dans la branche master, rien d'autre. Cela signifie que nous n'obtenons pas les autres succursales, etc.
Par conséquent, si vous devez fusionner quelque chose dans le référentiel d'origine, il s'agit d'une fusion inter-référentiel et nécessitera certainement des privilèges plus élevés.
Fork n'est pas une commande dans Git; c'est juste un concept que GitHub implémente. N'oubliez pas que Git a été conçu pour fonctionner dans un environnement peer-to-peer sans avoir besoin de synchroniser des éléments avec une copie principale. Le serveur n'est qu'un autre pair, mais nous le considérons comme une copie principale.
la source
git branch -a
.En termes plus simples,
Quand tu dis que tu bifurques un référentiel, vous créez essentiellement une copie du référentiel d'origine sous votre ID GitHub dans votre compte GitHub.
et
Lorsque vous dites que vous clonez un référentiel, vous créez une copie locale du référentiel d'origine dans votre système (PC / ordinateur portable) directement sans avoir de copie dans votre compte GitHub.
la source