Systém správy verzí (verzovací systém) Pro GIT (částečně přeloženo) je základním nástrojem vývojářů (nejen) open source softwaru.
Názvosloví:
- Working directory – vytváření, mazání a změny souborů
- Staging area – přehled změn
- Repository – úložiště změn
Pracovní postup se skládá z editace souborů v pracovním adresáři, přidávání souborů do pracovní oblasti a z uložení změn do Git úložiště pomocí tzv. "commit"ů.
Popis příkazů:
- git init – vytvoření nového Git úložiště (repozitář)
- git status – kontrola souborů v pracovním adresáři a pracovní oblasti
- git add file.txt - přidání souboru file.txt (mezera mezi více soubory) z pracovního adresáře do pracovní oblasti
- git add . – přidání všech souborů
- git rm file.txt – smazání souboru z pracovního adresáře a pracovní oblasti
- git rm -r --cached folder-name – smazání adresáře folder-name z pracovního adresáře a pracovní oblasti
- smazání adresáře .idea z repozitáře:
- git pull origin master
- git rm -r --cached .idea
- git status
- git commit -m "Deleted .idea folder"
- git push origin master
- git diff - zobrazení změn mezi pracovním adresářem a pracovní oblastí
- git commit -m "popis" - trvalé uložení změn z pracovní oblasti do lokálního Git úložiště
- git log - zobrazí přehled všech změn (jen komentáře)
- git log --oneline --decorate
- git log --oneline --decorate --graph --all
- vrácení změn u požadovaného souboru:
- git log --oneline --decorate --graph --all – zjištění <commit hash>
- git checkout <commit hash> <file-name> – vrácení změn u souboru index.php do požadovaného bodu
- git commit -a
- git push
- git show HEAD – zobrazí přehled všech změn (HEAD je poslední commit)
- git checkout HEAD file.txt – obnoví soubor file.txt v pracovním adresáři z pracovní oblasti
- git reset HEAD file.txt – odebere soubor file.txt z pracovní oblasti (v pracovním adresáři zůstane) před uložením změn do Git úložiště
- git reset 6abf3e7 – odstraní z Git úložiště všechny změny od uvedeného SHA (stačí uvést prvních 7 znaků)
- smazání všech lokálních změn a návrat projektu do stejného stavu jako je ve vzdáleném repozitáři:
- git fetch origin #aktualizace vzdáleného repozitáře
- git reset --hard origin/master
Větve:
- git branch – zobrazení aktuální větve
- git checkout -b new_branch – zkrácený zápis dvou níže uvedených příkazů:
- git branch new_branch – vytvoření nové větve "new_branch"
- git checkout new_branch – přepnutí se do větve "new_branch"
- git diff new_branch master – náhled před spojením větví (new_branch – zdrojová větev, master -cílová větev)
- spojení větve new_branch do hlavní větve master
- git checkout master – přepnutí se do větve master
- git merge new_branch – vloží všechny změny z větve "new_branch" do aktuální větve, obvykle "master" (případný konflikt je v souboru vyznačen a je třeba jej ručně vyřešit a smazat i gitem vložené označení)
- git branch -d new_branch – smazání větve "new_branch"
Úložiště (repozitář):
- master – název hlavní větve (není podmínkou)
- origin – název vzdálené větve
- git clone... – vytvoření klonu repozitáře
- git remote -v – zobrazí seznam Git projektů
- git fetch – kontrola aktuálnosti lokální kopie oproti vzdálenému úložišti
- git merge origin/master – sloučení vzdálené větve "origin/master" do aktuální lokální větve
- git push origin new_branch – uloží větev "new_branch" do vzdáleného úložiště
- git pull – aktualizace lokálního úložiště
- git pull origin master – aktualizace konkrétní větve (origin – vzdálený repozitář, master – požadovaná větev)
Doporučený postup práce:
- Načtení změn ze vzdáleného úložiště do lokálního adresáře (fetch, pull).
- Vytvoření pracovní větve (checkout -b).
- Provést požadované úpravy a změny uložit lokálně (commit).
- Opětovné načtení změn ze vzdáleného úložiště do lokálního adresáře (fetch, pull) – pojistka proti konfliktům.
- Spojení pracovní větve do hlavní (merge).
- Odstranění pracovní větve (branch -d).
- Uložit změny do vzdáleného repozitáře (push).
Záložky (viz git-scm.com/book/en/v2/Git-Basics-Tagging):
- Vytvoření dočasné záložky
- Vytvoření trvalé záložky (verzování https://semver.org/lang/cs/)
- git tag -a 1.0.x-dev -m "projectName 1.0.x-dev"
- git push origin 1.0.x-dev - přenesení záložky 1.0.x-dev z pracovní oblasti do úložiště
- (git push --tags - přenesení všech záložek z pracovní oblasti do úložiště)
- Zobrazení záložek
- git tag – zobrazení všech záložek
- git show 1.0.x-dev – zobrazení detailu konkrétní záložky
- Odstranění záložek
- git tag -d tagName – odstranění lokální záložky
- git push --delete origin tagName – odstranění záložky z úložiště
- (git push origin :refs/tags/tagName)
Tipy:
- pandao.github.io/editor.md/en.html – markdown online editor
- sourcetreeapp.com – aplikace pro vizuální zobrazení větvení
- Mercurial
- github.com/git-tips/tips
Instalace:
Založení repozitáře na serveru:
- přihlášení, vytvoření adresáře, přechod do adresáře, tvorba repozitáře, nasdílení, vytvoření popisu repozitáře
-
ssh git
mkdir themes/[theme-name].git
cd themes/[theme-name].git
git --bare init
git init --bare --shared
echo 'Theme description' > description
- Vytvoření repozitáře ve složce u sebe na lokale a první commit na server
-
cd workspace/[theme-name]
git init
git add .
git commit -m 'Initial GIT version'
git remote add origin git:themes/[theme-name].git
git push origin master
Základní příkazy:
git pull
git commit -m 'komentář změny (konvence: používat přítomný čas do 50 znaků)'
git status
git push
git svn dcommit
Porovnání změn (klávesa q ukončí zobrazení diff režimu):
git diff filename.txt
Zobrazení historie změn:
git log
V .ssh/config je vhodné definovat požadované připojení např.:
Host gitlab.com
Hostname gitlab.com
Port 2211
IdentityFile ~/.ssh/custom_id_rsa
User git
Vytvoření klonu z repozitáře do aktuálního adresáře (se zachováním původního názvu):
cd ~/workspace
mkdir myproject
cd myproject
git clone git:repos/test.git
git status
Vytvoření klonu z repozitáře do adresáře test (dojde k přejmenování na test):
git clone git:repos/test.git test
Soubor .gitignore
Prázdné adresáře je možné verzovat pomocí souboru .gitkeep nebo README.md (doporučeno).
"Správný" popisek (commit message)
Git dělí popisky na jednořádkové shrnutí a volitelné detaily, které mohou mít libovolný počet řádků. Obě části jsou oddělené prázdným řádkem.
- shrnutí: 50–60 znaků
- prázdný řádek
- detaily: zalamovat po 72 znacích, vhodné je používat i odkazy na externí zdroje např. evidenci chyb (issue tracker)
Repozitáře (úložiště)
- gogs.io – české uživatelské prostředí
- GitLab.org - neveřejný správce repozitářů zdarma
- gitlab – wiki
- gitlab – sign in
- Command line instructions
- Git global setup
- Create a new repository (from an existing)
- Existing folder
- Existing Git repository
- GitHub.com – veřejný správce repozitářů zdarma
- bitbucket.org
SSH
Vygenerování klíče:
ssh-keygen -t rsa -C "popis např. e-mail" -b 4096 -f filename
Test připojení:
ssh -T -i filename git@gitlab.com
Aplikace opravy (patch)
Pomocí wget:
$ wget -q -O - http://drupal.org/files/[patch-name].patch | git apply -
nebo pomocí curl:
$ curl http://drupal.org/files/[patch-name].patch | git apply -