GIT poradnik22.XI.2014
Spis treści
- Instalacja
- Wstępna konfiguracja
- Ułatwienie na zakończenie
- Najczęsciej używane / często zapominane
- Referencje
Instalacja
Tu w zasadzie nie ma co wyjaśniać. Wystarczy znaleźć w ulubionej wyszukiwarce stronę z instalajcą GITa i zainstlować. Aktualnie instalacja znajduje się pod adresem http://git-scm.com/downloads.
Wstępna konfiguracja
GITa można wstępnie skonfigurować tak, aby podczas każdej publikacji przesyłał prawidłowe informacje o autorze zmian. Co więcej można zdefiniować aliasy, które znacznie przyspieszą wykonywanie częstych operacji w GITcie.
\> git config --global user.name "John Doe"
\> git config --global user.email johndoe@example.com
\> git config --global alias.co checkout
\> git config --global alias.st status
Ułatwienie na zakończenie
Zanim umieszczę listę najbardziej przydatnych dla mnie poleceń należy zwrócić uwagę na pewien problem, który jest dość irytujący przy pracy z jakimkolwiek repozytorium zdalnym np. GitHubem. Scenariusz jest prosty i pewnie często spotykany. Czyli mamy założone co najmniej dwa repozytoria na GitHubie i dla każdego z nich mamy włączoną publikację za pomocą klucza SSH.
Problem polega jednak na tym, że GitHub pozwala na dodanie tego samego klucza publikacji tylko do jednego repozytorium. Jak uporać się zatem z tym problem w sytuacji gdy klucz SSH jest zapamiętywany per nazwa hosta? Odpowiedź poniżej.
-
Przygotowujemy klucz publikacji (deploy key) za pomocą polecenia
domyślnie będą to pliki "id_rsa" i "id_rsa.pub" (odpowiednio klucz prywatny i publiczny)\> ssh-keygen
-
Zmieniamy nazwę wygenerowanych kluczy (prywatnego i publicznego), które znajdują się w katalogu ".ssh" profilu, tak aby zawierały nazwę repozytorium lub dowolnie inaczej jak chcemy aby łatwo było poznać do czego dana para kluczy służy
- id_rsa.test
- id_rsa.test.pub
-
Dodajemy do pliku konfiguracyjnego SSH (~/.ssh/config) konfigurację dla "nowego hosta"/"aliasu hosta" pod jakim będzie następowała komunikacja z repozytorium. U mnie wygląda to tak:
# account for the test repo Host github.com-test HostName github.com User pieszynski IdentitiesOnly yes IdentityFile ~/.ssh/id_rsa.test
-
Teraz należy dodać swój klucz publiczny (zawartość pliku
id_rsa.pub
bez końcowej nazwy komputera) do repozytorium na github.com w sekcji "Deploy keys". Jeśli tego nie zrobimy to w konsoli pojawi się komunikat (przy klonowaniu przez SSH):Cloning into 'test'... Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
-
Klonujemy repozytorim za pomocą SSH a nie HTTPS (choć GitHub domyślnie podaje adres HTTPS)! Oraz nazwa hosta, podawana przez GitHub musi być zmieniona na taką jaka została wpisana w konfiguracji "Host".
\> git clone git@github.com-test:pieszynski/test.git
-
Jeśli już repozytorium posiada źle ustawiony "remote" można to skorygować za pomocą:
\> git remote -v # kopiujemy sobie adres aby go zmienić \> git remote rm origin \> git remote add origin nowy_remote \> git remote -v
Najczęsciej używane / często zapominane
# róznego rodzaju konfiguracje .gitignore
https://github.com/github/gitignore
# odtworzenie repozytorium lokalnie
git clone git://github.com/schacon/grit.git
# dodanie do poprzedniego commit zapomnianych zmian
# (żeby wsztstko było w jednym COMMIT a nie kilku)
git commit --amend
# publikacja zmian na serwer zdalny
git push origin master
# otagowanie
git tag -a "v1.0" -m"cookie version 1.0"
# przesłanie taga na serwer zewnętrzny (automatycznie tagi się nie przenoszą)
git push origin "v1.0"
# przełączenie na inny BRANCH
git checkout nazwa_branch
# stworzenie nowego czystego BRANCH z aktualnego
git checkout -b nowa_nazwa
# zintegrowanie do AKTUALNEGO branch ten, który został podany jako parametr
git merge nazwa_branch
# usunięcie istniejącej gałęzi
git branch -d nazwa_branch
# przeniesienie pliku i dodanie tej operacji do STAGE
git mv
# usunięcie pliku z repozytorium i dodanie tej operacji do STAGE
git rm
# ustawienie statusu do skasowania jak jest już w STAGE
git rm --cached
# przywrócenie wszystkich plików zakwalifikowanych do STAGE
git reset .
# przywrócenie wszystkich plików do takich z ostatniego z COMMIT
git checkout .
# odtworzenie pliku z innego brancha
git checkout source_branch <paths>
# wylistowanie zmian
git diff
# wylistowanie zmian do wprowadzenia z STAGE do COMMIT
git diff --cached
# wylistowanie historii COMMITów z wprowadzonymi zmianami
git log -p
# wylistowanie historii dwóch COMMITów z wprowadzonymi zmianami
git log -p -2
# wylistowanie statystyk zmian w COMMITach
git log --stat
# wylistowanie graf COMMITów i BRANCHy
git log --graph
# aktualizacja repozytorium będącego FORKiem oryginalnego
git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
git fetch upstream
git checkout master
git merge upstream/master
git push origin master
Referencje
- [1] - Instrukcja uproszczenia publikacji na podstawie http://www.freshblurbs.com/blog/2013/06/22/github-multiple-ssh-keys.html