Před tím než začnete provádět změny do svého repositáře, je vhodné provést alespoň základní konfiguraci. Konfigurace se ukládá do souboru .git/config
nebo ~/.gitconfig
a k modifikaci/listování slouží příkaz git-config
.
$ git config --global --list
GIT vcelku pečlivě uchovává informace o autorech a commitorech patchů. Je však nutno na počátku nastavit:
$ git config --global user.name "Full Hacker" $ git config --global user.email hacker@example.com"
Je tedy na čase udělat do repositáře nějakou změnu. Předpokládejme, že máme nově udělaný prázdný repositář. Ve svém editoru vytvořte soubor file1.c
a řekněte GITu, že soubor má být součásti příštího commitu (přesněji řečeno přidejte soubor do indexu):
$ git add file1.c
Podívejme se, co na to GIT:
$ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: file1.c #
Provedeme commit:
$ git commit -a -s -m "toto je komentář"
a pro studium jednotlivých options:
$ git commit --help
Důležité je nezapomenout, že první řádka komentáře patche se používá jako subject a pojmenování patche.
Nakonec se můžeme na celý commit podívat:
$ git show commit e8fa25358eca06285757e3c1029d7f5f884283be Author: Karel Zak <kzak@....> Date: Wed Mar 19 00:08:09 2008 +0100 toto je komentář Signed-off-by: Karel Zak <kzak@redhat.com> diff --git a/file1.c b/file1.c new file mode 100644 index 0000000..53c5fdf --- /dev/null +++ b/file1.c @@ -0,0 +1 @@ +#include <stdio.h>
Neuvedli jsme žádnou referenci (tag, SHA-1, …) takže příkaz show
byl proveden na default referenci, kterou je HEAD, tedy poslední commit aktuální větve.
Občas se hodí vydolovat patch z repositáře a uložit ho jako samostatný diff soubor:
$ git format-patch -o ~/ HEAD^ /home/kzak/0001-any-other-include.patch
a když už máme patch, tak ho můžeme někomu poslat:
$ git send-email --to guru@project.org ~/0001-any-other-include.patch
Na rozdíl od řady MUA se tento příkaz nedopustí žádného násilí na odesílaném diffu. Je nepsaným pravidlem posílat patche v těle dopisu (žádná příloha) a posílat vždy jeden patch v jednom e-mailu. Je zřejmé, že cesta mezi vaší tvořivostí ve vašem editoru a odesláním hotového patche může být hodně krátká a přímočará.
Pokud nějaký patch dostanete e-mailem, lze ho snadno aplikovat pomocí příkazu:
$ git am -i ~/Mail/box
Pochopitelně příkaz může být nefunkční, pokud odesílatel použil hloupý MUA nebo přílohu.
Co opravdu v podání CVS bolí, je hledání odpovědí na to, co kdo kde změnil. V GITu seznam všech změn:
$ git log
nebo stručněji:
$ git log --pretty=oneline
Zajímá-li vás jen určitý soubor:
$ git log file1.c
A co třeba jednotlivé řádky souboru? Typicky „Jééé… kterej trouba udělal tenhle bug?“:
$ git blame -L8,8 file1.c 4ba6758a (Karel Zak 2008-03-19 00:52:03 +0100 8) printf("%s\n", argv[argc+1]);
tedy na řádce 8 ( -L
je rozsah) v souboru file1.c
.