CINXE.COM
Git - Protokoly
<!DOCTYPE html> <html lang="cs"> <head> <meta charset='utf-8'> <meta content='IE=edge,chrome=1' http-equiv='X-UA-Compatible'> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Git - Protokoly</title> <link href="/favicon.ico" rel='shortcut icon' type='image/x-icon'> <link rel="stylesheet" href="/application.min.css"> <script src="/js/modernizr.js"></script> <script src="/js/modernize.js"></script> </head> <body id="documentation"> <div class="inner"> <header> <a href="/"><img src="/images/logo@2x.png" width="110" height="46" alt="Git" /></a> <span id="tagline"></span> <script type="text/javascript"> const taglines = [ "fast-version-control", "everything-is-local", "distributed-even-if-your-workflow-isnt", "local-branching-on-the-cheap", "distributed-is-the-new-centralized" ]; var tagline = taglines[Math.floor(Math.random() * taglines.length)]; document.getElementById('tagline').innerHTML = '--' + tagline; </script> <form id="search" action="/search/results"> <input id="search-text" name="search" placeholder="Type / to search entire site…" autocomplete="off" type="text" /> </form> <div id="search-results"></div> </header> </div> <div class="inner"> <div id="content-wrapper"> <div tabindex="1" class="sidebar-btn"></div> <aside class="sidebar" id="sidebar"> <nav> <ul> <li> <a href="/about">About</a> <ul> </ul> </li> <li> <a href="/doc" class="active">Documentation</a> <ul class="expanded"> <li> <a href="/docs">Reference</a> </li> <li> <a href="/book" class="active">Book</a> </li> <li> <a href="/videos">Videos</a> </li> <li> <a href="/doc/ext">External Links</a> </li> </ul> </li> <li> <a href="/downloads">Downloads</a> <ul > <li> <a href="/downloads/guis">GUI Clients</a> </li> <li> <a href="/downloads/logos">Logos</a> </li> </ul> </li> <li> <a href="/community">Community</a> </li> </ul> <hr class="sidebar"> <p> This book is available in <a href="/book/en/v2/Git-on-the-Server-The-Protocols">English</a>. </p> <p> Full translation available in <table> <tr><td><a href="/book/az/v2/Server%e2%80%99d%c9%99-Git-Protokollar">azərbaycan dili</a>,</td></tr> <tr><td><a href="/book/bg/v2/GitHub-%d0%a1%d1%8a%d0%b7%d0%b4%d0%b0%d0%b2%d0%b0%d0%bd%d0%b5-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%bd%d0%b0-%d0%b0%d0%ba%d0%b0%d1%83%d0%bd%d1%82">български език</a>,</td></tr> <tr><td><a href="/book/de/v2/Git-auf-dem-Server-Die-Protokolle">Deutsch</a>,</td></tr> <tr><td><a href="/book/es/v2/Git-en-el-Servidor-Los-Protocolos">Español</a>,</td></tr> <tr><td><a href="/book/fr/v2/Git-sur-le-serveur-Protocoles">Français</a>,</td></tr> <tr><td><a href="/book/gr">Ελληνικά</a>,</td></tr> <tr><td><a href="/book/ja/v2/Git%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-%e3%83%97%e3%83%ad%e3%83%88%e3%82%b3%e3%83%ab">日本語</a>,</td></tr> <tr><td><a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%ed%94%84%eb%a1%9c%ed%86%a0%ec%bd%9c">한국어</a>,</td></tr> <tr><td><a href="/book/nl/v2/Git-op-de-server-De-protocollen">Nederlands</a>,</td></tr> <tr><td><a href="/book/ru/v2/Git-%d0%bd%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b5-%d0%9f%d1%80%d0%be%d1%82%d0%be%d0%ba%d0%be%d0%bb%d1%8b">Русский</a>,</td></tr> <tr><td><a href="/book/sl/v2/Git-na-stre%c5%beniku-Protokoli">Slovenščina</a>,</td></tr> <tr><td><a href="/book/tl/v2/Git-sa-Server-Ang-Mga-Protokol">Tagalog</a>,</td></tr> <tr><td><a href="/book/uk/v2/Git-%d0%bd%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d1%96-%d0%9f%d1%80%d0%be%d1%82%d0%be%d0%ba%d0%be%d0%bb%d0%b8">Українська</a></td></tr> <tr><td><a href="/book/zh/v2/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e7%9a%84-Git-%e5%8d%8f%e8%ae%ae">简体中文</a>,</td></tr> </table> </p> <p> Partial translations available in <table> <tr><td><a href="/book/cs/v2/Git-na-serveru-Protokoly">Čeština</a>,</td></tr> <tr><td><a href="/book/mk/v2/Git-%d0%bd%d0%b0-%d0%a1%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%9f%d1%80%d0%be%d1%82%d0%be%d0%ba%d0%be%d0%bb%d0%b8%d1%82%d0%b5">Македонски</a>,</td></tr> <tr><td><a href="/book/pl/v2/Git-na-serwerze-Protoko%c5%82y">Polski</a>,</td></tr> <tr><td><a href="/book/sr/v2/%d0%93%d0%b8%d1%82-%d0%bd%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d1%83-%d0%9f%d1%80%d0%be%d1%82%d0%be%d0%ba%d0%be%d0%bb%d0%b8">Српски</a>,</td></tr> <tr><td><a href="/book/uz/v2/Git-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b4%d0%b0-The-Protocols">Ўзбекча</a>,</td></tr> <tr><td><a href="/book/zh-tw/v2/%e4%bc%ba%e6%9c%8d%e5%99%a8%e4%b8%8a%e7%9a%84-Git-%e9%80%9a%e8%a8%8a%e5%8d%94%e5%ae%9a">繁體中文</a>,</td></tr> </table> </p> <p> Translations started for <table> <tr><td><a href="/book/be/v2/Git-on-the-Server-The-Protocols">Беларуская</a>,</td></tr> <tr><td><a href="/book/fa/v2/%da%af%db%8c%d8%aa-%d8%b1%d9%88%db%8c-%d8%b3%d8%b1%d9%88%d8%b1-%d9%be%d8%b1%d9%88%d8%aa%da%a9%d9%84%e2%80%8c%d9%87%d8%a7" dir="rtl">فارسی</a>,</td></tr> <tr><td><a href="/book/id/v2/Git-di-Server-Protokol">Indonesian</a>,</td></tr> <tr><td><a href="/book/it/v2/Git-on-the-Server-The-Protocols">Italiano</a>,</td></tr> <tr><td><a href="/book/ms/v2/Git-on-the-Server-The-Protocols">Bahasa Melayu</a>,</td></tr> <tr><td><a href="/book/pt-br/v2/Git-no-servidor-Os-Protocolos">Português (Brasil)</a>,</td></tr> <tr><td><a href="/book/pt-pt/v2/Git-no-Servidor-The-Protocols">Português (Portugal)</a>,</td></tr> <tr><td><a href="/book/sv/v2/Git-p%c3%a5-servern-Protokollen">Svenska</a>,</td></tr> <tr><td><a href="/book/tr/v2/Bir-Sunucuda-Git-Kurma-%c4%b0leti%c5%9fim-Kurallar%c4%b1-Protocols">Türkçe</a>.</td></tr> </table> </p> <hr class="sidebar"/> <p> The source of this book is <a href="https://github.com/progit-cs/progit2-cs">hosted on GitHub.</a></br> Patches, suggestions and comments are welcome. </p> </nav> </aside> <div id="content"> <div id="book-chapters"> <a class="dropdown-trigger" id="book-chapters-trigger" data-panel-id="chapters-dropdown" href="#">Chapters ▾</a> <div class='dropdown-panel' id='chapters-dropdown'> <div class='three-column'> <div class="column-left"> <ol class='book-toc'> <li class='chapter'> <h2>1. <a href="/book/cs/v2/%c3%9avod-Spr%c3%a1va-verz%c3%ad">Úvod</a></h2> <ol> <li> 1.1 <a href="/book/cs/v2/%c3%9avod-Spr%c3%a1va-verz%c3%ad">Správa verzí</a> </li> <li> 1.2 <a href="/book/cs/v2/%c3%9avod-Stru%c4%8dn%c3%a1-historie-syst%c3%a9mu-Git">Stručná historie systému Git</a> </li> <li> 1.3 <a href="/book/cs/v2/%c3%9avod-Z%c3%a1klady-syst%c3%a9mu-Git">Základy systému Git</a> </li> <li> 1.4 <a href="/book/cs/v2/%c3%9avod-P%c5%99%c3%adkazov%c3%bd-%c5%99%c3%a1dek">Příkazový řádek</a> </li> <li> 1.5 <a href="/book/cs/v2/%c3%9avod-Instalace-syst%c3%a9mu-Git">Instalace systému Git</a> </li> <li> 1.6 <a href="/book/cs/v2/%c3%9avod-Prvn%c3%ad-nastaven%c3%ad-syst%c3%a9mu-Git">První nastavení systému Git</a> </li> <li> 1.7 <a href="/book/cs/v2/%c3%9avod-Z%c3%adsk%c3%a1n%c3%ad-n%c3%a1pov%c4%9bdy">Získání nápovědy</a> </li> <li> 1.8 <a href="/book/cs/v2/%c3%9avod-Shrnut%c3%ad">Shrnutí</a> </li> </ol> </li> <li class='chapter'> <h2>2. <a href="/book/cs/v2/Z%c3%a1klady-pr%c3%a1ce-se-syst%c3%a9mem-Git-Z%c3%adsk%c3%a1n%c3%ad-repozit%c3%a1%c5%99e-Git">Základy práce se systémem Git</a></h2> <ol> <li> 2.1 <a href="/book/cs/v2/Z%c3%a1klady-pr%c3%a1ce-se-syst%c3%a9mem-Git-Z%c3%adsk%c3%a1n%c3%ad-repozit%c3%a1%c5%99e-Git">Získání repozitáře Git</a> </li> <li> 2.2 <a href="/book/cs/v2/Z%c3%a1klady-pr%c3%a1ce-se-syst%c3%a9mem-Git-Nahr%c3%a1v%c3%a1n%c3%ad-zm%c4%9bn-do-repozit%c3%a1%c5%99e">Nahrávání změn do repozitáře</a> </li> <li> 2.3 <a href="/book/cs/v2/Z%c3%a1klady-pr%c3%a1ce-se-syst%c3%a9mem-Git-Zobrazen%c3%ad-historie-reviz%c3%ad">Zobrazení historie revizí</a> </li> <li> 2.4 <a href="/book/cs/v2/Z%c3%a1klady-pr%c3%a1ce-se-syst%c3%a9mem-Git-N%c3%a1vrat-do-p%c5%99edchoz%c3%adho-stavu">Návrat do předchozího stavu</a> </li> <li> 2.5 <a href="/book/cs/v2/Z%c3%a1klady-pr%c3%a1ce-se-syst%c3%a9mem-Git-Pr%c3%a1ce-se-vzd%c3%a1len%c3%bdmi-repozit%c3%a1%c5%99i">Práce se vzdálenými repozitáři</a> </li> <li> 2.6 <a href="/book/cs/v2/Z%c3%a1klady-pr%c3%a1ce-se-syst%c3%a9mem-Git-Pou%c5%be%c3%adv%c3%a1n%c3%ad-zna%c4%8dek">Používání značek</a> </li> <li> 2.7 <a href="/book/cs/v2/Z%c3%a1klady-pr%c3%a1ce-se-syst%c3%a9mem-Git-Aliasy-v-Gitu">Aliasy v Gitu</a> </li> <li> 2.8 <a href="/book/cs/v2/Z%c3%a1klady-pr%c3%a1ce-se-syst%c3%a9mem-Git-Shrnut%c3%ad">Shrnutí</a> </li> </ol> </li> <li class='chapter'> <h2>3. <a href="/book/cs/v2/V%c4%9btve-v-syst%c3%a9mu-Git-V%c4%9btve-v-kostce">Větve v systému Git</a></h2> <ol> <li> 3.1 <a href="/book/cs/v2/V%c4%9btve-v-syst%c3%a9mu-Git-V%c4%9btve-v-kostce">Větve v kostce</a> </li> <li> 3.2 <a href="/book/cs/v2/V%c4%9btve-v-syst%c3%a9mu-Git-Z%c3%a1klady-v%c4%9btven%c3%ad-a-slu%c4%8dov%c3%a1n%c3%ad">Základy větvení a slučování</a> </li> <li> 3.3 <a href="/book/cs/v2/V%c4%9btve-v-syst%c3%a9mu-Git-Spr%c3%a1va-v%c4%9btv%c3%ad">Správa větví</a> </li> <li> 3.4 <a href="/book/cs/v2/V%c4%9btve-v-syst%c3%a9mu-Git-Postupy-p%c5%99i-pr%c3%a1ci-s-v%c4%9btvemi">Postupy při práci s větvemi</a> </li> <li> 3.5 <a href="/book/cs/v2/V%c4%9btve-v-syst%c3%a9mu-Git-Vzd%c3%a1len%c3%a9-v%c4%9btve">Vzdálené větve</a> </li> <li> 3.6 <a href="/book/cs/v2/V%c4%9btve-v-syst%c3%a9mu-Git-P%c5%99eskl%c3%a1d%c3%a1n%c3%ad">Přeskládání</a> </li> <li> 3.7 <a href="/book/cs/v2/V%c4%9btve-v-syst%c3%a9mu-Git-Shrnut%c3%ad">Shrnutí</a> </li> </ol> </li> <li class='chapter'> <h2>4. <a href="/book/cs/v2/Git-na-serveru-Protokoly">Git na serveru</a></h2> <ol> <li> 4.1 <a href="/book/cs/v2/Git-na-serveru-Protokoly" class="active">Protokoly</a> </li> <li> 4.2 <a href="/book/cs/v2/Git-na-serveru-Zprovozn%c4%9bn%c3%ad-Gitu-na-serveru">Zprovoznění Gitu na serveru</a> </li> <li> 4.3 <a href="/book/cs/v2/Git-na-serveru-Generov%c3%a1n%c3%ad-ve%c5%99ejn%c3%a9ho-kl%c3%ad%c4%8de-SSH">Generování veřejného klíče SSH</a> </li> <li> 4.4 <a href="/book/cs/v2/Git-na-serveru-Nastaven%c3%ad-serveru">Nastavení serveru</a> </li> <li> 4.5 <a href="/book/cs/v2/Git-na-serveru-D%c3%a9mon-Git">Démon Git</a> </li> <li> 4.6 <a href="/book/cs/v2/Git-na-serveru-Chytr%c3%bd-HTTP">Chytrý HTTP</a> </li> <li> 4.7 <a href="/book/cs/v2/Git-na-serveru-GitWeb">GitWeb</a> </li> <li> 4.8 <a href="/book/cs/v2/Git-na-serveru-GitLab">GitLab</a> </li> <li> 4.9 <a href="/book/cs/v2/Git-na-serveru-Mo%c5%benosti-hostov%c3%a1n%c3%ad-u-t%c5%99et%c3%ad-strany">Možnosti hostování u třetí strany</a> </li> <li> 4.10 <a href="/book/cs/v2/Git-na-serveru-Shrnut%c3%ad">Shrnutí</a> </li> </ol> </li> <li class='chapter'> <h2>5. <a href="/book/cs/v2/Distribuovan%c3%bd-Git-Distribuovan%c3%a9-pracovn%c3%ad-postupy">Distribuovaný Git</a></h2> <ol> <li> 5.1 <a href="/book/cs/v2/Distribuovan%c3%bd-Git-Distribuovan%c3%a9-pracovn%c3%ad-postupy">Distribuované pracovní postupy</a> </li> <li> 5.2 <a href="/book/cs/v2/Distribuovan%c3%bd-Git-P%c5%99isp%c3%adv%c3%a1n%c3%ad-do-projektu">Přispívání do projektu</a> </li> <li> 5.3 <a href="/book/cs/v2/Distribuovan%c3%bd-Git-Spr%c3%a1va-projektu">Správa projektu</a> </li> <li> 5.4 <a href="/book/cs/v2/Distribuovan%c3%bd-Git-Shrnut%c3%ad">Shrnutí</a> </li> </ol> </li> </ol> </div> <div class='column-middle'> <ol class='book-toc'> <li class='chapter'> <h2>6. <a href="/book/cs/v2/GitHub-Z%c5%99%c3%adzen%c3%ad-%c3%ba%c4%8dtu-a-%c3%baprava-konfigurace">GitHub</a></h2> <ol> <li> 6.1 <a href="/book/cs/v2/GitHub-Z%c5%99%c3%adzen%c3%ad-%c3%ba%c4%8dtu-a-%c3%baprava-konfigurace">Zřízení účtu a úprava konfigurace</a> </li> <li> 6.2 <a href="/book/cs/v2/GitHub-P%c5%99isp%c3%adv%c3%a1n%c3%ad-do-projektu">Přispívání do projektu</a> </li> <li> 6.3 <a href="/book/cs/v2/GitHub-Maintaining-a-Project">Maintaining a Project</a> </li> <li> 6.4 <a href="/book/cs/v2/GitHub-Managing-an-organization">Managing an organization</a> </li> <li> 6.5 <a href="/book/cs/v2/GitHub-Scripting-GitHub">Scripting GitHub</a> </li> <li> 6.6 <a href="/book/cs/v2/GitHub-Shrnut%c3%ad">Shrnutí</a> </li> </ol> </li> <li class='chapter'> <h2>7. <a href="/book/cs/v2/Git-Tools-Revision-Selection">Git Tools</a></h2> <ol> <li> 7.1 <a href="/book/cs/v2/Git-Tools-Revision-Selection">Revision Selection</a> </li> <li> 7.2 <a href="/book/cs/v2/Git-Tools-Interactive-Staging">Interactive Staging</a> </li> <li> 7.3 <a href="/book/cs/v2/Git-Tools-Stashing-and-Cleaning">Stashing and Cleaning</a> </li> <li> 7.4 <a href="/book/cs/v2/Git-Tools-Signing-Your-Work">Signing Your Work</a> </li> <li> 7.5 <a href="/book/cs/v2/Git-Tools-Searching">Searching</a> </li> <li> 7.6 <a href="/book/cs/v2/Git-Tools-Rewriting-History">Rewriting History</a> </li> <li> 7.7 <a href="/book/cs/v2/Git-Tools-Reset-Demystified">Reset Demystified</a> </li> <li> 7.8 <a href="/book/cs/v2/Git-Tools-Advanced-Merging">Advanced Merging</a> </li> <li> 7.9 <a href="/book/cs/v2/Git-Tools-Rerere">Rerere</a> </li> <li> 7.10 <a href="/book/cs/v2/Git-Tools-Lad%c4%9bn%c3%ad-v-syst%c3%a9mu-Git">Ladění v systému Git</a> </li> <li> 7.11 <a href="/book/cs/v2/Git-Tools-Submodules">Submodules</a> </li> <li> 7.12 <a href="/book/cs/v2/Git-Tools-Bundling">Bundling</a> </li> <li> 7.13 <a href="/book/cs/v2/Git-Tools-Replace">Replace</a> </li> <li> 7.14 <a href="/book/cs/v2/Git-Tools-Credential-Storage">Credential Storage</a> </li> <li> 7.15 <a href="/book/cs/v2/Git-Tools-Shrnut%c3%ad">Shrnutí</a> </li> </ol> </li> <li class='chapter'> <h2>8. <a href="/book/cs/v2/Customizing-Git-Git-Configuration">Customizing Git</a></h2> <ol> <li> 8.1 <a href="/book/cs/v2/Customizing-Git-Git-Configuration">Git Configuration</a> </li> <li> 8.2 <a href="/book/cs/v2/Customizing-Git-Atributy-Git">Atributy Git</a> </li> <li> 8.3 <a href="/book/cs/v2/Customizing-Git-Git-Hooks">Git Hooks</a> </li> <li> 8.4 <a href="/book/cs/v2/Customizing-Git-An-Example-Git-Enforced-Policy">An Example Git-Enforced Policy</a> </li> <li> 8.5 <a href="/book/cs/v2/Customizing-Git-Shrnut%c3%ad">Shrnutí</a> </li> </ol> </li> <li class='chapter'> <h2>9. <a href="/book/cs/v2/Git-a-ostatn%c3%ad-syst%c3%a9my-Git-as-a-Client">Git a ostatní systémy</a></h2> <ol> <li> 9.1 <a href="/book/cs/v2/Git-a-ostatn%c3%ad-syst%c3%a9my-Git-as-a-Client">Git as a Client</a> </li> <li> 9.2 <a href="/book/cs/v2/Git-a-ostatn%c3%ad-syst%c3%a9my-Migrating-to-Git">Migrating to Git</a> </li> <li> 9.3 <a href="/book/cs/v2/Git-a-ostatn%c3%ad-syst%c3%a9my-Shrnut%c3%ad">Shrnutí</a> </li> </ol> </li> <li class='chapter'> <h2>10. <a href="/book/cs/v2/Git-Internals-Plumbing-and-Porcelain">Git Internals</a></h2> <ol> <li> 10.1 <a href="/book/cs/v2/Git-Internals-Plumbing-and-Porcelain">Plumbing and Porcelain</a> </li> <li> 10.2 <a href="/book/cs/v2/Git-Internals-Git-Objects">Git Objects</a> </li> <li> 10.3 <a href="/book/cs/v2/Git-Internals-Git-References">Git References</a> </li> <li> 10.4 <a href="/book/cs/v2/Git-Internals-Bal%c3%ad%c4%8dkov%c3%a9-soubory">Balíčkové soubory</a> </li> <li> 10.5 <a href="/book/cs/v2/Git-Internals-The-Refspec">The Refspec</a> </li> <li> 10.6 <a href="/book/cs/v2/Git-Internals-P%c5%99enosov%c3%a9-protokoly">Přenosové protokoly</a> </li> <li> 10.7 <a href="/book/cs/v2/Git-Internals-Spr%c3%a1va-a-obnova-dat">Správa a obnova dat</a> </li> <li> 10.8 <a href="/book/cs/v2/Git-Internals-Environment-Variables">Environment Variables</a> </li> <li> 10.9 <a href="/book/cs/v2/Git-Internals-Shrnut%c3%ad">Shrnutí</a> </li> </ol> </li> </ol> </div> <div class='column-right'> <ol class='book-toc'> <li class='chapter'> <h2>A1. <a href="/book/cs/v2/Appendix-A:-Git-in-Other-Environments-Graphical-Interfaces">Appendix A: Git in Other Environments</a></h2> <ol> <li> A1.1 <a href="/book/cs/v2/Appendix-A:-Git-in-Other-Environments-Graphical-Interfaces">Graphical Interfaces</a> </li> <li> A1.2 <a href="/book/cs/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Visual-Studio">Git in Visual Studio</a> </li> <li> A1.3 <a href="/book/cs/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Eclipse">Git in Eclipse</a> </li> <li> A1.4 <a href="/book/cs/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Bash">Git in Bash</a> </li> <li> A1.5 <a href="/book/cs/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Zsh">Git in Zsh</a> </li> <li> A1.6 <a href="/book/cs/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Powershell">Git in Powershell</a> </li> <li> A1.7 <a href="/book/cs/v2/Appendix-A:-Git-in-Other-Environments-Shrnut%c3%ad">Shrnutí</a> </li> </ol> </li> <li class='chapter'> <h2>A2. <a href="/book/cs/v2/Appendix-B:-Embedding-Git-in-your-Applications-Command-line-Git">Appendix B: Embedding Git in your Applications</a></h2> <ol> <li> A2.1 <a href="/book/cs/v2/Appendix-B:-Embedding-Git-in-your-Applications-Command-line-Git">Command-line Git</a> </li> <li> A2.2 <a href="/book/cs/v2/Appendix-B:-Embedding-Git-in-your-Applications-Libgit2">Libgit2</a> </li> <li> A2.3 <a href="/book/cs/v2/Appendix-B:-Embedding-Git-in-your-Applications-JGit">JGit</a> </li> </ol> </li> <li class='chapter'> <h2>A3. <a href="/book/cs/v2/Appendix-C:-Git-Commands-Setup-and-Config">Appendix C: Git Commands</a></h2> <ol> <li> A3.1 <a href="/book/cs/v2/Appendix-C:-Git-Commands-Setup-and-Config">Setup and Config</a> </li> <li> A3.2 <a href="/book/cs/v2/Appendix-C:-Git-Commands-Getting-and-Creating-Projects">Getting and Creating Projects</a> </li> <li> A3.3 <a href="/book/cs/v2/Appendix-C:-Git-Commands-Basic-Snapshotting">Basic Snapshotting</a> </li> <li> A3.4 <a href="/book/cs/v2/Appendix-C:-Git-Commands-Branching-and-Merging">Branching and Merging</a> </li> <li> A3.5 <a href="/book/cs/v2/Appendix-C:-Git-Commands-Sharing-and-Updating-Projects">Sharing and Updating Projects</a> </li> <li> A3.6 <a href="/book/cs/v2/Appendix-C:-Git-Commands-Inspection-and-Comparison">Inspection and Comparison</a> </li> <li> A3.7 <a href="/book/cs/v2/Appendix-C:-Git-Commands-Debugging">Debugging</a> </li> <li> A3.8 <a href="/book/cs/v2/Appendix-C:-Git-Commands-Patching">Patching</a> </li> <li> A3.9 <a href="/book/cs/v2/Appendix-C:-Git-Commands-Email">Email</a> </li> <li> A3.10 <a href="/book/cs/v2/Appendix-C:-Git-Commands-External-Systems">External Systems</a> </li> <li> A3.11 <a href="/book/cs/v2/Appendix-C:-Git-Commands-Administration">Administration</a> </li> <li> A3.12 <a href="/book/cs/v2/Appendix-C:-Git-Commands-Plumbing-Commands">Plumbing Commands</a> </li> </ol> </li> </ol> </div> </div> </div> <span class="light" id="edition"> 2nd Edition </span> </div> <div id="main" data-pagefind-filter="category:book" data-pagefind-meta="category:Book" data-pagefind-weight="0.05" data-pagefind-body class="book edition2"> <h1>4.1 Git na serveru - Protokoly</h1> <div> <p> V tomto okamžiku už byste měli zvládat většinu každodenních úkonů, pro které budete Git používat. Ale abyste mohli pomocí Gitu spolupracovat s ostatními, budete potřebovat vzdálený gitový repozitář. Technicky vzato sice můžete odesílat a stahovat změny z repozitářů jednotlivých spolupracovníků, ale tento přístup se nedoporučuje, protože si při troše neopatrnosti můžete velmi snadno poplést, kdo na čem pracuje. Navíc chcete, aby měli vaši spolupracovníci do repozitáře přístup, i když je váš počítač vypnutý nebo odpojený. Často bývá spolehlivější, když existuje společný repozitář. Proto se pro spolupráci s ostatními doporučuje zřídit repozitář, ke kterému mají zúčastnění přístup pro odesílání (push) i pro stahování (pull).</p><p>Zprovoznění gitového serveru je celkem jednoduché. Nejprve určíte, jakými protokoly má váš server komunikovat. První část této kapitoly se bude věnovat dostupným protokolům a kladům a záporům každého z nich. V dalších částech vysvětlíme některé typické konfigurace, které těchto protokolů využívají, a jak s nimi uvést server do provozu. Nakonec se podíváme na několik možností hostování — pokud vám nevadí, že máte kód umístěný na cizím serveru, a nechcete se otravovat s nastavováním a údržbou svého vlastního serveru.</p><p>Pokud víte, že nebudete chtít spravovat vlastní server, můžete přeskočit rovnou na poslední část této kapitoly a podívat se na možnosti nastavení hostovaného účtu. Pak přejděte na následující kapitolu, v níž se dočtete o detailech a záludnostech při práci v prostředí s distribuovanou správou zdrojového kódu.</p><p>Vzdáleným repozitářem je obvykle <em>holý repozitář</em> (bare repository), tj. gitový repozitář bez pracovního adresáře. Protože se repozitář používá pouze jako místo pro spolupráci, není žádný důvod, aby byl na disku načten konkrétní snímek. Jsou zde uložena pouze data pro Git. Když to zjednodušíme, holý repozitář je obsah adresáře <code>.git</code> vašeho projektu a nic víc.</p> <h2 id="_protokoly">Protokoly</h2> <div class="paragraph"> <p>Git může k přenosu dat používat čtyři hlavní protokoly: lokální, HTTP, Secure Shell (SSH) a Git. V této části si probereme, co jsou zač a za jakých základních okolností je budete (nebo nebudete) chtít použít.</p> </div> <div class="sect3"> <h3 id="_lokální_protokol">Lokální protokol</h3> <div class="paragraph"> <p>Nejzákladnějším z nich je <em>lokální protokol</em>, kdy je vzdálený repozitář uložen v jiném adresáři na disku. Často se využívá v případech, kdy mají všichni z vašeho týmu přístup k sdílenému souborovému systému (například přes NFS), nebo v méně pravděpodobném případě, kdy se všichni přihlašují na stejný počítač. Druhá varianta není právě ideální, protože všechny instance repozitáře s kódem jsou umístěny na stejném počítači, čímž se zvyšuje riziko katastrofické ztráty dat.</p> </div> <div class="paragraph"> <p>Máte-li připojený sdílený systém souborů, můžete klonovat, odesílat a stahovat z lokálního souborového repozitáře. Při klonování takového repozitáře, nebo při jeho přidávání jako vzdáleného repozitáře existujícího projektu, se v roli URL používá cesta k repozitáři. Naklonování lokálního repozitáře můžete provést například spuštěním něčeho takového:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git clone /opt/git/project.git</code></pre> </div> </div> <div class="paragraph"> <p>Nebo můžete provést následující:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git clone file:///opt/git/project.git</code></pre> </div> </div> <div class="paragraph"> <p>Pokud na začátek URL explicitně uvedete <code>file://</code>, pracuje Git trochu jinak. Pokud uvedete pouze cestu, pokouší se Git použít pevné odkazy (hardlink), nebo přímo kopíruje potřebné soubory. Pokud zadáte výraz <code>file://</code>, Git spustí procesy, které běžně používá k přenosu dat po síti, což je obecně mnohem méně efektivní metoda přenosu dat. Hlavním důvodem, proč zadat předponu <code>file://</code> je to, že tak získáte čistou kopii repozitáře bez nepotřebných referencí a objektů, například po importu z jiného verzovacího systému a podobně (viz popis úkonů správy v kapitole <a href="/book/cs/v2/ch00/_git_internals">Git Internals</a>). My zde budeme používat normální cestu, protože je to téměř vždy rychlejší.</p> </div> <div class="paragraph"> <p>K přidání lokálního repozitáře do existujícího gitového projektu můžete zadat něco takového:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git remote add local_proj /opt/git/project.git</code></pre> </div> </div> <div class="paragraph"> <p>Poté můžete do vzdáleného repozitáře data odesílat (push) a stahovat je z něj (pull), jako byste tak činili prostřednictvím sítě.</p> </div> <div class="sect4"> <h4 id="_výhody">Výhody</h4> <div class="paragraph"> <p>Výhoda souborových repozitářů spočívá v tom, že jsou jednoduché a používají existující oprávnění k souborům a pro přístup k síti. Pokud už máte k dispozici sdílený systém souborů, k němuž má přístup celý váš tým, je nastavení repozitáře velice jednoduché. Kopii holého repozitáře umístíte někam, kam mají všichni sdílený přístup, a nastavíte oprávnění ke čtení/zápisu stejně jako u jakéhokoli jiného sdíleného adresáře. O exportu kopie holého repozitáře pro tento účel se více dočtete v části <a href="/book/cs/v2/ch00/_git_on_the_server">Zprovoznění Gitu na serveru</a>.</p> </div> <div class="paragraph"> <p>Je to taky šikovná možnost rychlého získání práce z pracovního repozitáře někoho jiného. Pokud vy a váš kolega pracujete na společném projektu a máte z něj něco přetáhnout, pak provedení příkazu jako <code>git pull /home/john/project</code> je často jednodušší, než aby jej on nejdříve odeslal (push) na vzdálený server a teprve z něho byste práci stahovali.</p> </div> </div> <div class="sect4"> <h4 id="_nevýhody">Nevýhody</h4> <div class="paragraph"> <p>Nevýhodou této metody je, že nastavení vzdáleného přístupu a dosažitelnosti z více míst je obtížnější než obyčejný síťový přístup. Pokud budete chtít odeslat data z notebooku doma, budete muset připojit vzdálený disk, což může být ve srovnání s přístupem přes lokální síť složité a pomalé.</p> </div> <div class="paragraph"> <p>Upozorněme na to, že v případě použití sdíleného přístupu určitého druhu<sup class="footnote">[<a id="_footnoteref_13" class="footnote" href="#_footnotedef_13" title="View footnote.">13</a>]</sup>, nemusí být tato možnost vždy nutně nejrychlejší. Lokální repozitář je rychlý pouze v případě, že máte rychlý přístup k datům. Repozitář na NFS je často pomalejší než stejný repozitář nad SSH na tomtéž serveru, který ve všech systémech umožňuje spustit Git z lokálních disků.</p> </div> <div class="paragraph"> <p>Na závěr uveďme, že tento protokol nechrání repozitář vůči nechtěnému poškození. K „vzdálenému“ adresáři má každý uživatel plný přístup přes shell a nic mu nebrání v tom, aby změnil nebo odstranil soubory, které Git vnitřně používá, a repozitář tím porušil.</p> </div> </div> </div> <div class="sect3"> <h3 id="_protokoly_http">Protokoly HTTP</h3> <div class="paragraph"> <p>Git umí pře HTTP komunikovat ve dvou různých režimech. Před verzí Git 1.6.6 existoval jediný způsob, který byl velmi jednoduchý a obecně umožňoval jen čtení. Ve verzi 1.6.6 byl zaveden nový, chytřejší protokol, který Gitu umožnil inteligentní dohodu na tom, jak se budou data přenášet — podobným způsobem, jak se to dělá přes SSH. V posledních letech se tento nový HTTP protokol stal velmi oblíbeným, protože je uživatelsky jednodušší a používá chytřejší způsob komunikace. Nová verze se často označuje jako „chytrý“ HTTP protokol a starší jako „hloupý“ HTTP. Nejdříve se budeme věnovat „chytrému“ HTTP protokolu.</p> </div> <div class="sect4"> <h4 id="_chytrý_http">Chytrý HTTP</h4> <div class="paragraph"> <p> „Chytrý“ HTTP protokol pracuje velmi podobně jako protokol SSH nebo protokol Git, ale využívá standardní HTTP/S porty a může použít různé autentizační mechanismy protokolu HTTP. To znamená, že je s uživatelského hlediska často jednodušší než například SSH, protože místo nastavování SSH klíčů můžete použít základní autentizace využívající uživatelské jméno a heslo.</p> </div> <div class="paragraph"> <p>Při používání Gitu se v současnosti stal pravděpodobně nejoblíbenějším, protože u něj lze nastavit jak anonymní přístup (jako u protokolu <code>git://</code>), tak i odesílání podmíněné autentizací a využívající šifrování (jako u protokolu SSH). Pro uvedené účely nemusíme nastavovat dvě různá URL — stačí použít jedno URL pro oba typy přístupu. Pokud se do repozitáře pokusíme něco odeslat (push) a repozitář vyžaduje autentizaci (což by obvykle měl), může server zobrazit výzvu k zadání uživatelského jména a hesla. Totéž platí pro přístup pro čtení.</p> </div> <div class="paragraph"> <p>U služeb jako GitHub je ve skutečnosti URL, které používáte pro on-line přístup k repozitáři (například <a href="https://github.com/schacon/simplegit" class="bare">https://github.com/schacon/simplegit</a>), to stejné URL, které můžete použít pro klonování a — pokud máte přístupová práva pro zápis — také pro odesílání.</p> </div> </div> <div class="sect4"> <h4 id="_hloupý_http">Hloupý HTTP</h4> <div class="paragraph"> <p> Pokud server nepodporuje chytrou gitovou službu nad HTTP, pokusí se gitový klient vrátit k jednoduššímu „hloupému“ HTTP protokolu. Hloupý protokol předpokládá, že se bude holý gitový repozitář obsluhovat ze strany webového serveru stejně, jako běžné soubory. Krása hloupého HTTP protokolu spočívá v jednoduchosti jeho nastavení. V podstatě jediné, co musíte udělat, je umístit holý gitový repozitář pod kořenový adresář s HTTP dokumenty a nastavit příslušný zásuvný modul <code>post-update</code> (viz kapitola <a href="/book/cs/v2/ch00/_git_hooks">Git Hooks</a>). Od tohoto okamžiku může každý, kdo má přístup k webovému serveru, kam jste repozitář uložili, tento repozitář naklonovat. Chcete-li u svého repozitáře nastavit oprávnění pro čtení pomocí protokolu HTTP, proveďte následující:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ cd /var/www/htdocs/ $ git clone --bare /path/to/git_project gitproject.git $ cd gitproject.git $ mv hooks/post-update.sample hooks/post-update $ chmod a+x hooks/post-update</code></pre> </div> </div> <div class="paragraph"> <p>To je vše. Zásuvný modul <code>post-update</code>, který je standardní součástí systému Git, spustí příslušný příkaz (<code>git update-server-info</code>), který zajistí správné vyzvedávání (fetch) a klonování přes protokol HTTP. Tento příkaz se spustí, když do tohoto repozitáře odesíláte data (možná přes protokol SSH). Poté mohou ostatní klonovat třeba takto:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git clone https://example.com/gitproject.git</code></pre> </div> </div> <div class="paragraph"> <p>V tomto konkrétním případě používáme cestu <code>/var/www/htdocs</code>, která se obvykle nastavuje pro Apache, ale použít lze v podstatě jakýkoliv statický webový server — stačí uložit holý repozitář do dané cesty. Data repozitáře Git jsou obsluhována jako obyčejné statické soubory (podrobnosti o přesném způsobu obsluhy naleznete v kapitole <a href="/book/cs/v2/ch00/_git_internals">Git Internals</a>).</p> </div> <div class="paragraph"> <p>Obecně se dá říct, že si buď vyberete „chytrý“ HTTP server umožňující čtení i zápis, nebo soubory zpřístupníte jen pro čtení „hloupým“ protokolem. Současné použití obou služeb je neobvyklé.</p> </div> </div> <div class="sect4"> <h4 id="_výhody_2">Výhody</h4> <div class="paragraph"> <p>Zaměříme se na výhody „chytré“ verze HTTP protokolu.</p> </div> <div class="paragraph"> <p>Jednoduchost spočívající v používání jediného URL pro všechny typy přístupu a to, že se server vyptává, jen když požaduje autentizaci, to vše koncovému uživateli věci velmi usnadňuje. Možnost autentizace uživatelským jménem a heslem představuje vůči SSH také velkou výhodu, protože si uživatel nemusí na svém počítači generovat SSH klíče a nahrávat svůj veřejný klíč na server, aby se serverem vůbec mohl pracovat. Pro méně zdatné uživatele nebo pro uživatele na systémech, kde SSH není tak běžné, to představuje z hlediska použitelnosti velkou výhodu. Navíc jde o velmi rychlý a efektivní protokol (podobně jako protokol SSH).</p> </div> <div class="paragraph"> <p>Své repozitáře můžete zpřístupnit ke čtení i prostřednictvím protokolu HTTPS, což znamená, že se přenášený obsah šifruje. Nebo můžete zajít ještě dál a vyžadovat, aby klienti používali konkrétní podepsané SSL certifikáty.</p> </div> <div class="paragraph"> <p>Další výhodou je, že HTTP/S jsou tak často používané protokoly, že už jsou firemní firewally často nastaveny tak, aby byl provoz přes jejich porty povolen.</p> </div> </div> <div class="sect4"> <h4 id="_nevýhody_2">Nevýhody</h4> <div class="paragraph"> <p>Na některých serverech může být (ve srovnání s protokolem SSH) nastavení protokolu „Git přes HTTP/S“ trochu složitější. Ale jinak mají ostatní protokoly pro obsluhu Gitu vůči „chytrému“ HTTP protokolu jen velmi malé výhody.</p> </div> <div class="paragraph"> <p>Pokud používáte HTTP pro autentizované odesílání, pak může být nastavení osobních údajů někdy komplikovanější než používání klíčů přes SSH. Ale můžete využít několika nástrojů pro uložení osobních údajů (credential caching tools), včetně „Keychain Access“ pro OSX a „Správce pověření“ pod Windows, čímž se to velmi usnadní. O tom, jak na vašem systému nastavit bezpečné uložení hesla pro HTTP, se dočtete v podkapitole <a href="/book/cs/v2/ch00/_credential_caching">Credential Storage</a>.</p> </div> </div> </div> <div class="sect3"> <h3 id="_protokol_ssh">Protokol SSH</h3> <div class="paragraph"> <p> Při používání Gitu ve vlastním prostředí se běžně používá protokol SSH. Je to z toho důvodu, že SSH přístup k serverům je na většině míst už nastaven, a pokud ne, není těžké ho nastavit. SSH je navíc síťovým protokolem s autentizací. A protože je všudypřítomný, je jeho nastavení a používání většinou snadné.</p> </div> <div class="paragraph"> <p>Chcete-li gitový repozitář naklonovat s přes SSH, můžete zadat URL začínající <code>ssh://</code>, například:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git clone ssh://user@server/project.git</code></pre> </div> </div> <div class="paragraph"> <p>Nebo můžete pro SSH protokol použít kratší syntaxi jako u scp:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git clone user@server:project.git</code></pre> </div> </div> <div class="paragraph"> <p>Nemusíte ani zadávat uživatele. Git pak použije uživatele, který je právě přihlášen.</p> </div> <div class="sect4"> <h4 id="_výhody_3">Výhody</h4> <div class="paragraph"> <p>Používání protokolu SSH přináší mnoho výhod. Zaprvé se protokol SSH snadno nastavuje — SSH démoni jsou zcela běžní, správci sítě si s nimi mají zkušenosti a mnoho distribucí OS je má ve výchozí instalaci nebo poskytuje nástroje pro jejich správu. Za další je přístup přes protokol SSH bezpečný — veškerý přenos dat je šifrovaný a autentizovaný. A nakonec — stejně jako je tomu u HTTP/S, u protokolu Git a u lokálních protokolů — SSH je efektivní, protože data před přenosem upravuje do co nejkompaktnější podoby.</p> </div> </div> <div class="sect4"> <h4 id="_nevýhody_3">Nevýhody</h4> <div class="paragraph"> <p>Nevýhodou protokolu SSH je, že neumožňuje anonymní přístup do repozitáře. Ostatní musí mít k vašemu počítači přes SSH zřízen přístup, byť třeba jen ke čtení. Proto se přístup přes SSH nehodí pro open-source projekty. Pokud jej používáte jen v rámci firemní sítě, může se SSH stát jediným protokolem, kterým se budete muset zabývat. Pokud budete chtít pro vaše projekty zřídit anonymní přístup pro čtení a současně budete chtít používat SSH, budete muset SSH nastavit jinak pro sebe (pro odesílání; push) a jinak pro ostatní (pro vyzvedávání; fetch).</p> </div> </div> </div> <div class="sect3"> <h3 id="_protokol_git">Protokol Git</h3> <div class="paragraph"> <p> Dalším v pořadí je protokol Git. Je to speciální démon, který je distribuován spolu se systémem Git. Naslouchá na vyhrazeném portu (9418) a poskytuje podobnou službu jako protokol SSH, avšak bez jakékoliv autentizace. Chcete-li, aby byl repozitář zpřístupněn protokolem Git, musíte vytvořit soubor <code>git-daemon-export-ok</code>. Bez tohoto souboru nebude repozitář démonem zpřístupněn. Žádné jiné zabezpečení ale k dispozici není. Gitový repozitář je buď dostupný pro všechny a všichni z něj mohou klonovat, nebo dostupný není. To znamená, že se přes tento protokol nedají odesílat žádné revize. Možnost odesílání lze zapnout, ale protože nepodporuje autentizaci, pak pokud zapnete možnost odesílání, může do vašeho projektu odesílat data (push) každý, kdo na internetu nalezne URL vašeho projektu. Je jasné, že to většinou nechcete.</p> </div> <div class="sect4"> <h4 id="_výhody_4">Výhody</h4> <div class="paragraph"> <p>Protokol Git je často ze všech dostupných síťových přenosových protokolů nejrychlejší. Potřebujete-li obsloužit frekventovaný provoz u veřejného projektu nebo obsluhujete velmi velký projekt, u kterého se pro čtení nevyžaduje autentizace uživatele, bude se vám k obsluze asi nejvíc hodit právě démon Git. Používá stejný mechanismus přenosu dat jako protokol SSH, na rozdíl od něj ale není zpomalován šifrováním a ověřováním identity (autentizací).</p> </div> </div> <div class="sect4"> <h4 id="_nevýhody_4">Nevýhody</h4> <div class="paragraph"> <p>Nevýhodou protokolu Git je, že neprovádí autentizaci. Většinou není žádoucí, aby protokol Git představoval jedinou možnost přístupu k vašemu projektu. Většinou jej doplníte o přístup přes SSH nebo přes HTTPS pro pár vývojářů, kteří budou mít právo odesílat data (zápis; push). A všichni ostatní budou používat <code>git://</code> pro přístup pouze ke čtení. Pravděpodobně se také jedná o protokol s nejobtížnějším nastavením. Běží pro něj vlastní démon, který vyžaduje konfiguraci <code>xinetd</code> nebo podobnou, což vždy není procházka růžovou zahradou. Vyžaduje rovněž povolení přístupu k portu 9418 přes firewall. Tento port nepatří mezi standardní porty, které by firemní firewally vždy povolovaly. Velkými podnikovými firewally je tento obskurní port většinou blokován.</p> </div> </div> </div> <div id='footnotes'> <hr> <div class="footnote" id="_footnotedef_13"> <a href="#_footnoteref_13">13</a>. a shared mount of some kind </div> </div><div id="nav"><a href="/book/cs/v2/Větve-v-systému-Git-Shrnutí">prev</a> | <a href="/book/cs/v2/Git-na-serveru-Zprovoznění-Gitu-na-serveru">next</a></div> </div> </div> </div> </div> <footer> <div class="site-source"> <a href="/site">About this site</a><br> Patches, suggestions, and comments are welcome. </div> <div class="sfc-member"> Git is a member of <a href="/sfc">Software Freedom Conservancy</a> </div> </footer> <a href="#top" class="no-js scrollToTop" id="scrollToTop" data-label="Scroll to top"> <img src="/images/icons/chevron-up@2x.png" width="20" height="20" alt="scroll-to-top"/> </a> <script src="/js/jquery-1.7.1.min.js"></script> <script src="/js/jquery-ui-1.8.18.custom.min.js"></script> <script src="/js/jquery.defaultvalue.js"></script> <script src="/js/session.min.js"></script> <script src="/js/application.min.js"></script> </div> </body> </html>