Dość często Git i Rails wyglądają jak magia ... tak jak w pierwszym rozdziale podręcznika Rails 3 , mówi o Git:
git remote add origin [email protected]:peter/first_app.git
git push origin master
i w zasadzie mówi „po prostu działa”, nie mówiąc zbyt wiele o tym, czym są i zacznij mówić o rozgałęzianiu. Wyszukiwanie w sieci pokazuje, że git remote add
należy dodać „krótką nazwę”, na przykład origin
, i może to być dowolna nazwa, która jest jak alias adresu URL. I origin
jest to zwykła ścieżka do miejsca, w którym wskazuje zdalne repo. (w http://git-scm.com/book/en/Git-Basics-Working-with-Remotes w „Dodawanie zdalnych repozytoriów”)
Dlaczego więc URL nie git://[email protected]/peter/first_app.git
jest inny niż w innej składni - jaka to jest składnia? Dlaczego to musi się kończyć .git
? Próbowałem nie używać .git
na końcu i to też działa. Jeśli nie .git
, to co jeszcze może być? git
W [email protected]
wydaje się być konto użytkownika na serwerze git?
Ponadto, dlaczego musi być tak gadatliwy w użyciu git push origin master
? Czy domyślną wartością nie może być pochodzenie i wzorzec? Przekonałem się, że za pierwszym razem origin master
jest to potrzebne, ale po niewielkiej edycji i zatwierdzeniu, git push
to wszystko, czego potrzebuje (nie ma potrzeby origin master
). Czy ktoś, kto wie, co się dzieje, może podać jakieś szczegóły?
Czasami wydaje się, że to dużo magii bez wyjaśnienia ... a czasami osoba, która go używa, jest taka pewna siebie i zapytana dlaczego, nie może tego wyjaśnić i odpowiada coś w stylu „tak jest”. Czasami bardzo praktyczny i pragmatyczny. Nie jest źle być praktycznym, ale prawdopodobnie nie praktycznym do tego stopnia, że nie wiadomo, co się dzieje.
[email protected]: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 /push.default
wcześniejszej konfiguracji byłaby użyta do znalezienia domyślnego pilota podczas używaniagit push
, ale nie wpływałaby na mapowanie referencji.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.
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[email protected]: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 jestgit
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 :)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.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 wypychaniemaster
do zdalnegomaster
.Osobiście, ponieważ zwykle mam wiele gałęzi tematycznych (i często kilka pilotów), zawsze używam formularza:
... 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:źródło
Spójrz na składnię dodawania zdalnego repo.
Przykład:
Przeanalizujmy polecenie:
git remote służy do zarządzania centralnymi serwerami do obsługi repozytoriów git.
Być może używasz Github do centralnego repozytorium. Podam wam przykład i wyjaśnienie git remote add origin polecenia
Załóżmy, że współpracuję z GitHub i BitBucket dla serwerów centralnych dla repozytoriów git i utworzyłem repozytoria na obu stronach dla mojego projektu pierwszej aplikacji .
Teraz, jeśli chcę przekazać moje zmiany obu serwerom git, będę musiał powiedzieć git, jak dotrzeć do tych centralnych repozytoriów. Będę musiał dodać te,
Dla GitHub
I dla BitBucket
Użyłem dwóch zmiennych (o ile łatwo nazwać je zmiennymi) gh_origin (gh FOR GITHUB) i bb_origin (bb dla BITBUCKET) tylko po to, aby wyjaśnić, że możemy nazywać pochodzenie dowolnie.
Teraz po wprowadzeniu pewnych zmian będę musiał wysłać (push) wszystkie te zmiany do centralnych repozytoriów, aby inni użytkownicy mogli je zobaczyć. Więc dzwonię
Przesyłanie do GitHub
Pchanie do BitBucket
gh_origin trzyma wartość https://github.com/user/first-app-git.git, a bb_origin trzyma wartość https: //[email protected]/user/first-app-git.git
ponieważ za każdym razem, gdy muszę wysłać zmiany w kodzie, muszę używać tych słów zamiast zapamiętywać lub wpisywać adres URL tego samego.
W większości przypadków nie widzisz niczego poza pochodzeniem, ponieważ w większości przypadków masz do czynienia tylko z jednym centralnym repozytorium, takim jak na przykład Github lub BitBucket.
źródło
Na
.git
końcu nazwy repozytorium jest tylko konwencja. Zazwyczaj na serwerach git repozytoria są przechowywane w nazwanych katalogachproject.git
. Klient i protokół git honoruje tę konwencję, testując,project.git
kiedy tylkoproject
jest określony.git://[email protected]/peter/first_app.git
nie jest prawidłowym adresem git. repozytoria git można zidentyfikować i uzyskać do nich dostęp za pomocą różnych schematów URL określonych tutaj .[email protected]:peter/first_app.git
tossh
adres URL wymieniony na tej stronie.git
jest elastyczny. Umożliwia śledzenie lokalnego oddziału w prawie każdym oddziale dowolnego repozytorium. Chociażmaster
śledzenieorigin/master
( lokalna gałąź domyślna) (zdalna gałąź domyślna) jest popularną sytuacją, nie jest uniwersalne. Wiele razy możesz tego nie chcieć. Właśnie dlatego pierwszygit push
jest tak pełny. Mówi git, co zrobić z lokalnymmaster
oddziałem, gdy wykonujesz agit pull
lub agit push
.Domyślnie
git push
igit pull
działa z pilotem bieżącego oddziału. Jest to lepsze ustawienie domyślne niż wzorzec źródłowy. Sposób, w jaki git push określa to, jest wyjaśniony tutaj .git
jest dość elegancki i zrozumiały, ale istnieje krzywa uczenia się do przejścia.źródło
git push
nie używa zmiennych konfiguracyjnych skonfigurowanych za pomocągit branch/checkout --track
do określania, do którego zdalnego odwołania należy pchnąć. Masz rację, że git pull korzysta z nich jednak.Zdalne dodanie pochodzenia Git:
Centralizuje kod źródłowy w stosunku do innych projektów. Został opracowany w oparciu o system Linux, kompletne oprogramowanie open source i sprawia, że kod jest użyteczny dla innych użytkowników git. Nazywamy go jako odniesienie
Pcha kod do repozytorium git przy użyciu zdalnego adresu URL centrum git.
źródło