Ciągle słyszę, jak ludzie mówią, że rozwidlają kod w Git. „Widelec” Gita brzmi podejrzanie jak „klon” Gita plus pewna (bezsensowna) psychologiczna chęć rezygnacji z przyszłych połączeń. W Git nie ma polecenia rozwidlenia, prawda?
GitHub sprawia, że widelce stają się bardziej realne poprzez zszywanie korespondencji. Oznacza to, że naciskasz przycisk rozwidlenia, a później, gdy naciśniesz przycisk żądania pociągnięcia, system jest wystarczająco inteligentny, aby wysłać e-maila do właściciela. Dlatego jest to trochę tańcem wokół posiadania i uprawnień repozytorium.
Tak nie? Jakiś niepokój związany z rozszerzeniem Git w tym kierunku przez GitHub? A może jakieś pogłoski o tym, że Git absorbuje funkcjonalność?
--reference
używanym. Dokładnie sposób, w jaki obsługiwane są repozytorium publiczne i skreślenia, nie jest wcale jasne (przesuwanie alternatyw do losowo wybranego promowanego repo? Wskazuje wszystkie rozwidlenia na jakąś wspólną alternatywę, która nie jest częścią oryginalnego rozwidlenia?), Ale użycie alternatywy wyjaśnia różne obserwowalne zachowania.Odpowiedzi:
Fork w kontekście GitHub nie rozszerza Git.
Pozwala tylko na klonowanie po stronie serwera.
Po sklonowaniu repozytorium GitHub na lokalnej stacji roboczej nie można wnosić wkładu do repozytorium nadrzędnego, chyba że zostanie wyraźnie zadeklarowany jako „współautor”. To dlatego, że twój klon jest osobną instancją tego projektu. Jeśli chcesz przyczynić się do projektu, możesz użyć forking, aby to zrobić, w następujący sposób:
Zobacz także „ Collaborative GitHub Workflow ”.
Jeśli chcesz zachować link do oryginalnego repozytorium (zwanego również nadrzędnym), musisz dodać zdalne odniesienie do tego oryginalnego repozytorium.
Zobacz „ Jaka jest różnica między źródłem a wyższym poziomem w GitHub? ”
A dzięki Git 2.20 (IV kwartał 2018 r.) I więcej pobieranie danych z widelca jest bardziej wydajne dzięki wyspom delta .
źródło
„Forking” to koncepcja, a nie polecenie obsługiwane przez jakikolwiek system kontroli wersji.
Najprostszy rodzaj rozwidlenia jest równoznaczny z rozgałęzianiem. Za każdym razem, gdy tworzysz oddział, niezależnie od VCS, „rozwidlasz”. Widelce te są zazwyczaj dość łatwe do scalenia.
Rodzaj rozwidlenia, o którym mówisz, w którym oddzielna strona bierze pełną kopię kodu i odchodzi, koniecznie dzieje się poza VCS w scentralizowanym systemie, takim jak Subversion. Rozproszony system VCS, taki jak Git, ma znacznie lepsze wsparcie dla tworzenia całej bazy kodu i skutecznego rozpoczynania nowego projektu.
Git (nie GitHub) natywnie obsługuje „rozwidlanie” całego repozytorium (tj. Klonowanie go) na kilka sposobów:
origin
tworzony jest pilot o nazwieorigin
odpowiednikiGit sprawia, że wkładanie zmian z powrotem do źródła rozwidlenia jest tak proste, jak proszenie kogoś z oryginalnego projektu, aby cię odciągnął, lub prośba o dostęp do zapisu, aby samodzielnie cofnąć zmiany. Jest to część, którą GitHub ułatwia i standaryzuje.
Nie ma niepokoju, ponieważ twoje założenie jest błędne. GitHub „rozszerza” funkcjonalność rozwidlania Gita o ładny GUI i znormalizowany sposób wysyłania żądań ściągania, ale nie dodaje tej funkcjonalności do Git. Koncepcja pełnego repo-forkingu została wprowadzona do rozproszonej kontroli wersji na podstawowym poziomie. Możesz zrezygnować z GitHub w dowolnym momencie i nadal kontynuować push / pull projektów, które „rozwidliłeś”.
źródło
X project
na mojej maszynie. Jeśli dokonam zmian w moim lokalnym i nie mam dostępu do zapisu pochodzenia, wyślę e-mail do autora projektu z prośbą o ściągnięcie. Zrobi pilota zwanego gideon, który będzie adresem URL mojego lokalnego klona, i będzie mógł ciągnąć, prawda?Tak, widelec jest klonem. Okazało się, ponieważ nie można naciskać na kopie innych osób bez ich zgody . Robią dla ciebie kopię ( widelec ), gdzie również będziesz mieć uprawnienia do zapisu.
W przyszłości, jeśli faktyczny właściciel lub inni użytkownicy z widelcem takim jak twoje zmiany, mogą pobrać go z powrotem do własnego repozytorium. Możesz też wysłać im „żądanie ściągnięcia”.
źródło
fork
oznacza, że na serwerze GitHub znajduje się kopia twojej pracy, do której możeszpush
i do której inni mają dostęp URL, aby moglipull
. Jestpull request
to tylko standardowy sposób na uzyskanie adresu URL kopii (na GitHub), aby mogli łatwo pobrać go do swojego repozytorium.„Rozwidlenie” w tym kontekście oznacza „Zrób kopię ich kodu, aby móc dodawać własne modyfikacje”. Nie ma nic więcej do powiedzenia. Każdy klon jest w zasadzie widelcem i decyzja o tym, czy wyciągnąć zmiany z widelca, zależy od oryginału.
źródło
on the GitHub server
aby móc dodawać własne modyfikacjeand others can have URL access to my version
”. Większość lokalnych stacji roboczych nie oferuje dostępu do adresu URL, aby ktokolwiek mógł je pobrać. Ale jeśli prześlesz do swojego rozwidlenia na serwerze, może on mieć adres URL ściągnięcia.Klonowanie polega na utworzeniu kopii repozytorium git na maszynie lokalnej, podczas gdy rozwidlenie klonuje repozytorium do innego repozytorium. Klonowanie jest wyłącznie do użytku osobistego (chociaż mogą wystąpić przyszłe połączenia), ale przy rozwidleniu kopiujesz i otwierasz nową możliwą ścieżkę projektu
źródło
Rozwidlenie odbywa się, gdy zdecydujesz się wnieść wkład w jakiś projekt. Zrobiłbyś kopię całego projektu wraz z dziennikami historii. Ta kopia jest tworzona całkowicie w twoim repozytorium, a po dokonaniu tych zmian wydajesz polecenie ściągnięcia. Teraz to do właściciela źródła należy zaakceptowanie żądania ściągnięcia i włączenie zmian do oryginalnego kodu.
Klon Git to rzeczywiste polecenie, które pozwala użytkownikom uzyskać kopię źródła. git clone [URL] To powinno utworzyć kopię [URL] we własnym lokalnym repozytorium.
źródło
Myślę, że fork jest kopią innego repozytorium, ale z modyfikacją twojego konta. na przykład, jeśli bezpośrednio klonujesz inne repozytorium lokalnie, źródło zdalnego obiektu nadal korzysta z konta, z którego klonujesz. Nie możesz zatwierdzić i przekazać swojego kodu. To tylko czysta kopia kodów. W przeciwnym razie, jeśli rozwidlisz repozytorium, sklonuje ono repozytorium z aktualizacją ustawienia twojego konta na twoim koncie github. A następnie klonowanie repozytorium w kontekście konta, możesz zatwierdzić swoje kody.
źródło
Istnieje nieporozumienie w odniesieniu do tego, czym jest „widelec”. Widelec jest w rzeczywistości niczym więcej niż zestawem oddziałów na użytkownika. Kiedy pchasz do rozwidlenia, w rzeczywistości robisz push do oryginalnego repozytorium, ponieważ jest to TYLKO repozytorium.
Możesz to wypróbować, pchając do rozwidlenia, odnotowując zatwierdzenie, a następnie przechodząc do oryginalnego repozytorium i używając identyfikatora zatwierdzenia, zobaczysz, że zatwierdzenie znajduje się „w” oryginalnym repozytorium.
Ma to wiele sensu, ale nie jest to wcale oczywiste (odkryłem to przypadkowo niedawno).
Gdy John rozwidla repozytorium SuperProject, wydaje się, że tak naprawdę dzieje się tak, że wszystkie gałęzie w repozytorium źródłowym są replikowane z nazwą taką jak „John.master”, „John.new_gui_project” itp.
GitHub „ukrywa” „Johna”. od nas i daje nam złudzenie, że mamy własną „kopię” repozytorium na GitHub, ale nie jesteśmy ani nie jesteśmy nawet potrzebni.
Więc gałąź „master” mojego widelca nosi nazwę „Korporal.master”, ale interfejs użytkownika GitHub nigdy tego nie ujawnia, pokazując mi tylko „master”.
Myślę, że tak właściwie dzieje się pod maską na podstawie rzeczy, które ostatnio robiłem, a kiedy się nad tym zastanowić, jest to bardzo dobry projekt.
Z tego powodu uważam, że Microsoft będzie bardzo łatwo wdrożyć widelce Git w swojej ofercie Visual Studio Team Services.
źródło
git clone
całkiem nowe repozytorium (nawet „nagie”) za każdym razem, gdy ktoś naciska przycisk „widelec” - byłoby to niewiarygodne marnotrawstwo pamięci, a prawdopodobnie również wektor ataku .Oprócz tego, że klonowanie odbywa się z serwera na komputer, a rozwidlenie polega na wykonaniu kopii na samym serwerze, istotną różnicą jest to, że podczas klonowania otrzymujemy wszystkie gałęzie, etykiety itp.
Ale kiedy rozwidlamy, w rzeczywistości otrzymujemy tylko bieżące pliki w gałęzi master, nic poza tym. Oznacza to, że nie otrzymujemy innych oddziałów itp.
Dlatego jeśli musisz scalić coś z powrotem do oryginalnego repozytorium, jest to scalanie między repozytoriami i na pewno będzie wymagać wyższych uprawnień.
Fork nie jest poleceniem w Git; to tylko koncepcja implementowana przez GitHub. Pamiętaj, że Git został zaprojektowany do pracy w środowisku peer-to-peer bez potrzeby synchronizowania elementów z dowolną kopią wzorcową. Serwer jest tylko kolejnym peerem, ale patrzymy na to jak na kopię główną.
źródło
git branch -a
.Mówiąc najprościej
Kiedy mówisz, że rozwidlasz repozytorium, w zasadzie tworzysz kopię oryginalnego repozytorium pod swoim identyfikatorem GitHub na swoim koncie GitHub.
i
Kiedy mówisz, że klonujesz repozytorium, tworzysz lokalną kopię oryginalnego repozytorium w twoim systemie (PC / laptop) bezpośrednio, bez kopii na koncie GitHub.
źródło