różnica między fork i branch na githubie

129

Jeśli rozwidlę projekt hostowany na github. Czy rozwidlę wszystkie gałęzie? Skąd mam wiedzieć, na której gałęzi jest oparty mój widelec? Innymi słowy, która gałąź zostanie pobrana na mój komputer?

Jonathan.
źródło
1
Proste angielskie wyjaśnienie: gałąź jest jak widelec, który pochodzi od rozwidlenia rodzica. Widelec jest jak gałąź, która nie ma gałęzi macierzystej.
Ken Kin

Odpowiedzi:

44

Wszystkie gałęzie na GitHub zostaną skopiowane w forku. (Oczywiście nie obejmuje to gałęzi, które nigdy nie zostały przesłane do GitHub.)

Ale fork to operacja GitHub-to-GitHub; nic nie jest kopiowane na twój komputer. To nie to samo, co klon Git . Jeśli chcesz zapytać „co jest kopiowane podczas klonowania projektu?”, Zapoznaj się z instrukcją git-clone(1).

JC Salomon
źródło
155

Pomyśl o tym w ten sposób:

Repozytorium [miejsce] odpowiada wspólnej pracy zespołu w jednym lub wielu oddziałach. Wszyscy współtwórcy mają własną kopię tego.

Każdy rozwidlenie głównego repozytorium odpowiada pracy współtwórcy. Rozwidlenie to tak naprawdę konstrukcja Github (nie Git), która przechowuje klon repozytorium na koncie użytkownika. Jako klon będzie zawierał wszystkie gałęzie w głównym repozytorium w momencie utworzenia forka.

Każda gałąź w forku i / lub w głównym repozytorium może odpowiadać kilku rodzajom rzeczy, w zależności od tego, jak chcesz pracować. Każda gałąź może odnosić się do wersji projektu, ale może również odpowiadać innym kanałom rozwoju, takim jak poprawki lub prace eksperymentalne.

Prośba przyciąganie (w ekosystemie GitHub) odpowiada zadania. Za każdym razem, gdy chcę wnieść odizolowane ukończone zadanie do głównego repozytorium, tworzę żądanie ściągnięcia odpowiadające zatwierdzeniom wykonanym w tym zadaniu. Te zatwierdzenia są pobierane z mojego forka lub mojej gałęzi do głównego repozytorium .

Popełnić to zestaw zmian w kodzie. To jedna z najciekawszych rzeczy w Git. Nie przesyłasz plików, przenosisz dzienniki zmian.

Adam Grant
źródło
4
podobało mi się, jak wyjaśniłeś wszystkie powiązane powiązane bity, takie jak mapowanie żądań ściągnięcia na fork / branch. „nie przesyłasz plików, przenosisz dzienniki zmian” ... już to wiedziałem, ale to zdanie jest idealne!
harshvchawla
2
plus-jeden za wyjaśnienie, że fork to github, a nie git. Dzięki!
emery.noel
10

Fork jest klonem po stronie GitHub (klonuje wszystko).
Kiedy klonujesz repozytorium, otrzymujesz całą historię tego repozytorium wraz ze wszystkimi jego gałęziami.

Chociaż teoretycznie można zmienić domyślną gałąź zdalnego repozytorium , klon z repozytorium GitHub szuka głównie gałęzi głównej. Oznacza to, że aby zmienić „domyślną” gałąź, którą otrzyma klon GitHub, musisz zmienić nazwę gałęzi głównej.

VonC
źródło
Więc kiedy sklonuję rozwidlone repozytorium (efektywnie pobieram je na mój komputer), czy wszystkie gałęzie znajdują się na moim komputerze? Ale w jednej gałęzi zostały dodane dodatkowe pliki. Czy mój komputer będzie zawierał te pliki, czy nie?
Jonathan.
1
@Jonathan: Twój komputer otrzyma wszystkie gałęzie ze wszystkimi plikami. Ale twój katalog roboczy (miejsce, w którym pobierasz jedną z tych gałęzi) będzie właściwie jedyną przestrzenią, w której zobaczysz te pliki.
VonC
Więc gdzie inne pliki będą faktycznie przechowywane w folderze .git?
Jonathan.
@Jonathan: jako luźne lub spakowane przedmioty, patrz book.git-scm.com/7_how_git_stores_objects.html (obiekty będące blobem („plikami”), drzewem, zatwierdzeniem lub tagiem: book.git-scm.com/ 1_the_git_object_model.html )
VonC,
4

Jeśli rozwidlisz projekt, tworzysz kopię całego projektu na koncie git hub. nic nie radzisz sobie z komputerem

Aby zrobić kopię na swoim komputerze, musisz go sklonować i pobrać wszystkie rzeczy, a otrzymasz wszystkie gałęzie i kod tego projektu

Polowanie
źródło
2

Jeśli utworzysz rozwidlenie projektu ze strony Github, otrzymasz wszystkie gałęzie z projektu wyższego rzędu.

Jeśli sklonujesz z nowo wybitego widelca na lokalny komputer, będziesz mieć originpilota na swoim komputerze wskazującym na główną gałąź twojego widelca na Github.

bhamby
źródło
Zgodnie ze stroną Help.GitHub Rozwidlenie projektu , utworzenie upstreamgałęzi jest czymś, co musisz zrobić; i powiedzą ci, jak to zrobić.
JC Salomon,
2
To jest pilot, a nie gałąź.
Arrowmaster
1

Można to bardzo dobrze wyjaśnić. Masz centralne repozytorium na GitHub. Za każdym razem, gdy pobierasz jego klon na swój komputer osobisty, aby wprowadzić jakieś zmiany, ten lokalny klon głównego repozytorium nazywa się rozwidleniem.

Gałąź jest czymś innym i jest zawarta w fork / repo. W rzeczywistości branża to Twoja praca na różnym etapie rozwoju. Tworzy się je, gdy jest to wymagane, aby zapisać zestaw funkcjonalności, dać dostęp różnym użytkownikom, zademonstrować witrynę klientowi itp.

Avinash Thombre
źródło
1

Chciałbym podzielić się przykładem z życia wziętego, kiedy używamy Branches i kiedy używamy Forks

W naszym sklepie mamy GitLab i czasami musimy pracować nad pakietami z projektu Laravel. Zwykle tworzymy gałąź i wprowadzamy zmiany do oddziału, który testowaliśmy w naszym lokalnym środowisku deweloperskim VM podczas pracy z rzeczywistym projektem Laravel.

Powiedzmy, że nasz projekt znajduje się pod adresem

https://github.com/yardpenalty/mainproject.git

Wykorzystanie oddziału:

Powiedzmy, że nazywa się oddział It_doesnt_matter

Gdy już mamy nasz oddział w taki sposób, w jaki chcemy, dla produkcji, następnie dokonujemy ostatecznego wypchnięcia do tej gałęzi i tworzymy żądanie scalenia, które następnie przechodzi do UAT w celu przetestowania. Po przejściu testu przez kontrolę jakości zmiany są wprowadzane do produkcji.

Scalania z It_doesnt_matter oddziału jest teraz wciśnięty do projektu głównego

w https://github.com/yardpenalty/mainproject.git

Powiedzmy, że projekt pakietu znajduje się pod adresem

https://github.com/yardpenalty/mypackage.git

Pamiętaj, że mainproject używa tego pakietu w środowisku produkcyjnym, więc nie możemy wprowadzać zmian, po prostu wysyłając je do tego pakietu (między innymi). Powiedzmy, że twórca stron internetowych musi edytować ten pakiet, aby wprowadzić zmiany w produkcji.

Prosta gałąź również nie zadziała, ponieważ nie możemy zobaczyć naszych zmian bez opublikowania pakietu itp.

Użycie widelca: Teraz musimy zrobić trochę oszustwa z naszym pakietem, więc tworzymy klon pakietu produkcyjnego za pomocą rozwidlenia. Pliki composer.json można zaktualizować, aby wskazywały rozwidlenie, które znajduje się teraz w ścieżce użytkownika lub grupy

Więc stworzymy rozwidlenie https://github.com/yardpenalty/mypackage.git

i nazwij to https://github.com/yardpenalty/yards/mypackage.git

Teraz możemy zaktualizować nasz plik composer.json , aby wskazywał na ten pakiet w naszych „repozytoriach”: [tablica taka i gotowe!

 {
            "type": "github",
            "url": "https://github.com/yardpenalty/yard/mypackage.git"
 }

]

yardpenalty.com
źródło