Aktualizacja: zauważ, że obecnie akceptowana odpowiedź utrwala powszechne nieporozumienie dotyczące zachowania git push
, które nie zostało poprawione pomimo wskazującego komentarza.
Twoje podsumowanie dotyczące pilotów - jak pseudonim dla adresu URL repozytorium - jest poprawne.
Dlaczego więc adres URL nie jest git: //git@github.com/peter/first_app.git, ale w innej składni - jaka to jest składnia? Dlaczego musi kończyć się na .git? Próbowałem nie używać .git na końcu i to też działa. Jeśli nie .git, co jeszcze może być? Git na początku wygląda na konto użytkownika na serwerze git?
Dwa wspomniane adresy URL wskazują, że należy użyć dwóch różnych protokołów transportowych. Pierwszy zaczyna się git://
od protokołu git, który jest zwykle używany tylko do dostępu do repozytoriów tylko do odczytu. Drugi git@github.com:peter/first_app.git
, to jeden z różnych sposobów określania dostępu do repozytorium przez SSH - jest to „składnia w stylu scp” opisana w dokumentacji . To, że nazwa użytkownika w składni stylu SCP jest git
spowodowana sposobem, w jaki GitHub radzi sobie z identyfikacją użytkowników - w zasadzie ta nazwa użytkownika jest ignorowana, a użytkownik jest identyfikowany na podstawie pary kluczy SSH, której użyli do uwierzytelnienia.
Jeśli chodzi o gadatliwość git push origin master
, zauważyłeś, że po pierwszym naciśnięciu możesz to zrobićgit push
. Wynika to z serii trudnych do zapamiętania, ale ogólnie pomocnych wartości domyślnych :)
- Jeśli nie określono pilota,
remote.master.url
używany jest pilot skonfigurowany dla bieżącej gałęzi ( w twoim przypadku). Jeśli to nie jest skonfigurowane, toorigin
jest używane.
- Jeśli nie ma „refspec” (np
master
, master:my-experiment
itd) określony, a następnie git domyślnie naciska każdy lokalny oddział, który ma taką samą nazwę jak oddział na pilocie. Jeśli po prostu masz gałąź master
wspólną dla swojego repozytorium i zdalnej, będzie to to samo, co wypychanie master
do zdalnego master
.
Osobiście, ponieważ zwykle mam wiele gałęzi tematycznych (i często kilka pilotów), zawsze używam formularza:
git push origin master
... aby uniknąć przypadkowego popchnięcia innych gałęzi.
W odpowiedzi na twoje komentarze do jednej z pozostałych odpowiedzi brzmi to tak, jakby były nauki o git w top-down sposób bardzo skutecznie - odkryłeś, że domyślnie pracować, a pytanie jest pytaniem, dlaczego;), aby poważniej, git możemoże być używany zasadniczo tak samo jak SVN, ale znajomość pilotów i gałęzi oznacza, że możesz używać go bardziej elastycznie, a to może naprawdę zmienić sposób pracy na lepszy. Twoja uwaga na temat kursu semestralnego przypomina mi coś, co Scott Chacon powiedział w wywiadzie podcastowym - studenci uczą się wszelkiego rodzaju podstawowych narzędzi informatycznych i inżynierii oprogramowania, ale bardzo rzadko kontroli wersji. Rozproszone systemy kontroli wersji, takie jak git i Mercurial, są teraz tak ważne i tak elastyczne, że warto na nich uczyć kursów, aby zapewnić ludziom dobre uziemienie.
Moim zdaniem git
ta krzywa uczenia się jest absolutnie tego warta - praca z wieloma gałęziami tematycznymi, łatwe łączenie ich oraz przesuwanie i przeciąganie ich pomiędzy różnymi repozytoriami jest fantastycznie przydatne, gdy tylko poczujesz się pewnie z systemem. Szkoda tylko, że:
- Podstawowa dokumentacja git jest tak trudna do przeanalizowania dla nowych użytkowników. (Chociaż twierdzę, że jeśli Google zadaje prawie każde pytanie git, w dzisiejszych czasach pojawiają się pomocne materiały instruktażowe (lub odpowiedzi dotyczące przepełnienia stosu :)).)
- Istnieje kilka dziwnych zachowań w git, które trudno teraz zmienić, ponieważ wiele skryptów może na nich polegać, ale są mylące dla ludzi.
git@github.com:peter/first_app.git
jest toscp
składnia w stylu dla adresów URL ssh w git. Inną kwestią jest to, że domyślnie konfiguracja upstreammaster
nie wpływa na zachowanie,git push
chyba żepush.default
ustawiłeśtracking
(lubupstream
w późniejszych wersjach) - napisałem wpis na blogu o tym źródle zamieszania: longair.net/blog/2011 /