Pro GIT

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í:

  1. Working directory – vytváření, mazání a změny souborů
  2. Staging area – přehled změn
  3. 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:
    1. git pull origin master
    2. git rm -r --cached .idea
    3. git status
    4. git commit -m "Deleted .idea folder"
    5. 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:
    1. git log --oneline --decorate --graph --all – zjištění <commit hash>
    2. git checkout <commit hash> <file-name> – vrácení změn u souboru index.php do požadovaného bodu
    3. git commit -a
    4. 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:
    1. git fetch origin #aktualizace vzdáleného repozitáře
    2. 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
    1. git checkout master – přepnutí se do větve master
    2. 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:

  1. Načtení změn ze vzdáleného úložiště do lokálního adresáře (fetch, pull).
  2. Vytvoření pracovní větve (checkout -b).
  3. Provést požadované úpravy a změny uložit lokálně (commit).
  4. 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.
  5. Spojení pracovní větve do hlavní (merge).
  6. Odstranění pracovní větve (branch -d).
  7. Uložit změny do vzdáleného repozitáře (push).

Záložky (viz git-scm.com/book/en/v2/Git-Basics-Tagging):

  1. Vytvoření dočasné záložky
    • git tag 1.0.x-dev
  2. 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ě)
  3. 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
  4. 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:

  • Mac
    • nainstalujte git-osx-installer
    • zobrazení aktuálního nastavení
    • git config --list
    • nastavení základních údajů
    • git config --global user.name "Your Name"
      git config --global user.email your@email.com
      • nastavené údaje je možné modifikovat v ~/.gitconfig (v domovském adresáři svého účtu)

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

  • .DS_Store
    .sass-cache
    /.esproj/
    /.dropbox
    /TestFolder
    *.espressostorage

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í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
        • git config --global user.name "My Name"
          git config --global user.email "my@email.com"
      • Create a new repository (from an existing)
        • git clone git@gitlab.com:repository-name/project-name.git
          cd project-name
          touch README.md
          git add README.md
          git commit -m "add README"
          git push -u origin master
      • Existing folder
        • cd existing_folder
          git init
          git remote add origin git@gitlab.com:repository-name/project-name.git
          git add .
          git commit -m "Initial commit"
          git push -u origin master
      • Existing Git repository
        • cd existing_repo
          git remote rename origin old-origin
          git remote add origin git@gitlab.com:repository-name/project-name.git
          git push -u origin --all
          git push -u origin --tags
  • 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 -
PřílohaVelikost
scott-chacon-pro-git-cz.pdf5.62 MB