Jaka jest różnica między Forking a Cloning w GitHub?


187

Chciałbym poznać różnice między zrobieniem Fork projektu i zrobieniem clonez niego.

Czy mogę wysyłać żądania ściągania za pośrednictwem GitHub, tylko jeśli rozwidliłem projekt?



2
Dla osób, które tu lądują, szukając wyjaśnienia „fork” z Git (nie GitHub). W Git nie ma polecenia „fork”. To bardziej koncepcja GitHub (nie Git). Wyróżnienie łatwo zapomniane.
ambassallo,

Odpowiedzi:


113

Zasadniczo tak. To forktylko prośba do GitHub o sklonowanie projektu i zarejestrowanie go pod Twoją nazwą użytkownika ; GitHub śledzi również relacje między dwoma repozytoriami, dzięki czemu można wizualizować zatwierdzenia i przeciągnięcia między dwoma projektami (i innymi widelcami).

Nadal możesz poprosić, aby ludzie wyciągnęli z twojego sklonowanego repozytorium, nawet jeśli go nie używasz fork- ale sam musiałbyś poradzić sobie z publicznym udostępnieniem go. Lub wyślij łatki dla programistów (zobacz git format-patch), które mogą zastosować do swoich drzew.


4
Aktualizacja wideł zajmuje dużo więcej czasu niż klonowanie. Klon można zaktualizować za pomocą prostego git pull. Widelec przyjmuje wiele poleceń. I nic dziwnego, że prawie każdy widelec, na który patrzę, jest nieaktualny. Widelce są jak problem z repozytorium Maven na sterydach. Zamiast jednego nieaktualnego repozytorium (Maven), jest ich tysiące (Git).
jww

@jww brzmi jak najlepiej trzymać się klona - po co więc korzystać z fork?
serup

@serup - powodem tego jest to, że można rozwidlać kopię, git pullaby nadal istniała jakaś relacja. Jeśli sklonowałeś całą kopię na swoim własnym komputerze lokalnym i odłączyłeś się od oryginalnego repozytorium.
JonH

134

Kiedy mówisz, że tworzysz repozytorium, w zasadzie tworzysz kopię repozytorium pod swoim identyfikatorem GitHub. Należy przede wszystkim zauważyć, że wszelkie zmiany dokonane w oryginalnym repozytorium zostaną odzwierciedlone z powrotem w twoich rozwidlonych repozytoriach (musisz pobrać i zmienić bazę). Jeśli jednak wprowadzisz jakiekolwiek zmiany w rozwidlonym repozytorium, będziesz musiał jawnie utworzyć żądanie ściągnięcia do oryginalnego repozytorium. Jeśli żądanie ściągnięcia zostanie zatwierdzone przez administratora oryginalnego repozytorium , wówczas zmiany zostaną zatwierdzone / scalone z istniejącą oryginalną bazą kodu. Do tego czasu zmiany będą widoczne tylko w rozwidlonej kopii .

W skrócie:

Model Fork & Pull umożliwia każdemu rozwidlenie istniejącego repozytorium i wypchnięcie zmian do osobistego widelca bez konieczności udzielania dostępu do repozytorium źródłowego. Następnie opiekun projektu musi wprowadzić zmiany do repozytorium źródłowego.

Zauważ, że po rozwidleniu możesz sklonować swoje repozytorium (to pod twoim imieniem) lokalnie na twoim komputerze. Wprowadź zmiany i wypchnij je do rozwidlonego repozytorium. Jednak, aby odzwierciedlić zmiany w oryginalnym repozytorium, żądanie ściągnięcia musi zostać zatwierdzone.

Kilka innych interesujących dyskusji -

Czy widelce git faktycznie są klonami git?

Jak zaktualizować rozwidlone repozytorium GitHub?


24
„Należy przede wszystkim zauważyć, że wszelkie zmiany dokonane w oryginalnym repozytorium zostaną odzwierciedlone z powrotem w twoich rozwidlonych repozytoriach”. To chyba trochę mylące. AFAIK, zmiany wprowadzone w oryginalnym repozytorium po rozwidleniu nie są automatycznie odzwierciedlane w rozwidleniu; musisz ręcznie przenieść te zmiany. Zmiany dokonane przed rozwidleniem są jednak kopiowane do nowego rozwidlenia po kliknięciu przycisku rozwidlenia.
Ajedi32,

„wszelkie zmiany dokonane w oryginalnym repozytorium zostaną odzwierciedlone z powrotem w twoich repozytoriach” .. naprawdę? Nie automatycznie mam nadzieję
KansaiRobot

Pracowałem nad projektem klienta i korzystałem z modelu klonowania i wypychania do pracy. Pewnego dnia rozwidliłem go i od razu dostałem wiadomość mówiącą, jaka jest potrzeba rozwidlenia pełnego repozytorium. Naprawdę nie rozumiem, jak to się uważa za złe?
user3075740,

zmiany wprowadzone w oryginalnym repozytorium po rozwidleniu nie są automatycznie odzwierciedlane w rozwidleniu, ale w tym celu sprawdź krok 3 tego bloga: - help.github.com/articles/fork-a-repo
Suhas Chikkanna

„wszelkie zmiany dokonane w oryginalnym repozytorium zostaną odzwierciedlone w twoich repozytoriach” - czy masz na myśli, że nie jest to możliwe po sklonowaniu?
zmienna

26
  • Rozwidlony projekt znajduje się w twoim repozytorium online (repo).
  • Sklonowany projekt znajduje się na twojej lokalnej maszynie (zwykle klonuję po rozwidleniu repo).

Możesz zatwierdzić swoje repozytorium online (lub zatwierdzić repozytorium lokalne, a następnie wypchnąć repozytorium online), a następnie wysłać żądanie ściągnięcia.

Kierownik projektu może to zaakceptować, aby uzyskać zmiany w swojej głównej wersji online.


13

Klon to miejsce, w którym masz odpowiednią duplikację i separację między dwiema (być może różnymi) wersjami repozytorium. Po zmianie jednego repozytorium nowa zawartość musi zostać aktywnie skopiowana do drugiego repozytorium za pomocą polecenia push. Wprowadzono zmiany w drugim repozytorium.

Po rozwidleniu repozytorium na serwerze nie ma potrzeby powielania treści, ponieważ oba repozytoria będą używać tej samej zawartości [obiektu stałego] z tego samego serwera. „Sztuczka” polega na zarządzaniu różnymi punktami widzenia użytkownika, aby każdy użytkownik wierzył, że ma pełną osobistą kopię repozytorium. Przesunięcia i pobrania między widelcami to po prostu aktualizacja wskaźników użytkownika.

Na niższym poziomie git robi to samo wewnętrznie. Jeśli masz trzy różne pliki, z których każdy zawiera Hello World, a następnie git po prostu „rozwidla” jedną kopię blobu Hello World i oferuje go w każdym z trzech miejsc, zgodnie z wymaganiami.

Możliwość rozwidlenia na serwerze oznacza, że ​​duży limit pamięci Github nie jest tak duży średnio, ponieważ każdy organ ma jedno bazowe repozytorium.


5

W skrócie, Forking jest prawdopodobnie taki sam jak „klonowanie pod twoim identyfikatorem / profilem GitHub”. Widelec jest zawsze lepszy niż klon, z kilkoma wyjątkami, oczywiście. Rozwidlone repozytorium jest zawsze monitorowane / porównywane z oryginalnym repozytorium, w przeciwieństwie do sklonowanego repozytorium. Umożliwia to śledzenie zmian, inicjowanie żądań ściągania, a także ręczne synchronizowanie zmian dokonanych w oryginalnym repozytorium z rozwidlonym.


5

Chociaż odpowiedź @ AniketThakur jest bardzo dobra. Nikt jeszcze nie odpowiedział na następujące pytanie.

Czy mogę wysyłać żądania ściągania za pośrednictwem GitHub, tylko jeśli rozwidliłem projekt?

Nie. Jeśli jesteś współtwórcą repozytorium, możesz: Utworzyć lokalnego klona. Zrób lokalny oddział. Dodaj zatwierdzenia do tego oddziału. Wciśnij lokalną gałąź z powrotem do github (tworząc w tym czasie zdalną gałąź). Złóż wniosek ściągania z prośbą o połączenie tej gałęzi z gałęzią główną (lub dowolną inną).


3

Jeśli zrobiłeś to, o czym pytał pytający (zapomniałeś rozwidlić i po prostu lokalnie sklonowałeś repozytorium, dokonałeś zmian i teraz musisz wydać żądanie ściągnięcia), możesz wrócić na ścieżkę:

  1. rozwidlaj repozytorium, do którego chcesz wysłać żądanie ściągnięcia
  2. przesłać lokalne zmiany do pilota
  3. wystawić żądanie ściągnięcia

2

Inną dziwną subtelną różnicą w GitHub jest to, że zmiany w widelcach nie są liczone w dzienniku aktywności, dopóki nie zostaną wprowadzone do oryginalnego repozytorium. Co więcej, aby zmienić widelec w odpowiedni klon, najwyraźniej musisz skontaktować się z obsługą Github.

Od Dlaczego mój wkład się nie wyświetla :

Zobowiązanie zostało wykonane w widelcu

Zobowiązania dokonane w rozwidleniu nie będą wliczane do twoich składek. Aby je policzyć, musisz wykonać jedną z następujących czynności:

Otwórz żądanie ściągnięcia, aby zmiany zostały scalone z repozytorium nadrzędnym. Aby odłączyć widelec i przekształcić go w autonomiczne repozytorium w GitHub, skontaktuj się z pomocą techniczną GitHub . Jeśli widelec ma własne widelce, poinformuj obsługę o tym, czy widły powinny przenieść się z repozytorium do nowej sieci, czy pozostać w bieżącej sieci. Aby uzyskać więcej informacji, zobacz „ Informacje o widelcach ”.


2

Krótko mówiąc, „fork” tworzy kopię projektu hostowanego na Twoim koncie GitHub.

„Klon” używa oprogramowania git na twoim komputerze, aby pobrać kod źródłowy i całą historię wersji na ten komputer

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.