Pytanie Jaka jest różnica między clone i mkdir-> cd-> init-> remote-add-> pull?


Po skonfigurowaniu repozytorium na Github wydaje się, że istnieją dwa sposoby na przeniesienie tego repo na lokalne repozytorium.

Po pierwsze, mógłbym stworzyć katalog, zainicjować puste repozytorium, dodać pilota, a następnie wyciągnąć zmiany z pilota.

> mkdir "exampleProject"
> cd "exampleProject"
> git init
> git remote add origin git@github.com:exampleUser/exampleProject.git
> git pull origin master

Po drugie, mogę sklonować pilota.

> git clone git@github.com:exampleUser/exampleProject.git

Czy klonowanie jest skrótem do powyższej wersji 5-krokowej, czy też robi coś jeszcze? Czy napotkam trudności, jeśli użyję jednej metody nad drugą?


23
2017-11-05 18:11


pochodzenie


jestem prawie pewien, że to jest to samo. oboje tworzą kopię repo. - Andrey


Odpowiedzi:


Wiele poleceń, czy to poleceń git, czy zwykłych programów, robi rzeczy w jednym wierszu, w przeciwnym razie można zrobić na dziesięć. Zawsze dobrze jest zapisać pracę!

To powiedziawszy, twoje kroki są bliskie, ale nie całkiem takie same jak, co git clone robi. Mogę wymyślić kilka różnic, związanych wyłącznie z oddziałami:

  • Jeśli, z jakiegoś powodu, jest HEAD pilota nie mistrzu, klon zrobi to, co trzeba - da ci oddział nazwany tak samo jak pilot, zamiast mistrza. To rzadkość, ale dobry szczegół, o którym należy pamiętać.

  • Twój git pull nie utworzy żadnych oddziałów zdalnych. Jeśli pilot ma kilka oddziałów, klon tworzy odległe gałęzie remotes/origin/foo, remotes/origin/bar, ... w twoim repozytorium. ZA git fetch origin zajmę się tym w wymienionych krokach.

  • Nie skonfigurowałeś też swojego oddziału głównego do śledzenia pochodzenia, które robi klon. Możesz dodać to do wymienionych kroków jako git config branch.master.remote origin; git config branch.master.merge refs/heads/master. Jest to bardzo istotne - wykonując swoje kroki, jeśli masz wymeldowany master i wpisujesz git pull, nie będzie wiedział, co robić.

Możliwe, że coś mi umknęło. Jeśli chodzi o trudności w jedną lub w drugą stronę, nawet zakładając, że zniwelujesz wszystkie różnice między domyślnym klonem a "klonem ręcznym", moja rada nie byłaby na nowo odkrywać git clone:

  • To jest krótkie. Dlaczego więcej pracy?

  • Jest przydatny, aby zmienić jego zachowanie. Rzeczy jak --shared byłoby naprawdę trudno dodać do wymienionych poleceń.

  • Gwarantujemy, że zrobisz to, co właściwe teraz i w przyszłości. A co, jeśli przegapiłeś jakiś szczegół, jak te powyżej? Co jeśli git dodał globalny parametr konfiguracyjny, który wpłynął na klony? Musiałbyś zmienić komendy, by wziąć to pod uwagę, ale git clone już by to wiedział.


25
2017-11-05 18:30



Dzięki za odpowiedź! To było bardzo pomocne. Powodem, dla którego pytam, nie jest to, że chcę ponownie odkryć klon, ale raczej zrozumieć dokładnie, co robi, ale twoja rada jest bardzo ważna. - Rupert Madden-Abbott
@Rupert: Ach, fajnie. Myślę, że to był fakt, że pierwszy raz wymieniłeś metodę ręczną, która sprawiła, że ​​myślałem, że rozważasz użycie jej. - Cascabel
@Jefromi: Kolejny sposób na robienie tego, co robisz z tymi dwoma git config Polecenia to: git branch --set-upstream master origin/master To dodaje to samo [branch "master"] sekcja do .git/config plik. To jest jak git branch --track master origin/master z wyjątkiem użycia go, gdy gałąź główna już istnieje lokalnie. - bjnord