Git/Konfiguracja
Konfiguracja
ssh
[edytuj]- ssh
- klucze publiczny i prywatny są w katalogu ~/.ssh
Pliki konfiguracyjne
[edytuj]- systemowy $(prefix)/etc/gitconfig (zwykle /etc/gitconfig)
- global ~/.gitconfig (zwykle /home/nazwa_uzytkownika/.gitconfig)
- lub bez określenia - dla repozytorium $GIT_DIR/config (zwykle repozytorium/.git/config)
Sprawdzenie konfiguracji
[edytuj]git config --list
przykładowy wynik :
user.email=adam@o3.pl user.name=adam core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true remote.origin.url=https://git.gitorious.org/maximus/book.git remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* branch.master.remote=origin branch.master.merge=refs/heads/master
Aby git po prostu wypisywał tekst na wyjście, a nie do programu takiego jak less czy more
[edytuj]Jeśli nasz terminal umożliwia przewijanie, może wyłączyć korzystanie z pagera. W danym systemie pagerem może być less, more lub inny program. Aby uruchomić jednorazowo polecenie git diff bez pagera, należy wykonać
GIT_PAGER="" git diff
Jeśli chcemy mieć to na stałe ustawione, należy w pliku ~/.bashrc umieścić linię
export GIT_PAGER=""
i wykonać komendę
source ~/.bashrc
Jeśli dodatkowo korzystamy z gnome-terminal, warto zlinkować ~/.profile do ~/.bashrc, ponieważ gnome-terminal wczytuje .profile przy uruchamianiu (możliwe, że tak robią inne terminale w środowisku X)
ln -s ~/.bashrc ~/.profile
Kolorowanie diff włączone dla jednego użytkownika
[edytuj]git config --global color.diff true
Aliasy (skróty)
[edytuj]git config --global alias.ci commit git config --global alias.st status git config --global alias.co checkout git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"
https://git.wiki.kernel.org/index.php/Aliases http://www.jukie.net/bart/blog/pimping-out-git-log
Zmiana domyślnego edytora dla git-commit
[edytuj]Według man git-commit edytor jest ustalany w kolejności: zmienna $GIT_EDITOR, zmienna core.editor, zmienna $VISUAL lub $EDITOR. Jednak u mnie na gentoo działa tylko przy ustawieniu $EDITOR w pliku /etc/rc.conf.
EDITOR="vim"
lub
git config --global core.editor vim
Kolorowanie przy edytowaniu notki dla vima
[edytuj]Ze strony [1] ściągamy git.tar i rozpakowujemy go do katalogu domowego. Potem dodajemy jeszcze plik $HOME/.vim/filetype.vim z zawartością
au BufRead,BufNewFile COMMIT_EDITMSG setf git
Od teraz mamy ładne kolorowanie.
Automatyczne dzielenie okna
[edytuj]Do pliku .vim/ftplugin/git.vim dodajemy wpis
if !exists("g:git_diff_spawn_mode") let g:git_diff_spawn_mode = 1 endif
W tym samym pliku g:git_diff_opts = "-C -C" należy zamienieć na g:git_diff_opts = "-C -C --no-color" inaczej nie będzie działało kolorowanie.
Nie działa natomiast dzielenie okna przez mapowanie. Błąd w pliku .vim/ftplugin/git.vim. Funkcja wywoływana z dwoma argumentami zamiast trzema. Czyli powinno być:
noremap <buffer> <Leader>gd :call Git_diff_windows(0, 0, g:git_diff_opts)<cr> noremap <buffer> <Leader>ghd :call Git_diff_windows(0, 0, g:git_diff_opts)<cr> noremap <buffer> <Leader>gvd :call Git_diff_windows(1, 0, g:git_diff_opts)<cr>
Jednak nadal nie działa przez wywołanie <Leader>gd lub inne mapowania. <Leader> ustawia się przez :let mapleader =",". Wypisanie aktualnej wartości przez :echo mapleader.
Ignorowanie plików
[edytuj]Możemy ustawić ignorowanie śledzenia zmian dla pewnych plików czy katalogów. Te pliki lub katalogi nie mogą być jednak zapisane w repozytorium. Jeśli są już w repozytorium, to trzeba je usunąć i zatwierdzić zmiany przez git-commit -a.
Ignorowanie możemy określić w kilku plikach w systemie: ~/.gitignore, .git/info/exclude. .gitignore w dowolnym lokalnym katalogu objętym śledzeniem. Dodatkowo plik .gitignore możemy włączyć do śledzenia zmian ponieważ znajduje sie w śledzonym katalogu. Poniższy kod może być umieszczony w dowolnym z tych trzech plików.
# Linie zaczynające się od '#' są traktowane jako komentarze. # Ignoruj każdy plik o nazwie foo.txt. foo.txt # Ignoruj (wygenerowane) pliki html, *.html # oprócz foo.html który jest zarządzany ręcznie. !foo.html # Ignoruj obiekty i archiwa. *.[oa] #ukośnij określa najwyższy poziom w repozytorium /katalog
Więcej informacji na stronie man gitignore ш
Systemy śledzenia błędów
[edytuj]Jeśli chcesz używać systemu śledzenia błędów w połączeniu z gitem, zobacz na tą stronę:
en:Comparison of issue tracking systems
Interesuje nas kolumna "Source code revision control system integration".
Nazywanie wersji
[edytuj]CVS zachęca do tagowania jak szalony, ponieważ jedynym sposobem, aby znaleźć daną wersję jest wyszukiwanie po dacie. Git czyni to dużo łatwiejszym, tak więc większość wersji nie potrzebuje nazw.
Możesz znaleźć pełen opis na stronie man git-rev-parse, ale poniżej jest streszczenie.
Po pierwsze, każde zatwierdzenie posiada globalną unikalną nazwę, swój 40-cyfrowy szesnastkowy identyfikator obiektu. Jest trochę za długi i dziwaczny, ale zawsze działa. To jest przydatne do omawiania szczególnego zatwierdzenia na liście dyskusyjnej. Możesz podać unikalny przedrostek, większość ludzi uważa 8 cyfr za wystarczające.
(Subversion jest nawet prostsze, ponieważ przypisuje kolejny numer do każdego zatwierdzenia. Nie jest to jednak możliwe w rozproszonym systemie kontroli wersji, jakim jest git.)
Po drugie, możesz odnieść się do nazwy głowicy lub taga. Git szuka głowicy w następujących miejscach: 1) .git 2) .git/refs 3) .git/refs/heads 4) .git/refs/tags
Powinieneś unikać takich samych nazw dla głowicy i taga, ale jeśli to robisz, możesz określić je np. jako heads/foo i tags/foo.
Po trzecie, możesz określić zatwierdzenie względem innego. Najprostszy jest "przodek", określany przez dodanie znaku karetki ^ do nazwy. Np. HEAD^ lub deadbeef^. Jeśli jest kilku przodków, wtedy ^ jest takie samo jak ^1, a inne są ^2, ^3, itd.
Tak więc ostanie kilka zatwierdzeń które zrobiłeś to HEAD, HEAD^, HEAD^^, HEAD^^^, itd. Po chwili liczenie karetek staje się uciążliwe, tak więc możesz skrócić ^^^^ do ~4. Zauważ, że to umożliwia określenie tylko pierwszego przodka. Jeśli chcesz podążyć szerokością gałęzi, musisz napisać coś takiego jak "master~305^2~22".
Przekształcanie nazw
[edytuj]Git ma dwóch pomocników (programy zaprojektowane głównie do użycia w skryptach powłoki) do przekształcania pomiędzy globalnym identyfikatorem obiektu i odczytywalnymi dla człowieka nazwami.
Pierwszy to git-rev-parse. To jest generalnie skrypt powłoki, który sprawdza poprawność polecenia i przekształca nazwy obiektów do absolutnych identyfikatorów obiektów. Więcej na stronie podręcznika man git-rev-parse.
Drugi to git-name-rev, który przekształca w drugą stronę. Jest szczególnie użyteczny do pokazywania pomiędzy którymi tagami nie udało się zatwierdzenie.
GitHub ciągle pyta o hasło do nazwy użytkownika, gdy git Push
[edytuj]Trzeba używać SSH a nie HTTPS[1]
W tym celu edytujemy plik .git/config i zmianiamy url z
.git/config
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true [remote "origin"] url = https://github.com/mkyong/spring-boot
na
url = git@github.com:mkyong/spring-boot.git
Zaktualizuj adres URL źródła zdalnego za pomocą SSH zamiast HTTPS[2]
git remote set-url origin git@github.com:username/repo.git