Portál AbcLinuxu, 30. dubna 2025 16:47
V dnešní době již nebývá nedostatek diskového prostoru a nebývá tedy potřeba šetřit každý bajt. Jedním ze způsobů, jak "plýtvat" úložným prostorem je zaznamenávat si, jak se některé soubory měnily v čase. Když si pak člověk omylem smaže, přepíše, nebo změní špatným směrem některé z nich, má možnost se vrátit v čase zpátky.
Pokusím se ukázat nezbytné minimum z používání gitu ke správě například historie svého /etc. Git je v repozitářích většiny běžných distribucí a tak by neměl být problém jej z nich nainstalovat. Tento zápisek se vztahuje k verzi 1.5.1.6, ale snad by měl být relativně nadčasový.
Git pracuje s jednotlivými repozitáři, jejichž data bývají často umístěny v adresáři .git
v nejvyšším adresáři daného repozitáře.
Tento adresář si vytvoříme jednoduše tak, že se přesuneme do daného adresáře a napíšeme
#git init Initialized empty Git repository in .git/
Tímto máme inicializovaný repozitář, ale ještě do něj nepatří žádné soubory. To snadno napravíme tak, že nejdříve řekneme, že budeme chtít přidat vše v tomto adresáři
#git add -- .A poté commitneme (zapíšeme do repozitáře) avizované změny (pomocí
git add
)
#git commit
Tento příkaz nám spustí náš oblíbený editor z proměnné prostředí EDITOR
a bude po nás chtít, abychom v něm napsaly popis udělaných změn.
Tento popis změn slouží čistě pro naši orientaci a tudíž je na každém z nás, co si napíše, datum zapsání, rozdíly, přidané/odebrané soubory lze samozřejmě vyčíst odjinud, takže by mělo jít o jakésy shrnutí, k čemu to bylo.
Zatím máme repozitář, ve kterém máme uložený výchozí stav. Nicméně by asi bylo dobré také zaznamenávat jednotlivé změny.
Pro vypsání změn oproti uloženému stavu slouží příkaz git-status
, jehož výpis je velmi samopopisující se.
Pakliže chceme provedené změny zaznamenat do repozitáře, nejdříve musíme gitu říct, jaké změny budeme chtít sledovat, v případě /etc budeme pravděpodobně chtít sledovat všechny soubory a tudíž zavoláme
#git add -- .
čímž řekneme, že budeme chtít zapsat stav všech souborů v daném adresáři (včetně doposud nesledovaných). Poté zavoláme
#git commit -a
Tímto příkazem sice částečně překrýváme funkci git add -- .
, aneb připravení zapsání změn již sledovaných souborů, nicméně git add -- .
navíc připraví zapsání vytvoření zatím nesledovaných souborů, a parametr -a
u commitu zase navíc oproti add zaznamená v repozitáři případné smazání sledovaných souborů.
Pakliže jsme líní a nechceme pokaždé lézt do editoru pro zapsání commit message, můžeme ji specifikovat parametrem -m
při commitu, např. pokud bychom chtěli mít v cronu naplánováno jednou za čas automaticky zapsat změny v /etc, můžeme použít sekvenci příkazů
cd /etc && git add -- . && git commit -a -m "cron automated commit"
Zatím jsme tedy schopni zaznamenávat historii změn, a jak se jí procházet? Nejméně náročné je asi použít nějaké klikátko stylu qgit, či git-gui, které bývá přibaleno v balíku přímo s gitem. Jelikož mne přestává bavit psát, milovníky příkazové řádky budu muset odkázat na zkoumání dokumentace
Nesmíme ovšem zapomenout, že v /etc je několik souborů, které by neměl přečíst nikdo, krom roota a tudíž doporučuji k danému git repozitáři zakázat přístup kohokoliv jiného, než vlastníka (roota)
#chmod 700 /etc/.git
Tiskni
Sdílej:
/etc
zálohuje každej den ráno na server a docela to stačí... git-whatchanged -p soubor
, což mi vypíše kdy se ten soubor měnil a diffy jednotlivých změn.
Teda pokud nemá lehce uhodnutelná heslanbusr123
git-config color.diff auto
Nevím, jestli to má cenu dělat i s -mm kernely, protože Andrew Morton je udržuje pomocí quiltu a git strom je až sekundární reprezentace. Já je tahám zvlášť pomocí ketchupu.
Ale s tím thinkpad-acpi jsem si to teď zkusil. Vlezu do adresáře, kde mám Linusův strom a pár svých místních větví. Řeknu gitu, že budu chtít sledovat další vzdálený repozitář:
git-remote add ibm-acpi \ git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git
Stáhnu si ho k sobě:
git-fetch ibm-acpi
Podívám se, jaké větve tam mají:
git-branch -r
Budu chtít pracovat s větví devel, tak si udělám místní větev, která jí bude odpovídat (a git-pull
mi ji bude umět aktualizovat):
git-branch --track ibm-acpi ibm-acpi/devel
Přepínám se pomocí git-checkout
.
Nevím, jestli je to ideální způsob. Jestli to někdo děláte jinak a lépe, tak by mě to zajímalo.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.