Czy widelce Gita są faktycznie klonami Gita?

Ciągle słyszę, jak ludzie mówią, że rozwidlają kod w git. Git "fork" brzmi podejrzanie jak git "clone" plus jakaś (bezsensowna) psychologiczna chęć rezygnacji z przyszłościowych połączeń. W git nie ma polecenia fork, prawda?

Github sprawia, że widelce są bardziej realne, zszywając na nie korespondencję. Oznacza to, że naciskasz przycisk widelca, a później, po naciśnięciu przycisku pull request, system jest wystarczająco inteligentny, aby wysłać wiadomość e-mail do właściciela. W związku z tym, jest to trochę tańca wokół repo własność i uprawnienia.

Tak/Nie? Jakiś niepokój o Github rozszerzający Gita w tym kierunku? Albo jakieś plotki o absorbowaniu funkcjonalności przez git?

Author: Madara Uchiha, 2011-06-09

10 answers

Fork , w kontekście GitHub, nie rozszerza Git.
Pozwala na klonowanie tylko po stronie serwera.

Kiedy sklonujesz repo na Githubie na lokalnej stacji roboczej, nie możesz wnieść wkładu z powrotem do repo, chyba że jesteś wyraźnie zadeklarowany jako "współpracownik". To dlatego, że Twój klon jest osobną instancją tego projektu. Jeśli chcesz wnieść swój wkład do projektu, możesz użyć forkingu, aby to zrobić, w następujący sposób:

  • Sklonuj repo Githuba na swoim Githubie konto (to jest część "fork" , klon po stronie serwera)
  • contribute commits to that GitHub repo (jest na twoim własnym koncie GitHub, więc masz pełne prawo do tego)
  • sygnalizować każdy interesujący wkład z powrotem do oryginalnego repo GitHub (czyli "pull request" część na podstawie zmian, które wprowadziłeś na swoim Githubie repo)

Sprawdź także " Collaborative GitHub Workflow".

Jeśli chcesz zachować link w przypadku oryginalnego repo (zwanego również upstream), musisz dodać zdalny odsyłający do oryginalnego repo.
Zobacz " Jaka jest różnica między origin a upstream w github "

fork and upstream

I z Git 2.20 (Q4 2018) i więcej, pobieranie z forka jest bardziej wydajne, Z delta islands.

 849
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-22 16:42:57
Ciągle słyszę, jak ludzie mówią, że rozwidlają kod w git. Git "fork" brzmi podejrzanie jak git "clone" plus jakaś (bezsensowna) psychologiczna chęć rezygnacji z przyszłościowych połączeń. W git nie ma polecenia fork, prawda?
Myślę, że masz zabawny pomysł, co znaczy "rozwidlenie". Jest to koncepcja, a nie polecenie wspierane przez jakikolwiek system kontroli wersji. Najprostszy rodzaj rozwidlenia jest synonimem rozgałęzienia. Za każdym razem, gdy tworzysz gałąź, niezależnie od twoich VC, "rozwidlałeś" się. Te widelce są zwykle dość łatwe do połączenia z powrotem.

Rodzaj widelca, o którym mówisz, gdzie oddzielna strona bierze pełną kopię kodu i odchodzi, koniecznie dzieje się poza VCS w scentralizowanym systemie, takim jak Subversion. Rozproszony VCS, taki jak Git, ma znacznie lepsze wsparcie dla rozwidlenia całej bazy kodowej i skutecznego rozpoczęcia nowego projektu.

Git (nie GitHub) natywnie obsługuje "rozwidlanie" całego repo (czyli klonowanie) na kilka sposobów:

    Kiedy klonujesz, Pilot o nazwie origin jest tworzony dla ciebie
  • domyślnie wszystkie gałęzie w klonie będą śledzić swoje origin odpowiedniki
  • pobieranie i łączenie zmian z oryginalnego projektu jest trywialnie proste

Git sprawia, że wprowadzanie zmian z powrotem do źródła forka jest tak proste, jak poproszenie kogoś z oryginalnego projektu o wyciągnięcie od ciebie, lub zażądanie dostępu do zapisu do wypychanych zmian cofnij się. Jest to część, którą GitHub ułatwia i standaryzuje.

Jakiś problem z Githubem rozszerzającym Gita w tym kierunku? Albo jakieś plotki o absorbowaniu funkcjonalności przez git?

Nie ma żadnego gniewu, ponieważ twoje założenie jest błędne. GitHub "rozszerza" funkcjonalność rozwidlania Gita z ładnym GUI i ustandaryzowanym sposobem wysyłania żądań pull, ale nie dodaje funkcjonalności do Gita. Koncepcja full-repo-forking jest wypiekana w prawo do rozproszona Kontrola wersji na poziomie podstawowym. Możesz porzucić GitHub w dowolnym momencie i nadal wciskać / ciągnąć projekty, które "rozwidlałeś".
 120
Author: meagar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-07 13:05:17

Yes Fork jest klonem. Powstała, ponieważ nie można przerzucać do kopii innych bez ich zgody. To, co robią, to robią kopię dla Ciebie (fork), gdzie będziesz miał również uprawnienia do zapisu.

W przyszłości, jeśli rzeczywisty właściciel lub inni użytkownicy z widelcem takim jak twoje zmiany, mogą go wycofać do własnego repo. Alternatywnie możesz wysłać im "pull-request".

 70
Author: ssapkota,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-10 03:35:04

"Fork" w tym kontekście oznacza "zrobić kopię ich kodu, abym mógł dodać własne modyfikacje". Nie ma nic więcej do powiedzenia. Każdy klon jest zasadniczo widelcem i to od oryginału zależy, czy wyciągnąć zmiany z widelca.

 37
Author: Daenyth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-08 23:51:58

Klonowanie polega na zrobieniu kopii repozytorium git na lokalnym komputerze, podczas gdy forking klonuje repozytorium do innego repozytorium. Klonowanie jest tylko do użytku osobistego (chociaż w przyszłości mogą wystąpić merge), ale z forking kopiujesz i otwierasz nową możliwą ścieżkę projektu

 24
Author: Sam Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-09 00:24:57

Myślę, że fork jest kopią innego repozytorium, ale z modyfikacją konta. na przykład, jeśli bezpośrednio sklonujesz inne repozytorium lokalnie, zdalny obiekt origin nadal korzysta z konta, z którego sklonujesz. Nie możesz zatwierdzić I dodać swojego kodu. To tylko czysta Kopia kodów. W przeciwnym razie, jeśli rozwidlisz repozytorium, sklonuje ono repo wraz z aktualizacją ustawień Twojego konta na twoim koncie github. A następnie klonowanie repo w kontekście konta, można zatwierdzić swoje kody.

 10
Author: Daniel Shen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-04 19:30:37

Rozwidlanie odbywa się wtedy, gdy zdecydujesz się przyczynić do jakiegoś projektu. Zrobiłbyś kopię całego projektu wraz z jego dziennikami historii. Kopia ta jest wykonana w całości w repozytorium, a po wprowadzeniu tych zmian wydajesz żądanie pull request. Teraz jego do właściciela źródła, aby zaakceptować żądanie pull i włączyć zmiany do oryginalnego kodu.

Git clone jest rzeczywistym poleceniem, które pozwala użytkownikom uzyskać kopię źródła. git clone [URL] To powinno utworzyć kopię [URL] we własnym repozytorium lokalnym.

 10
Author: aliasav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-11 18:40:02

Pomijając fakt, że klonowanie odbywa się z serwera na twoją maszynę, a forking robi kopię na samym serwerze, ważną różnicą jest to, że kiedy klonujemy, otrzymujemy wszystkie gałęzie, etykiety itp. Ale kiedy rozwidlamy, dostajemy tylko aktualne pliki w gałęzi master, nic poza tym. Oznacza to, że nie dostajemy innych gałęzi itp. Dlatego jeśli musisz scalić coś z powrotem do oryginalnego repo, jest to połączenie między-repo i na pewno będzie wymagało wyższego przywileje.

Fork nie jest poleceniem w git, jest tylko koncepcją implementowaną przez Github. Pamiętaj, Git został zaprojektowany do pracy w środowisku peer to peer bez potrzeby synchronizacji rzeczy z dowolną kopią nadrzędną. Serwer jest tylko kolejnym peerem, ale patrzymy na niego jak na kopię nadrzędną.

 8
Author: Deepak G M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-23 05:51:32

Jest tu nieporozumienie co do tego, czym jest" widelec". Widelec jest w rzeczywistości niczym więcej niż zestawem gałęzi dla każdego użytkownika. Kiedy naciskasz na widelec, faktycznie naciskasz na oryginalny repo, ponieważ jest to jedyny repo.

Możesz to wypróbować, naciskając na fork, zauważając commit, a następnie przechodząc do oryginalnego repo i używając identyfikatora commita, zobaczysz, że commit jest "w" oryginalnym repo.

To ma sens, ale daleki jest od oczywistości (ja tylko odkrył to przypadkowo niedawno).

Kiedy John forks repo SuperProject wydaje się, że faktycznie dzieje się to, że wszystkie gałęzie w źródłowym repo są replikowane z nazwą w stylu " John.master " i " John.new_gui_project " itd.

Github "ukrywa" Johna."od nas i daje nam iluzję mamy własną "kopię" repo w Githubie, ale nie mamy i nie jest nawet potrzebna.

Więc gałąź mojego widelca "master" nazywa się " Korporal.master " ale Github UI nigdy ujawnia to, pokazując mi tylko "mistrza".

To jest prawie to, co myślę, że dzieje się pod maską w oparciu o rzeczy, które robiłem Ostatnio i kiedy się nad tym zastanowić, jest bardzo dobry projekt.

Z tego powodu myślę, że bardzo łatwo byłoby Microsoftowi zaimplementować Git forks w swojej ofercie Usług Visual Studio Team.

 3
Author: Hugh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-26 18:38:05

Mówiąc najprościej,

Kiedy mówisz, że jesteś Rozwidlaniem repozytorium, w zasadzie tworzysz kopię oryginalnego repozytorium pod swoim identyfikatorem GitHub na swoim koncie Github.

I

Kiedy mówisz, że jesteś klonowaniem repozytorium, tworzysz lokalną kopię oryginalnego repozytorium w swoim systemie(pc/lappy) bezpośrednio bez posiadania kopii na koncie Github.

 0
Author: anoNewb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-04 12:42:44