CINXE.COM
Git - JGit
<!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 - JGit</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/Appendix-B:-Embedding-Git-in-your-Applications-JGit">English</a>. </p> <p> Full translation available in <table> <tr><td><a href="/book/az/v2/Appendix-B:-Proqramlara-Git-Daxil-Etm%c9%99k-JGit">azərbaycan dili</a>,</td></tr> <tr><td><a href="/book/bg">български език</a>,</td></tr> <tr><td><a href="/book/de/v2/Anhang-B:-Git-in-deine-Anwendungen-einbetten-JGit">Deutsch</a>,</td></tr> <tr><td><a href="/book/es/v2/Ap%c3%a9ndice-B:-Integrando-Git-en-tus-Aplicaciones-JGit">Español</a>,</td></tr> <tr><td><a href="/book/fr/v2/Annexe-B:-Embarquer-Git-dans-vos-applications-JGit">Français</a>,</td></tr> <tr><td><a href="/book/gr">Ελληνικά</a>,</td></tr> <tr><td><a href="/book/ja/v2/%e4%bb%98%e9%8c%b2-B:-Git%e3%82%92%e3%81%82%e3%81%aa%e3%81%9f%e3%81%ae%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ab%e7%b5%84%e3%81%bf%e8%be%bc%e3%82%80-JGit">日本語</a>,</td></tr> <tr><td><a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-B:-%ec%95%a0%ed%94%8c%eb%a6%ac%ec%bc%80%ec%9d%b4%ec%85%98%ec%97%90-Git-%eb%84%a3%ea%b8%b0-JGit">한국어</a>,</td></tr> <tr><td><a href="/book/nl/v2/Bijlage-B:-Git-in-je-applicaties-inbouwen-JGit">Nederlands</a>,</td></tr> <tr><td><a href="/book/ru/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-B:-%d0%92%d1%81%d1%82%d1%80%d0%b0%d0%b8%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-Git-%d0%b2-%d0%b2%d0%b0%d1%88%d0%b8-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-JGit">Русский</a>,</td></tr> <tr><td><a href="/book/sl/v2/Dodatek-B:-Vdelava-Gita-v-va%c5%a1o-aplikacijo-JGit">Slovenščina</a>,</td></tr> <tr><td><a href="/book/tl/v2/Appendix-B:-Pag-embed-ng-Git-sa-iyong-Mga-Aplikasyon-JGit">Tagalog</a>,</td></tr> <tr><td><a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-B:-%d0%92%d0%b1%d1%83%d0%b4%d0%be%d0%b2%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-Git-%d1%83-%d0%b2%d0%b0%d1%88%d1%96-%d0%b7%d0%b0%d1%81%d1%82%d0%be%d1%81%d1%83%d0%bd%d0%ba%d0%b8-JGit">Українська</a></td></tr> <tr><td><a href="/book/zh/v2/%e9%99%84%e5%bd%95-B:-%e5%9c%a8%e4%bd%a0%e7%9a%84%e5%ba%94%e7%94%a8%e4%b8%ad%e5%b5%8c%e5%85%a5-Git-JGit">简体中文</a>,</td></tr> </table> </p> <p> Partial translations available in <table> <tr><td><a href="/book/cs/v2/Appendix-B:-Embedding-Git-in-your-Applications-JGit">Čeština</a>,</td></tr> <tr><td><a href="/book/mk/v2/Appendix-B:-%d0%92%d0%bc%d0%b5%d1%82%d0%bd%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-Git-%d0%b2%d0%be-%d0%b2%d0%b0%d1%88%d0%b8%d1%82%d0%b5-%d0%b0%d0%bf%d0%bb%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d0%b8-JGit">Македонски</a>,</td></tr> <tr><td><a href="/book/pl/v2/Appendix-B:-Embedding-Git-in-your-Applications-JGit">Polski</a>,</td></tr> <tr><td><a href="/book/sr/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%b0%d0%ba-%d0%91:-%d0%a3%d0%b3%d1%80%d0%b0%d1%92%d0%b8%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%b0-%d0%93%d0%b8%d1%82-%d1%83-%d0%b2%d0%b0%d1%88%d0%b5-%d0%b0%d0%bf%d0%bb%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d1%98%d0%b5-JGit">Српски</a>,</td></tr> <tr><td><a href="/book/uz/v2/Appendix-B:-Embedding-Git-in-your-Applications-JGit">Ўзбекча</a>,</td></tr> <tr><td><a href="/book/zh-tw/v2/%e9%99%84%e9%8c%84-B:-Embedding-Git-in-your-Applications-JGit">繁體中文</a>,</td></tr> </table> </p> <p> Translations started for <table> <tr><td><a href="/book/be/v2/%d0%94%d0%b0%d0%b4%d0%b0%d1%82%d0%b0%d0%ba-B:-Embedding-Git-in-your-Applications-JGit">Беларуская</a>,</td></tr> <tr><td><a href="/book/fa/v2/%d9%be%db%8c%d9%88%d8%b3%d8%aa-B:-Embedding-Git-in-your-Applications-JGit" dir="rtl">فارسی</a>,</td></tr> <tr><td><a href="/book/id/v2/Appendix-B:-Embedding-Git-in-your-Applications-JGit">Indonesian</a>,</td></tr> <tr><td><a href="/book/it/v2/Appendice-B:-Embedding-Git-in-your-Applications-JGit">Italiano</a>,</td></tr> <tr><td><a href="/book/ms/v2/Appendix-B:-Embedding-Git-in-your-Applications-JGit">Bahasa Melayu</a>,</td></tr> <tr><td><a href="/book/pt-br/v2/Appendix-B:-Embedding-Git-in-your-Applications-JGit">Português (Brasil)</a>,</td></tr> <tr><td><a href="/book/pt-pt/v2/Appendix-B:-Incorporar-o-Git-nos-teus-Aplicativos-JGit">Português (Portugal)</a>,</td></tr> <tr><td><a href="/book/sv/v2/Bilaga-B:-Embedding-Git-in-your-Applications-JGit">Svenska</a>,</td></tr> <tr><td><a href="/book/tr/v2/Ek-b%c3%b6l%c3%bcm-B:-Git%e2%80%99i-Uygulamalar%c4%b1n%c4%b1za-G%c3%b6mmek-JGit">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">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" class="active">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>A2.3 Appendix B: Embedding Git in your Applications - JGit</h1> <div> <h2 id="_jgit">JGit</h2> <div class="paragraph"> <p> If you want to use Git from within a Java program, there is a fully featured Git library called JGit. JGit is a relatively full-featured implementation of Git written natively in Java, and is widely used in the Java community. The JGit project is under the Eclipse umbrella, and its home can be found at <a href="http://www.eclipse.org/jgit" class="bare">http://www.eclipse.org/jgit</a>.</p> </div> <div class="sect3"> <h3 id="_getting_set_up">Getting Set Up</h3> <div class="paragraph"> <p>There are a number of ways to connect your project with JGit and start writing code against it. Probably the easiest is to use Maven – the integration is accomplished by adding the following snippet to the <code><dependencies></code> tag in your pom.xml file:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-xml" data-lang="xml"><dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit</artifactId> <version>3.5.0.201409260305-r</version> </dependency></code></pre> </div> </div> <div class="paragraph"> <p>The <code>version</code> will most likely have advanced by the time you read this; check <a href="http://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit" class="bare">http://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit</a> for updated repository information. Once this step is done, Maven will automatically acquire and use the JGit libraries that you’ll need.</p> </div> <div class="paragraph"> <p>If you would rather manage the binary dependencies yourself, pre-built JGit binaries are available from <a href="http://www.eclipse.org/jgit/download" class="bare">http://www.eclipse.org/jgit/download</a>. You can build them into your project by running a command like this:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">javac -cp .:org.eclipse.jgit-3.5.0.201409260305-r.jar App.java java -cp .:org.eclipse.jgit-3.5.0.201409260305-r.jar App</code></pre> </div> </div> </div> <div class="sect3"> <h3 id="_plumbing">Plumbing</h3> <div class="paragraph"> <p>JGit has two basic levels of API: plumbing and porcelain. The terminology for these comes from Git itself, and JGit is divided into roughly the same kinds of areas: porcelain APIs are a friendly front-end for common user-level actions (the sorts of things a normal user would use the Git command-line tool for), while the plumbing APIs are for interacting with low-level repository objects directly.</p> </div> <div class="paragraph"> <p>The starting point for most JGit sessions is the <code>Repository</code> class, and the first thing you’ll want to do is create an instance of it. For a filesystem-based repository (yes, JGit allows for other storage models), this is accomplished using <code>FileRepositoryBuilder</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-java" data-lang="java">// Create a new repository Repository newlyCreatedRepo = FileRepositoryBuilder.create( new File("/tmp/new_repo/.git")); newlyCreatedRepo.create(); // Open an existing repository Repository existingRepo = new FileRepositoryBuilder() .setGitDir(new File("my_repo/.git")) .build();</code></pre> </div> </div> <div class="paragraph"> <p>The builder has a fluent API for providing all the things it needs to find a Git repository, whether or not your program knows exactly where it’s located. It can use environment variables (<code>.readEnvironment()</code>), start from a place in the working directory and search (<code>.setWorkTree(…).findGitDir()</code>), or just open a known <code>.git</code> directory as above.</p> </div> <div class="paragraph"> <p>Once you have a <code>Repository</code> instance, you can do all sorts of things with it. Here’s a quick sampling:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-java" data-lang="java">// Get a reference Ref master = repo.getRef("master"); // Get the object the reference points to ObjectId masterTip = master.getObjectId(); // Rev-parse ObjectId obj = repo.resolve("HEAD^{tree}"); // Load raw object contents ObjectLoader loader = repo.open(masterTip); loader.copyTo(System.out); // Create a branch RefUpdate createBranch1 = repo.updateRef("refs/heads/branch1"); createBranch1.setNewObjectId(masterTip); createBranch1.update(); // Delete a branch RefUpdate deleteBranch1 = repo.updateRef("refs/heads/branch1"); deleteBranch1.setForceUpdate(true); deleteBranch1.delete(); // Config Config cfg = repo.getConfig(); String name = cfg.getString("user", null, "name");</code></pre> </div> </div> <div class="paragraph"> <p>There’s quite a bit going on here, so let’s go through it one section at a time.</p> </div> <div class="paragraph"> <p>The first line gets a pointer to the <code>master</code> reference. JGit automatically grabs the <em>actual</em> master ref, which lives at <code>refs/heads/master</code>, and returns an object that lets you fetch information about the reference. You can get the name (<code>.getName()</code>), and either the target object of a direct reference (<code>.getObjectId()</code>) or the reference pointed to by a symbolic ref (<code>.getTarget()</code>). Ref objects are also used to represent tag refs and objects, so you can ask if the tag is “peeled,” meaning that it points to the final target of a (potentially long) string of tag objects.</p> </div> <div class="paragraph"> <p>The second line gets the target of the <code>master</code> reference, which is returned as an ObjectId instance. ObjectId represents the SHA-1 hash of an object, which might or might not exist in Git’s object database. The third line is similar, but shows how JGit handles the rev-parse syntax (for more on this, see <a href="/book/cs/v2/ch00/_branch_references">Branch References</a>); you can pass any object specifier that Git understands, and JGit will return either a valid ObjectId for that object, or <code>null</code>.</p> </div> <div class="paragraph"> <p>The next two lines show how to load the raw contents of an object. In this example, we call <code>ObjectLoader.copyTo()</code> to stream the contents of the object directly to stdout, but ObjectLoader also has methods to read the type and size of an object, as well as return it as a byte array. For large objects (where <code>.isLarge()</code> returns <code>true</code>), you can call <code>.openStream()</code> to get an InputStream-like object that can read the raw object data without pulling it all into memory at once.</p> </div> <div class="paragraph"> <p>The next few lines show what it takes to create a new branch. We create a RefUpdate instance, configure some parameters, and call <code>.update()</code> to trigger the change. Directly following this is the code to delete that same branch. Note that <code>.setForceUpdate(true)</code> is required for this to work; otherwise the <code>.delete()</code> call will return <code>REJECTED</code>, and nothing will happen.</p> </div> <div class="paragraph"> <p>The last example shows how to fetch the <code>user.name</code> value from the Git configuration files. This Config instance uses the repository we opened earlier for local configuration, but will automatically detect the global and system configuration files and read values from them as well.</p> </div> <div class="paragraph"> <p>This is only a small sampling of the full plumbing API; there are many more methods and classes available. Also not shown here is the way JGit handles errors, which is through the use of exceptions. JGit APIs sometimes throw standard Java exceptions (such as <code>IOException</code>), but there are a host of JGit-specific exception types that are provided as well (such as <code>NoRemoteRepositoryException</code>, <code>CorruptObjectException</code>, and <code>NoMergeBaseException</code>).</p> </div> </div> <div class="sect3"> <h3 id="_porcelain">Porcelain</h3> <div class="paragraph"> <p>The plumbing APIs are rather complete, but it can be cumbersome to string them together to achieve common goals, like adding a file to the index, or making a new commit. JGit provides a higher-level set of APIs to help out with this, and the entry point to these APIs is the <code>Git</code> class:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-java" data-lang="java">Repository repo; // construct repo... Git git = new Git(repo);</code></pre> </div> </div> <div class="paragraph"> <p>The Git class has a nice set of high-level <em>builder</em>-style methods that can be used to construct some pretty complex behavior. Let’s take a look at an example – doing something like <code>git ls-remote</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-java" data-lang="java">CredentialsProvider cp = new UsernamePasswordCredentialsProvider("username", "p4ssw0rd"); Collection<Ref> remoteRefs = git.lsRemote() .setCredentialsProvider(cp) .setRemote("origin") .setTags(true) .setHeads(false) .call(); for (Ref ref : remoteRefs) { System.out.println(ref.getName() + " -> " + ref.getObjectId().name()); }</code></pre> </div> </div> <div class="paragraph"> <p>This is a common pattern with the Git class; the methods return a command object that lets you chain method calls to set parameters, which are executed when you call <code>.call()</code>. In this case, we’re asking the <code>origin</code> remote for tags, but not heads. Also notice the use of a <code>CredentialsProvider</code> object for authentication.</p> </div> <div class="paragraph"> <p>Many other commands are available through the Git class, including but not limited to <code>add</code>, <code>blame</code>, <code>commit</code>, <code>clean</code>, <code>push</code>, <code>rebase</code>, <code>revert</code>, and <code>reset</code>.</p> </div> </div> <div class="sect3"> <h3 id="_further_reading_2">Further Reading</h3> <div class="paragraph"> <p>This is only a small sampling of JGit’s full capabilities. If you’re interested and want to learn more, here’s where to look for information and inspiration:</p> </div> <div class="ulist"> <ul> <li> <p>The official JGit API documentation is available online at <a href="http://download.eclipse.org/jgit/docs/latest/apidocs" class="bare">http://download.eclipse.org/jgit/docs/latest/apidocs</a>. These are standard Javadoc, so your favorite JVM IDE will be able to install them locally, as well.</p> </li> <li> <p>The JGit Cookbook at <a href="https://github.com/centic9/jgit-cookbook" class="bare">https://github.com/centic9/jgit-cookbook</a> has many examples of how to do specific tasks with JGit.</p> </li> <li> <p>There are several good resources pointed out at <a href="http://stackoverflow.com/questions/6861881" class="bare">http://stackoverflow.com/questions/6861881</a>.</p> </li> </ul> </div> </div> <div id="nav"><a href="/book/cs/v2/Appendix-B:-Embedding-Git-in-your-Applications-Libgit2">prev</a> | <a href="/book/cs/v2/Appendix-C:-Git-Commands-Setup-and-Config">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>