Git/Konfiguracja

Z Wikibooks, biblioteki wolnych podręczników.
< Git

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.

Więcej: [2] [3] [4]

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

Przypisy[edytuj]