Ignorování souborů

Často se stává, že některé soubory v repozitáři nechceš. Takových souborů jsou tři hlavní druhy:

Pomocné soubory nástrojů

Python občas sám od sebe vytváří adresář __pycache__ s pomocnými soubory. Některé počítače vytváří skryté soubory s názvy jako .Thumbnails, .DS_Store nebo Thumbs.db. Takové věci v repozitáři nemají co dělat – je dobrým zvykem do Gitu nedávat nic, co jde vytvořit automaticky.

Výstup programu

Píšeš-li program, který kreslí obrázky, většinou chceš v repozitáři jen samotný program. Obrázky si může pomocí programu každý vytvořit sám.

Osobní soubory

Občas se stane, že v adresáři s repozitářem máš soubor s osobními poznámkami nebo třeba s heslem. Zbytek repozitáře plánuješ zveřejnit, ale tyto soubory by měly zůstat jen ve tvé kopii.

My budeme chtít Git nastavit tak, aby tyto soubory ignoroval: aby git status neukazoval červeně, že ještě nejsou v repozitáři.

Příprava

Pojďme si to ukázat na příkladu. Založ si nový repozitář a vytvoř v něm tři soubory s tímto obsahem:

  • obrazek.py

      from turtle import forward, left, right, getcanvas
    
      forward(50)
      left(60)
      forward(50)
      right(60)
      forward(50)
    
      getcanvas().postscript(file='obrazek.ps')
    
  • poznamky.txt

      Tohle je tajné!
  • Autofile.tmp

    Do tohohle souboru napiš cokoliv. Různé operační systémy a (jiné programy) vytváří různé soubory podivných jmen; Autofile.tmp pro nás bude představovat takový automaticky vzniklý soubor.

Pythonní program spusť (pomocí python obrazek.py). Mělo by se na chvíli ukázat okno s želvou a měl by vzniknout nový soubor obrazek.ps.

Obrázek ve formátu PostScript (.ps) se dá otevřít ve většině programů, které zvládají i PDF, případně v Inkscape.

Jak se na to dívá Git?

$ git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        Autofile.tmp
        obrazek.ps
        obrazek.py
        poznamky.txt

nothing added to commit but untracked files present (use "git add" to track)

Spousta souborů, ale jen jeden z nich chceš v repozitáři. Co s těmi ostatními?

Výstupy programu a pomocné soubory společných nástrojů

Nejjednodušší je vyrovnat se se souborem obrazek.ps. V repozitáři ho nechceš (je to repozitář zdrojového kódu; výsledky bývá lepší schraňovat jinde než v Gitu). Zároveň víš, že každý, kdo s repozitářem bude pracovat, pravděpodobně tenhle soubor vytvoří. Bylo by tedy dobré říct všem lidem, kteří se k repozitáři dostanou, že tento soubor nechceš. To se dělá záznamem ve speciálním souboru v repozitáři.

Udělej soubor s názvem .gitignore. (Pozor na tečku ve jménu souboru; na některých systémech se špatně zadává – doporučuji soubor vytvořit v programátorském editoru.) Do něj napiš:

obrazek.ps

Pak se podívej na git status. Obrázek už by ve výpisu neměl být!

$ git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        .gitignore
        Autofile.tmp
        obrazek.py
        poznamky.txt

nothing added to commit but untracked files present (use "git add" to track)

Nový soubor .gitignore (a samotný program) potřebujeme přidat do repozitáře. Udělej to, pomocí git add:

$ git add .gitignore obrazek.py
$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   .gitignore
        new file:   obrazek.py

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        Autofile.tmp
        poznamky.txt

Když uděláš git commit a repozitář nasdílíš s ostatními, všichni dostanou .gitignore s instrukcí, že obrazek.ps do repozitáře nepatří.

Jak ignorovat zbylé dva soubory?

Osobní poznámky

Soubor poznamky.txt se taky dá zařadit do .gitignore, ale moc se tam nehodí. Existuje jen u tebe; není důvod předpokládat, že si někdo jiný vytvoří soubor se stejným jménem.

Dejme ho tedy do souboru, který se nebude šířit s repozitářem. Tento soubor je .git/info/exclude. (Může být trochu složité ho najít, protože adresář .git je skrytý. Nevidíš–li ho, napiš okýnku pro otevření souboru .git a dostaneš se do něj.)

Soubory v adresáři .git bys neměla měnit, protože se tak dá přijít o historii projektu. Ale exclude je výjimka. Napiš na konec tohoto souboru:

poznamky.txt

A po uložení budou poznámky ignorovány!

$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   .gitignore
        new file:   obrazek.py

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        Autofile.tmp

Další haraburdí

Některé programy automaticky vytvářejí pomocné soubory. Často to dělají správci souborů (často .Thumbnails na Linuxu, .DS_Store na Macu nebo Thumbs.db na Windows). Některé editory si taky nechávají na disku nastavení.

Podobné soubory se dají dát do .gitignore. Je ale lepší si je dát do osobního nastavení, protože ostatní lidé, kteří na projektu můžou spolupracovat, nemusí používat stejný systém a programy.

Pokud si můžeš být jistá, že ostatní budou používat právě ten program, který používáš ty, použij .gitignore. Příklad je adresář __pycache__, který vytváří Python při importu modulu.

Soubor s osobním nastavením si můžeš pojmenovat, jak chceš, a můžeš ho uložit kde budeš chtít. Já doporučuji ho pojmenovat .gitignore_global a dát ho do tvého domovského adresáře.

Do souboru zase napiš jméno ignorovaného souboru:

Autofile.tmp

Potom řekni Gitu, kde tento soubor najít:

$ git config --global core.excludesfile /tmp/tmp.1spGPvBL5W/.gitignore_global

A měl by být ignorován:

$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   .gitignore
        new file:   obrazek.py

Formát ignorovacího souboru

Ve všech třech „ignorovacích“ souborech lze samozřejmě uvést víc souborů: každý na zvláštní řádek. Kromě toho je možné použít několik vychytávek:

  • * ve jméně souboru nahradí část jména souboru. Takže pokud chceš ignorovat všechny soubory s příponou .tmp, můžeš napsat:

    *.tmp
  • / na konci jména značí adresář. Chceš-li tedy ignorovat adresáře __pycache__ (což v Pythonním projektu chceš), napiš do .gitignore:

    __pycache__/

Další detaily je možné najít v dokumentaci.

Automatické přidávání

Teď, když umíš ignorovat soubory, si můžeme ukázat zkratku. Místo

git add soubor1 soubor2
git commit

můžeš napsat jen git commit s tečkou na konci:

$ git commit .

To automaticky přidá všechny neignorované soubory, které git status ukazuje červeně. Tečka je jméno pro aktuální adresář – celý adresář a všechno pod ním se přidá do revize.

Doporučuji si před použitím téhle zkratky zkontrolovat git status, aby sis ověřila, že nepřidáváš nic, co nechceš.

Taky doporučuji si nastavit Git, aby se v editoru, kam píšeš popisek revize, ukazovala poznámka s tím, co vlastně v nové revizi bude:

$ git config --global commit.verbose 1
{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2018/pyladies-brno-jaro-st:foss:7",
      "title": "Ignorování souborů v Gitu (bonus)",
      "html": "\n          \n    \n\n    <h1>Ignorov&#xE1;n&#xED; soubor&#x16F;</h1>\n<p>&#x10C;asto se st&#xE1;v&#xE1;, &#x17E;e n&#x11B;kter&#xE9; soubory v&#xA0;repozit&#xE1;&#x159;i nechce&#x161;.\nTakov&#xFD;ch soubor&#x16F; jsou t&#x159;i hlavn&#xED; druhy:</p>\n<dl>\n<dt></dt><dt>Pomocn&#xE9; soubory n&#xE1;stroj&#x16F;</dt><dd><p>Python ob&#x10D;as s&#xE1;m od sebe vytv&#xE1;&#x159;&#xED; adres&#xE1;&#x159; <code>__pycache__</code> s&#xA0;pomocn&#xFD;mi soubory.\nN&#x11B;kter&#xE9; po&#x10D;&#xED;ta&#x10D;e vytv&#xE1;&#x159;&#xED; skryt&#xE9; soubory s&#xA0;n&#xE1;zvy jako\n<code>.Thumbnails</code>, <code>.DS_Store</code> nebo <code>Thumbs.db</code>.\nTakov&#xE9; v&#x11B;ci v&#xA0;repozit&#xE1;&#x159;i nemaj&#xED; co d&#x11B;lat &#x2013; je\ndobr&#xFD;m zvykem do Gitu ned&#xE1;vat nic, co jde vytvo&#x159;it automaticky.</p>\n</dd><dt></dt><dt>V&#xFD;stup programu</dt><dd><p>P&#xED;&#x161;e&#x161;-li program, kter&#xFD; kresl&#xED; obr&#xE1;zky, v&#x11B;t&#x161;inou chce&#x161; v&#xA0;repozit&#xE1;&#x159;i\njen samotn&#xFD; program.\nObr&#xE1;zky si m&#x16F;&#x17E;e pomoc&#xED; programu ka&#x17E;d&#xFD; vytvo&#x159;it s&#xE1;m.</p>\n</dd><dt></dt><dt>Osobn&#xED; soubory</dt><dd><p>Ob&#x10D;as se stane, &#x17E;e v&#xA0;adres&#xE1;&#x159;i s&#xA0;repozit&#xE1;&#x159;em m&#xE1;&#x161; soubor s&#xA0;osobn&#xED;mi\npozn&#xE1;mkami nebo t&#x159;eba s&#xA0;heslem.\nZbytek repozit&#xE1;&#x159;e pl&#xE1;nuje&#x161; zve&#x159;ejnit, ale tyto soubory by m&#x11B;ly z&#x16F;stat\njen ve tv&#xE9; kopii.</p>\n</dd></dl><p>My budeme cht&#xED;t Git nastavit tak, aby tyto soubory ignoroval: aby\n<code>git status</code> neukazoval &#x10D;erven&#x11B;, &#x17E;e je&#x161;t&#x11B; nejsou v&#xA0;repozit&#xE1;&#x159;i.</p>\n<h2>P&#x159;&#xED;prava</h2>\n<p>Poj&#x10F;me si to uk&#xE1;zat na p&#x159;&#xED;kladu.\nZalo&#x17E; si nov&#xFD; repozit&#xE1;&#x159; a vytvo&#x159; v&#xA0;n&#x11B;m t&#x159;i soubory s&#xA0;t&#xED;mto obsahem:</p>\n<ul>\n<li><p><code>obrazek.py</code></p>\n<div class=\"highlight\"><pre><span></span>  <span class=\"kn\">from</span> <span class=\"nn\">turtle</span> <span class=\"kn\">import</span> <span class=\"n\">forward</span><span class=\"p\">,</span> <span class=\"n\">left</span><span class=\"p\">,</span> <span class=\"n\">right</span><span class=\"p\">,</span> <span class=\"n\">getcanvas</span>\n\n  <span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n  <span class=\"n\">left</span><span class=\"p\">(</span><span class=\"mi\">60</span><span class=\"p\">)</span>\n  <span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n  <span class=\"n\">right</span><span class=\"p\">(</span><span class=\"mi\">60</span><span class=\"p\">)</span>\n  <span class=\"n\">forward</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n\n  <span class=\"n\">getcanvas</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">postscript</span><span class=\"p\">(</span><span class=\"nb\">file</span><span class=\"o\">=</span><span class=\"s1\">&apos;obrazek.ps&apos;</span><span class=\"p\">)</span>\n</pre></div></li>\n<li><p><code>poznamky.txt</code></p>\n<div class=\"highlight\"><pre><code>  Tohle je tajn&#xE9;!</code></pre></div></li>\n<li><p><code>Autofile.tmp</code></p>\n<p>Do tohohle souboru napi&#x161; cokoliv.\n  R&#x16F;zn&#xE9; opera&#x10D;n&#xED; syst&#xE9;my a (jin&#xE9; programy) vytv&#xE1;&#x159;&#xED; r&#x16F;zn&#xE9; soubory\n  podivn&#xFD;ch jmen; <code>Autofile.tmp</code> pro n&#xE1;s bude p&#x159;edstavovat takov&#xFD;\n  automaticky vznikl&#xFD; soubor.</p>\n</li>\n</ul>\n<p>Pythonn&#xED; program spus&#x165; (pomoc&#xED; <code>python obrazek.py</code>).\nM&#x11B;lo by se na chv&#xED;li uk&#xE1;zat okno s&#xA0;&#x17E;elvou a m&#x11B;l by vzniknout nov&#xFD; soubor\n<code>obrazek.ps</code>.</p>\n<div class=\"admonition note\"><p>Obr&#xE1;zek ve form&#xE1;tu PostScript (.ps) se d&#xE1; otev&#x159;&#xED;t ve v&#x11B;t&#x161;in&#x11B; program&#x16F;, kter&#xE9;\nzvl&#xE1;daj&#xED; i PDF, p&#x159;&#xED;padn&#x11B; v&#xA0;<a href=\"https://inkscape.org/\">Inkscape</a>.</p>\n</div><p>Jak se na to d&#xED;v&#xE1; Git?</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git status\nOn branch master\n\nInitial commit\n\nUntracked files:\n  (use &quot;git add &lt;file&gt;...&quot; to include in what will be committed)\n\n        <span style=\"color: #aa0000\">Autofile.tmp</span>\n        <span style=\"color: #aa0000\">obrazek.ps</span>\n        <span style=\"color: #aa0000\">obrazek.py</span>\n        <span style=\"color: #aa0000\">poznamky.txt</span>\n\nnothing added to commit but untracked files present (use &quot;git add&quot; to track)</code></pre></div><p>Spousta soubor&#x16F;, ale jen jeden z nich chce&#x161; v&#xA0;repozit&#xE1;&#x159;i.\nCo s t&#x11B;mi ostatn&#xED;mi?</p>\n<h2>V&#xFD;stupy programu a pomocn&#xE9; soubory spole&#x10D;n&#xFD;ch n&#xE1;stroj&#x16F;</h2>\n<p>Nejjednodu&#x161;&#x161;&#xED; je vyrovnat se se souborem <code>obrazek.ps</code>.\nV&#xA0;repozit&#xE1;&#x159;i ho nechce&#x161; (je to repozit&#xE1;&#x159; <em>zdrojov&#xE9;ho</em> k&#xF3;du; v&#xFD;sledky b&#xFD;v&#xE1;\nlep&#x161;&#xED; schra&#x148;ovat jinde ne&#x17E; v Gitu).\nZ&#xE1;rove&#x148; v&#xED;&#x161;, &#x17E;e ka&#x17E;d&#xFD;, kdo s repozit&#xE1;&#x159;em bude pracovat, pravd&#x11B;podobn&#x11B;\ntenhle soubor vytvo&#x159;&#xED;.\nBylo by tedy dobr&#xE9; &#x159;&#xED;ct <em>v&#x161;em</em> lidem, kte&#x159;&#xED; se k repozit&#xE1;&#x159;i dostanou, &#x17E;e tento\nsoubor nechce&#x161;.\nTo se d&#x11B;l&#xE1; z&#xE1;znamem ve speci&#xE1;ln&#xED;m souboru v&#xA0;repozit&#xE1;&#x159;i.</p>\n<p>Ud&#x11B;lej soubor s&#xA0;n&#xE1;zvem <code>.gitignore</code>.\n(Pozor na te&#x10D;ku ve jm&#xE9;nu souboru; na n&#x11B;kter&#xFD;ch syst&#xE9;mech se &#x161;patn&#x11B; zad&#xE1;v&#xE1; &#x2013;\ndoporu&#x10D;uji soubor vytvo&#x159;it v&#xA0;program&#xE1;torsk&#xE9;m editoru.)\nDo n&#x11B;j napi&#x161;:</p>\n<div class=\"highlight\"><pre><code>obrazek.ps</code></pre></div><p>Pak se pod&#xED;vej na <code>git status.</code> Obr&#xE1;zek u&#x17E; by ve v&#xFD;pisu nem&#x11B;l b&#xFD;t!</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git status\nOn branch master\n\nInitial commit\n\nUntracked files:\n  (use &quot;git add &lt;file&gt;...&quot; to include in what will be committed)\n\n        <span style=\"color: #aa0000\">.gitignore</span>\n        <span style=\"color: #aa0000\">Autofile.tmp</span>\n        <span style=\"color: #aa0000\">obrazek.py</span>\n        <span style=\"color: #aa0000\">poznamky.txt</span>\n\nnothing added to commit but untracked files present (use &quot;git add&quot; to track)</code></pre></div><p>Nov&#xFD; soubor <code>.gitignore</code> (a samotn&#xFD; program) pot&#x159;ebujeme p&#x159;idat do repozit&#xE1;&#x159;e.\nUd&#x11B;lej to, pomoc&#xED; <code>git add</code>:</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git add .gitignore obrazek.py\n<span style=\"color: #00aaaa\">$</span> git status\nOn branch master\n\nInitial commit\n\nChanges to be committed:\n  (use &quot;git rm --cached &lt;file&gt;...&quot; to unstage)\n\n        <span style=\"color: #00aa00\">new file:   .gitignore</span>\n        <span style=\"color: #00aa00\">new file:   obrazek.py</span>\n\nUntracked files:\n  (use &quot;git add &lt;file&gt;...&quot; to include in what will be committed)\n\n        <span style=\"color: #aa0000\">Autofile.tmp</span>\n        <span style=\"color: #aa0000\">poznamky.txt</span></code></pre></div><p>Kdy&#x17E; ud&#x11B;l&#xE1;&#x161; <code>git commit</code> a repozit&#xE1;&#x159; nasd&#xED;l&#xED;&#x161; s&#xA0;ostatn&#xED;mi, v&#x161;ichni dostanou\n<code>.gitignore</code> s&#xA0;instrukc&#xED;, &#x17E;e <code>obrazek.ps</code> do repozit&#xE1;&#x159;e nepat&#x159;&#xED;.</p>\n<p>Jak ignorovat zbyl&#xE9; dva soubory?</p>\n<h2>Osobn&#xED; pozn&#xE1;mky</h2>\n<p>Soubor <code>poznamky.txt</code> se taky d&#xE1; za&#x159;adit do <code>.gitignore</code>, ale moc se tam nehod&#xED;.\nExistuje jen u tebe; nen&#xED; d&#x16F;vod p&#x159;edpokl&#xE1;dat, &#x17E;e si n&#x11B;kdo jin&#xFD; vytvo&#x159;&#xED;\nsoubor se stejn&#xFD;m jm&#xE9;nem.</p>\n<p>Dejme ho tedy do souboru, kter&#xFD; se nebude &#x161;&#xED;&#x159;it s&#xA0;repozit&#xE1;&#x159;em.\nTento soubor je <code>.git/info/exclude</code>.\n(M&#x16F;&#x17E;e b&#xFD;t trochu slo&#x17E;it&#xE9; ho naj&#xED;t, proto&#x17E;e adres&#xE1;&#x159; <code>.git</code> je skryt&#xFD;. \nNevid&#xED;&#x161;&#x2013;li ho, napi&#x161; ok&#xFD;nku pro otev&#x159;en&#xED; souboru <code>.git</code> a dostane&#x161; se do n&#x11B;j.)</p>\n<p>Soubory v&#xA0;adres&#xE1;&#x159;i <code>.git</code> bys nem&#x11B;la m&#x11B;nit, proto&#x17E;e se tak d&#xE1; p&#x159;ij&#xED;t\no historii projektu.\nAle <code>exclude</code> je v&#xFD;jimka. Napi&#x161; na konec tohoto souboru:</p>\n<div class=\"highlight\"><pre><code>poznamky.txt</code></pre></div><p>A po ulo&#x17E;en&#xED; budou pozn&#xE1;mky ignorov&#xE1;ny!</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git status\nOn branch master\n\nInitial commit\n\nChanges to be committed:\n  (use &quot;git rm --cached &lt;file&gt;...&quot; to unstage)\n\n        <span style=\"color: #00aa00\">new file:   .gitignore</span>\n        <span style=\"color: #00aa00\">new file:   obrazek.py</span>\n\nUntracked files:\n  (use &quot;git add &lt;file&gt;...&quot; to include in what will be committed)\n\n        <span style=\"color: #aa0000\">Autofile.tmp</span></code></pre></div><h2>Dal&#x161;&#xED; haraburd&#xED;</h2>\n<p>N&#x11B;kter&#xE9; programy automaticky vytv&#xE1;&#x159;ej&#xED; pomocn&#xE9; soubory.\n&#x10C;asto to d&#x11B;laj&#xED; spr&#xE1;vci soubor&#x16F; (&#x10D;asto <code>.Thumbnails</code> na Linuxu,\n<code>.DS_Store</code> na Macu nebo <code>Thumbs.db</code> na Windows).\nN&#x11B;kter&#xE9; editory si taky nech&#xE1;vaj&#xED; na disku nastaven&#xED;.</p>\n<p>Podobn&#xE9; soubory se daj&#xED; d&#xE1;t do <code>.gitignore</code>.\nJe ale lep&#x161;&#xED; si je d&#xE1;t do osobn&#xED;ho nastaven&#xED;, proto&#x17E;e ostatn&#xED; lid&#xE9;,\nkte&#x159;&#xED; na projektu m&#x16F;&#x17E;ou spolupracovat, nemus&#xED; pou&#x17E;&#xED;vat stejn&#xFD; syst&#xE9;m\na programy.</p>\n<div class=\"admonition note\"><p>Pokud si m&#x16F;&#x17E;e&#x161; b&#xFD;t jist&#xE1;, &#x17E;e ostatn&#xED; budou pou&#x17E;&#xED;vat pr&#xE1;v&#x11B;\nten program, kter&#xFD; pou&#x17E;&#xED;v&#xE1;&#x161; ty, pou&#x17E;ij <code>.gitignore</code>.\nP&#x159;&#xED;klad je adres&#xE1;&#x159; <code>__pycache__</code>, kter&#xFD; vytv&#xE1;&#x159;&#xED; Python p&#x159;i importu modulu.</p>\n</div><p>Soubor s&#xA0;osobn&#xED;m nastaven&#xED;m si m&#x16F;&#x17E;e&#x161; pojmenovat, jak chce&#x161;, a m&#x16F;&#x17E;e&#x161; ho ulo&#x17E;it\nkde bude&#x161; cht&#xED;t.\nJ&#xE1; doporu&#x10D;uji ho pojmenovat <code>.gitignore_global</code> a d&#xE1;t ho do tv&#xE9;ho domovsk&#xE9;ho\nadres&#xE1;&#x159;e.</p>\n<p>Do souboru zase napi&#x161; jm&#xE9;no ignorovan&#xE9;ho souboru:</p>\n<div class=\"highlight\"><pre><code>Autofile.tmp</code></pre></div><p>Potom &#x159;ekni Gitu, kde tento soubor naj&#xED;t:</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git config --global core.excludesfile /tmp/tmp.1spGPvBL5W/.gitignore_global</code></pre></div><p>A m&#x11B;l by b&#xFD;t ignorov&#xE1;n:</p>\n<div class=\"highlight\"><pre><code><span style=\"color: #00aaaa\">$</span> git status\nOn branch master\n\nInitial commit\n\nChanges to be committed:\n  (use &quot;git rm --cached &lt;file&gt;...&quot; to unstage)\n\n        <span style=\"color: #00aa00\">new file:   .gitignore</span>\n        <span style=\"color: #00aa00\">new file:   obrazek.py</span></code></pre></div><h2>Form&#xE1;t ignorovac&#xED;ho souboru</h2>\n<p>Ve v&#x161;ech t&#x159;ech &#x201E;ignorovac&#xED;ch&#x201C; souborech lze samoz&#x159;ejm&#x11B; uv&#xE9;st v&#xED;c soubor&#x16F;:\nka&#x17E;d&#xFD; na zvl&#xE1;&#x161;tn&#xED; &#x159;&#xE1;dek.\nKrom&#x11B; toho je mo&#x17E;n&#xE9; pou&#x17E;&#xED;t n&#x11B;kolik vychyt&#xE1;vek:</p>\n<ul>\n<li><p><code>*</code> ve jm&#xE9;n&#x11B; souboru nahrad&#xED; &#x10D;&#xE1;st jm&#xE9;na souboru.\nTak&#x17E;e pokud chce&#x161; ignorovat v&#x161;echny soubory s&#xA0;p&#x159;&#xED;ponou <code>.tmp</code>, m&#x16F;&#x17E;e&#x161; napsat:</p>\n<div class=\"highlight\"><pre><code>*.tmp</code></pre></div></li>\n<li><p><code>/</code> na konci jm&#xE9;na zna&#x10D;&#xED; adres&#xE1;&#x159;. Chce&#x161;-li tedy ignorovat adres&#xE1;&#x159;e\n<code>__pycache__</code> (co&#x17E; v&#xA0;Pythonn&#xED;m projektu chce&#x161;), napi&#x161; do <code>.gitignore</code>:</p>\n<div class=\"highlight\"><pre><code>__pycache__/</code></pre></div></li>\n</ul>\n<p>Dal&#x161;&#xED; detaily je mo&#x17E;n&#xE9; naj&#xED;t v&#xA0;<a href=\"https://git-scm.com/docs/gitignore\">dokumentaci</a>.</p>\n<h2>Automatick&#xE9; p&#x159;id&#xE1;v&#xE1;n&#xED;</h2>\n<p>Te&#x10F;, kdy&#x17E; um&#xED;&#x161; ignorovat soubory, si m&#x16F;&#x17E;eme uk&#xE1;zat zkratku. M&#xED;sto</p>\n<div class=\"highlight\"><pre><span></span><span class=\"go\">git add soubor1 soubor2</span>\n<span class=\"go\">git commit</span>\n</pre></div><p>m&#x16F;&#x17E;e&#x161; napsat jen <code>git commit</code> s&#xA0;te&#x10D;kou na konci:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">$ </span>git commit .\n</pre></div><p>To automaticky p&#x159;id&#xE1; <em>v&#x161;echny</em> neignorovan&#xE9; soubory, kter&#xE9; <code>git status</code> ukazuje\n&#x10D;erven&#x11B;.\nTe&#x10D;ka je jm&#xE9;no pro aktu&#xE1;ln&#xED; adres&#xE1;&#x159; &#x2013; cel&#xFD; adres&#xE1;&#x159; a v&#x161;echno pod n&#xED;m se p&#x159;id&#xE1;\ndo revize.</p>\n<p>Doporu&#x10D;uji si p&#x159;ed pou&#x17E;it&#xED;m t&#xE9;hle zkratky zkontrolovat <code>git status</code>, aby sis\nov&#x11B;&#x159;ila, &#x17E;e nep&#x159;id&#xE1;v&#xE1;&#x161; nic, co nechce&#x161;.</p>\n<p>Taky doporu&#x10D;uji si nastavit Git, aby se v&#xA0;editoru, kam p&#xED;&#x161;e&#x161; popisek revize,\nukazovala pozn&#xE1;mka s t&#xED;m, co vlastn&#x11B; v&#xA0;nov&#xE9; revizi bude:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">$ </span>git config --global commit.verbose <span class=\"m\">1</span>\n</pre></div>\n\n\n        "
    }
  }
}