CINXE.COM

Git - JGit

<!DOCTYPE html> <html lang="nl"> <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/progit2-nl">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/nl/v2/Aan-de-slag-Over-versiebeheer">Aan de slag</a></h2> <ol> <li> 1.1 <a href="/book/nl/v2/Aan-de-slag-Over-versiebeheer">Over versiebeheer</a> </li> <li> 1.2 <a href="/book/nl/v2/Aan-de-slag-Een-kort-historisch-overzicht-van-Git">Een kort historisch overzicht van Git</a> </li> <li> 1.3 <a href="/book/nl/v2/Aan-de-slag-Wat-is-Git%3F">Wat is Git?</a> </li> <li> 1.4 <a href="/book/nl/v2/Aan-de-slag-De-commando-regel">De commando-regel</a> </li> <li> 1.5 <a href="/book/nl/v2/Aan-de-slag-Git-installeren">Git installeren</a> </li> <li> 1.6 <a href="/book/nl/v2/Aan-de-slag-Git-klaarmaken-voor-eerste-gebruik">Git klaarmaken voor eerste gebruik</a> </li> <li> 1.7 <a href="/book/nl/v2/Aan-de-slag-Hulp-krijgen">Hulp krijgen</a> </li> <li> 1.8 <a href="/book/nl/v2/Aan-de-slag-Samenvatting">Samenvatting</a> </li> </ol> </li> <li class='chapter'> <h2>2. <a href="/book/nl/v2/Git-Basics-Een-Git-repository-verkrijgen">Git Basics</a></h2> <ol> <li> 2.1 <a href="/book/nl/v2/Git-Basics-Een-Git-repository-verkrijgen">Een Git repository verkrijgen</a> </li> <li> 2.2 <a href="/book/nl/v2/Git-Basics-Wijzigingen-aan-de-repository-vastleggen">Wijzigingen aan de repository vastleggen</a> </li> <li> 2.3 <a href="/book/nl/v2/Git-Basics-De-commit-geschiedenis-bekijken">De commit geschiedenis bekijken</a> </li> <li> 2.4 <a href="/book/nl/v2/Git-Basics-Dingen-ongedaan-maken">Dingen ongedaan maken</a> </li> <li> 2.5 <a href="/book/nl/v2/Git-Basics-Werken-met-remotes">Werken met remotes</a> </li> <li> 2.6 <a href="/book/nl/v2/Git-Basics-Taggen-Labelen">Taggen (Labelen)</a> </li> <li> 2.7 <a href="/book/nl/v2/Git-Basics-Git-aliassen">Git aliassen</a> </li> <li> 2.8 <a href="/book/nl/v2/Git-Basics-Samenvatting">Samenvatting</a> </li> </ol> </li> <li class='chapter'> <h2>3. <a href="/book/nl/v2/Branchen-in-Git-Branches-in-vogelvlucht">Branchen in Git</a></h2> <ol> <li> 3.1 <a href="/book/nl/v2/Branchen-in-Git-Branches-in-vogelvlucht">Branches in vogelvlucht</a> </li> <li> 3.2 <a href="/book/nl/v2/Branchen-in-Git-Eenvoudig-branchen-en-mergen">Eenvoudig branchen en mergen</a> </li> <li> 3.3 <a href="/book/nl/v2/Branchen-in-Git-Branch-beheer">Branch-beheer</a> </li> <li> 3.4 <a href="/book/nl/v2/Branchen-in-Git-Branch-workflows">Branch workflows</a> </li> <li> 3.5 <a href="/book/nl/v2/Branchen-in-Git-Branches-op-afstand-Remote-branches">Branches op afstand (Remote branches)</a> </li> <li> 3.6 <a href="/book/nl/v2/Branchen-in-Git-Rebasen">Rebasen</a> </li> <li> 3.7 <a href="/book/nl/v2/Branchen-in-Git-Samenvatting">Samenvatting</a> </li> </ol> </li> <li class='chapter'> <h2>4. <a href="/book/nl/v2/Git-op-de-server-De-protocollen">Git op de server</a></h2> <ol> <li> 4.1 <a href="/book/nl/v2/Git-op-de-server-De-protocollen">De protocollen</a> </li> <li> 4.2 <a href="/book/nl/v2/Git-op-de-server-Git-op-een-server-krijgen">Git op een server krijgen</a> </li> <li> 4.3 <a href="/book/nl/v2/Git-op-de-server-Je-publieke-SSH-sleutel-genereren">Je publieke SSH sleutel genereren</a> </li> <li> 4.4 <a href="/book/nl/v2/Git-op-de-server-De-server-opzetten">De server opzetten</a> </li> <li> 4.5 <a href="/book/nl/v2/Git-op-de-server-Git-Daemon">Git Daemon</a> </li> <li> 4.6 <a href="/book/nl/v2/Git-op-de-server-Slimme-HTTP">Slimme HTTP</a> </li> <li> 4.7 <a href="/book/nl/v2/Git-op-de-server-GitWeb">GitWeb</a> </li> <li> 4.8 <a href="/book/nl/v2/Git-op-de-server-GitLab">GitLab</a> </li> <li> 4.9 <a href="/book/nl/v2/Git-op-de-server-Hosting-oplossingen-van-derden">Hosting oplossingen van derden</a> </li> <li> 4.10 <a href="/book/nl/v2/Git-op-de-server-Samenvatting">Samenvatting</a> </li> </ol> </li> <li class='chapter'> <h2>5. <a href="/book/nl/v2/Gedistribueerd-Git-Gedistribueerde-workflows">Gedistribueerd Git</a></h2> <ol> <li> 5.1 <a href="/book/nl/v2/Gedistribueerd-Git-Gedistribueerde-workflows">Gedistribueerde workflows</a> </li> <li> 5.2 <a href="/book/nl/v2/Gedistribueerd-Git-Bijdragen-aan-een-project">Bijdragen aan een project</a> </li> <li> 5.3 <a href="/book/nl/v2/Gedistribueerd-Git-Het-beheren-van-een-project">Het beheren van een project</a> </li> <li> 5.4 <a href="/book/nl/v2/Gedistribueerd-Git-Samenvatting">Samenvatting</a> </li> </ol> </li> </ol> </div> <div class='column-middle'> <ol class='book-toc'> <li class='chapter'> <h2>6. <a href="/book/nl/v2/GitHub-Account-setup-en-configuratie">GitHub</a></h2> <ol> <li> 6.1 <a href="/book/nl/v2/GitHub-Account-setup-en-configuratie">Account setup en configuratie</a> </li> <li> 6.2 <a href="/book/nl/v2/GitHub-Aan-een-project-bijdragen">Aan een project bijdragen</a> </li> <li> 6.3 <a href="/book/nl/v2/GitHub-Een-project-onderhouden">Een project onderhouden</a> </li> <li> 6.4 <a href="/book/nl/v2/GitHub-Een-organisatie-beheren">Een organisatie beheren</a> </li> <li> 6.5 <a href="/book/nl/v2/GitHub-GitHub-Scripten">GitHub Scripten</a> </li> <li> 6.6 <a href="/book/nl/v2/GitHub-Samenvatting">Samenvatting</a> </li> </ol> </li> <li class='chapter'> <h2>7. <a href="/book/nl/v2/Git-Tools-Revisie-Selectie">Git Tools</a></h2> <ol> <li> 7.1 <a href="/book/nl/v2/Git-Tools-Revisie-Selectie">Revisie Selectie</a> </li> <li> 7.2 <a href="/book/nl/v2/Git-Tools-Interactief-stagen">Interactief stagen</a> </li> <li> 7.3 <a href="/book/nl/v2/Git-Tools-Stashen-en-opschonen">Stashen en opschonen</a> </li> <li> 7.4 <a href="/book/nl/v2/Git-Tools-Je-werk-tekenen">Je werk tekenen</a> </li> <li> 7.5 <a href="/book/nl/v2/Git-Tools-Zoeken">Zoeken</a> </li> <li> 7.6 <a href="/book/nl/v2/Git-Tools-Geschiedenis-herschrijven">Geschiedenis herschrijven</a> </li> <li> 7.7 <a href="/book/nl/v2/Git-Tools-Reset-ontrafeld">Reset ontrafeld</a> </li> <li> 7.8 <a href="/book/nl/v2/Git-Tools-Mergen-voor-gevorderden">Mergen voor gevorderden</a> </li> <li> 7.9 <a href="/book/nl/v2/Git-Tools-Rerere">Rerere</a> </li> <li> 7.10 <a href="/book/nl/v2/Git-Tools-Debuggen-met-Git">Debuggen met Git</a> </li> <li> 7.11 <a href="/book/nl/v2/Git-Tools-Submodules">Submodules</a> </li> <li> 7.12 <a href="/book/nl/v2/Git-Tools-Bundelen">Bundelen</a> </li> <li> 7.13 <a href="/book/nl/v2/Git-Tools-Vervangen">Vervangen</a> </li> <li> 7.14 <a href="/book/nl/v2/Git-Tools-Het-opslaan-van-inloggegevens">Het opslaan van inloggegevens</a> </li> <li> 7.15 <a href="/book/nl/v2/Git-Tools-Samenvatting">Samenvatting</a> </li> </ol> </li> <li class='chapter'> <h2>8. <a href="/book/nl/v2/Git-aanpassen-Git-configuratie">Git aanpassen</a></h2> <ol> <li> 8.1 <a href="/book/nl/v2/Git-aanpassen-Git-configuratie">Git configuratie</a> </li> <li> 8.2 <a href="/book/nl/v2/Git-aanpassen-Git-attributen">Git attributen</a> </li> <li> 8.3 <a href="/book/nl/v2/Git-aanpassen-Git-Hooks">Git Hooks</a> </li> <li> 8.4 <a href="/book/nl/v2/Git-aanpassen-Een-voorbeeld-van-Git-afgedwongen-beleid">Een voorbeeld van Git-afgedwongen beleid</a> </li> <li> 8.5 <a href="/book/nl/v2/Git-aanpassen-Samenvatting">Samenvatting</a> </li> </ol> </li> <li class='chapter'> <h2>9. <a href="/book/nl/v2/Git-en-andere-systemen-Git-als-een-client">Git en andere systemen</a></h2> <ol> <li> 9.1 <a href="/book/nl/v2/Git-en-andere-systemen-Git-als-een-client">Git als een client</a> </li> <li> 9.2 <a href="/book/nl/v2/Git-en-andere-systemen-Migreren-naar-Git">Migreren naar Git</a> </li> <li> 9.3 <a href="/book/nl/v2/Git-en-andere-systemen-Samenvatting">Samenvatting</a> </li> </ol> </li> <li class='chapter'> <h2>10. <a href="/book/nl/v2/Git-Binnenwerk-Binnenwerk-en-koetswerk-plumbing-and-porcelain">Git Binnenwerk</a></h2> <ol> <li> 10.1 <a href="/book/nl/v2/Git-Binnenwerk-Binnenwerk-en-koetswerk-plumbing-and-porcelain">Binnenwerk en koetswerk (plumbing and porcelain)</a> </li> <li> 10.2 <a href="/book/nl/v2/Git-Binnenwerk-Git-objecten">Git objecten</a> </li> <li> 10.3 <a href="/book/nl/v2/Git-Binnenwerk-Git-Referenties">Git Referenties</a> </li> <li> 10.4 <a href="/book/nl/v2/Git-Binnenwerk-Packfiles">Packfiles</a> </li> <li> 10.5 <a href="/book/nl/v2/Git-Binnenwerk-De-Refspec">De Refspec</a> </li> <li> 10.6 <a href="/book/nl/v2/Git-Binnenwerk-Uitwisseling-protocollen">Uitwisseling protocollen</a> </li> <li> 10.7 <a href="/book/nl/v2/Git-Binnenwerk-Onderhoud-en-gegevensherstel">Onderhoud en gegevensherstel</a> </li> <li> 10.8 <a href="/book/nl/v2/Git-Binnenwerk-Omgevingsvariabelen">Omgevingsvariabelen</a> </li> <li> 10.9 <a href="/book/nl/v2/Git-Binnenwerk-Samenvatting">Samenvatting</a> </li> </ol> </li> </ol> </div> <div class='column-right'> <ol class='book-toc'> <li class='chapter'> <h2>A1. <a href="/book/nl/v2/Bijlage-A:-Git-in-andere-omgevingen-Grafische-interfaces">Bijlage A: Git in andere omgevingen</a></h2> <ol> <li> A1.1 <a href="/book/nl/v2/Bijlage-A:-Git-in-andere-omgevingen-Grafische-interfaces">Grafische interfaces</a> </li> <li> A1.2 <a href="/book/nl/v2/Bijlage-A:-Git-in-andere-omgevingen-Git-in-Visual-Studio">Git in Visual Studio</a> </li> <li> A1.3 <a href="/book/nl/v2/Bijlage-A:-Git-in-andere-omgevingen-Git-in-Visual-Studio-Code">Git in Visual Studio Code</a> </li> <li> A1.4 <a href="/book/nl/v2/Bijlage-A:-Git-in-andere-omgevingen-Git-in-Eclipse">Git in Eclipse</a> </li> <li> A1.5 <a href="/book/nl/v2/Bijlage-A:-Git-in-andere-omgevingen-Git-in-Sublime-Text">Git in Sublime Text</a> </li> <li> A1.6 <a href="/book/nl/v2/Bijlage-A:-Git-in-andere-omgevingen-Git-in-Bash">Git in Bash</a> </li> <li> A1.7 <a href="/book/nl/v2/Bijlage-A:-Git-in-andere-omgevingen-Git-in-Zsh">Git in Zsh</a> </li> <li> A1.8 <a href="/book/nl/v2/Bijlage-A:-Git-in-andere-omgevingen-Git-in-PowerShell">Git in PowerShell</a> </li> <li> A1.9 <a href="/book/nl/v2/Bijlage-A:-Git-in-andere-omgevingen-Samenvatting">Samenvatting</a> </li> </ol> </li> <li class='chapter'> <h2>A2. <a href="/book/nl/v2/Bijlage-B:-Git-in-je-applicaties-inbouwen-Commando-regel-Git">Bijlage B: Git in je applicaties inbouwen</a></h2> <ol> <li> A2.1 <a href="/book/nl/v2/Bijlage-B:-Git-in-je-applicaties-inbouwen-Commando-regel-Git">Commando-regel Git</a> </li> <li> A2.2 <a href="/book/nl/v2/Bijlage-B:-Git-in-je-applicaties-inbouwen-Libgit2">Libgit2</a> </li> <li> A2.3 <a href="/book/nl/v2/Bijlage-B:-Git-in-je-applicaties-inbouwen-JGit" class="active">JGit</a> </li> <li> A2.4 <a href="/book/nl/v2/Bijlage-B:-Git-in-je-applicaties-inbouwen-go-git">go-git</a> </li> <li> A2.5 <a href="/book/nl/v2/Bijlage-B:-Git-in-je-applicaties-inbouwen-Dulwich">Dulwich</a> </li> </ol> </li> <li class='chapter'> <h2>A3. <a href="/book/nl/v2/Bijlage-C:-Git-Commando%e2%80%99s-Setup-en-configuratie">Bijlage C: Git Commando’s</a></h2> <ol> <li> A3.1 <a href="/book/nl/v2/Bijlage-C:-Git-Commando%e2%80%99s-Setup-en-configuratie">Setup en configuratie</a> </li> <li> A3.2 <a href="/book/nl/v2/Bijlage-C:-Git-Commando%e2%80%99s-Projecten-ophalen-en-maken">Projecten ophalen en maken</a> </li> <li> A3.3 <a href="/book/nl/v2/Bijlage-C:-Git-Commando%e2%80%99s-Basic-Snapshotten">Basic Snapshotten</a> </li> <li> A3.4 <a href="/book/nl/v2/Bijlage-C:-Git-Commando%e2%80%99s-Branchen-en-mergen">Branchen en mergen</a> </li> <li> A3.5 <a href="/book/nl/v2/Bijlage-C:-Git-Commando%e2%80%99s-Projecten-delen-en-bijwerken">Projecten delen en bijwerken</a> </li> <li> A3.6 <a href="/book/nl/v2/Bijlage-C:-Git-Commando%e2%80%99s-Inspectie-en-vergelijking">Inspectie en vergelijking</a> </li> <li> A3.7 <a href="/book/nl/v2/Bijlage-C:-Git-Commando%e2%80%99s-Debuggen">Debuggen</a> </li> <li> A3.8 <a href="/book/nl/v2/Bijlage-C:-Git-Commando%e2%80%99s-Patchen">Patchen</a> </li> <li> A3.9 <a href="/book/nl/v2/Bijlage-C:-Git-Commando%e2%80%99s-Email">Email</a> </li> <li> A3.10 <a href="/book/nl/v2/Bijlage-C:-Git-Commando%e2%80%99s-Externe-systemen">Externe systemen</a> </li> <li> A3.11 <a href="/book/nl/v2/Bijlage-C:-Git-Commando%e2%80%99s-Beheer">Beheer</a> </li> <li> A3.12 <a href="/book/nl/v2/Bijlage-C:-Git-Commando%e2%80%99s-Binnenwerk-commando%e2%80%99s-plumbing-commando%e2%80%99s">Binnenwerk commando’s (plumbing commando’s)</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 Bijlage B: Git in je applicaties inbouwen - JGit</h1> <div> <h2 id="_jgit">JGit</h2> <div class="paragraph"> <p> Als je Git wilt gebruiken vanuit een Java programma, is er een Git library, Git geheten, die de volledige Git functionaliteit ondersteunt. JGit is een functioneel relatief volledige implementatie van Git geschreven in zuiver Java, en het wordt veel gebruikt in de Java gemeenschap. Het JGit project valt onder de Eclipse paraplu, en het adres waar het kan worden gevonden is <a href="https://www.eclipse.org/jgit" class="bare">https://www.eclipse.org/jgit</a>.</p> </div> <div class="sect3"> <h3 id="_de_boel_opzetten">De boel opzetten</h3> <div class="paragraph"> <p>Er zijn een aantal manieren om verbinding te maken met je project via JGit, en om er tegenaan te programmeren. Waarschijnlijk is de eenvoudigste manier om Maven te gebruiken - de integratie wordt bereikt door het volgende fragment aan de <code>&lt;dependencies&gt;</code> tag in je pom.xml bestand toe te voegen:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-xml" data-lang="xml">&lt;dependency&gt; &lt;groupId&gt;org.eclipse.jgit&lt;/groupId&gt; &lt;artifactId&gt;org.eclipse.jgit&lt;/artifactId&gt; &lt;version&gt;3.5.0.201409260305-r&lt;/version&gt; &lt;/dependency&gt;</code></pre> </div> </div> <div class="paragraph"> <p>De <code>versie</code> zal hoogstwaarschijnlijk al vooruit zijn gegaan tegen de tijd dat je dit leest; kijk even op <a href="https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit" class="bare">https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit</a> voor bijgewerkte repository informatie. Als deze stap eenmaal is voltooid, zal Maven automatisch de JGit libraries ophalen en die gebruiken die je nodig zult hebben.</p> </div> <div class="paragraph"> <p>Als je je binaire libraries liever zelf onderhoudt, zijn kant en klaar gebouwde JGit binairies beschikbaar op <a href="https://www.eclipse.org/jgit/download" class="bare">https://www.eclipse.org/jgit/download</a>. Je kunt ze in je project inbouwen door een commando als deze aan te roepen:</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="_binnenwerk">Binnenwerk</h3> <div class="paragraph"> <p>JGit heeft twee basale niveaus van API: binnenwerk en koetswerk (plumbing en porcelain) De terminologie hiervoor komt van Git zelf, en JGit is ingedeeld in grofweg dezelfde soorten van gebieden: porcelain API’s zijn een vriendelijke voorkant voor reguliere gebruikers acties (het soort van dingen die een gewone gebruiker een commando regel voor zou gebruiken), terwijl de plumbing API’s er zijn voor interacties met repository objecten die zich diep in het systeem bevinden.</p> </div> <div class="paragraph"> <p>Het vertrekpunt voor de meeste JGit sessies is de <code>Repository</code> klasse, en het eerste wat je zult willen doen is om er een instantie van te maken. Voor een repository die gebaseerd is op een bestandssysteem (ja, JGit ondersteunt ook andere opslagmodellen), wordt dit gedaan door middel van <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>Deze builder heeft een vloeiende API waarmee alles kan worden voorzien die het nodig heeft om een Git repository te vinden, of je programma de preciese locatie weet of niet. Het kan de omgevingsvariabelen (<code>.readEnvironment()</code>) gebruiken, ergens van een plaats in de werk directory beginnen te zoeken (<code>.setWorkTree(...).findGitDir()</code>), of gewoon een bekende <code>.git</code> directory openen zoals hierboven.</p> </div> <div class="paragraph"> <p>Als je eenmaal een <code>Repository</code> instantie hebt, kan je er van allerlei dingen mee doen. Hier is een kleine bloemlezing:</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>Er gebeurt hier eigenlijk best wel veel, dus laten we het stukje bij beetje doornemen.</p> </div> <div class="paragraph"> <p>De eerste regel haalt een pointer naar de <code>master</code>-referentie op. JGit pakt automatisch de <em>echte</em> master ref op, die gedefinieerd is op <code>refs/heads/master</code>, en geeft een object terug waarmee je de informatie over de referentie kunt ophalen. Je kunt de naam te pakken krijgen (<code>.getName()</code>), en het doel object van een directe referentie (<code>.getObjectId()</code>) of de referentie waar een symbolische ref naar wijst (<code>.getTarget()</code>). Ref objecten worden ook gebruikt om tag refs en objecten te vertegenwoordigen, dus je kunt vragen of de tag is “geschild” (“peeled”), wat inhoud dat het wijst naar het uiteindelijke doel van een (potentieel lange) tekenreeks van tag objecten.</p> </div> <div class="paragraph"> <p>De tweede regel haalt het doel van de <code>master</code>-referentie op, die wordt teruggegeven als een ObjectId instantie. ObjectId vertegenwoordigt de SHA-1 hash van een object, die al dan niet kan bestaan in de object database van Git. De derde regel is vergelijkbaar, maar laat zien hoe JGit omgaat met de rev-parse syntax (meer hierover in <a href="/book/nl/v2/ch00/_branch_references">Branch referenties</a>); je kunt er elke object specificatie aan doorgeven die Git begrijpt, en JGit geeft een geldige ObjectId terug voor dat object, of <code>null</code>.</p> </div> <div class="paragraph"> <p>De volgende twee regels laten zien hoe de rauwe inhoud van een object wordt ingeladen. In dit voorbeeld, roepen we <code>ObjectLoader.copyTo()</code> aan om de inhoud van het object direct naar stdout doorgeven, maar ObjectLoader heeft ook methoden om het type, de groote van het object te lezen, zowel als om de inhoud als een byte array terug te geven. Voor grote objeten (waar <code>.isLarge()</code> de waarde <code>true</code> teruggeeft), kan je <code>.openStream()</code> aanroepen om een InputStream-achtig object terug te krijgen die de data van de rauwe kan lezen zonder het eerst in z’n geheel in geheugen te lezen.</p> </div> <div class="paragraph"> <p>De volgende paar regels laten zien wat er voor nodig is om een nieuwe branch te maken. We maken een RefUpdate instantie, configureren een paar parameters, en roepen <code>.update()</code> aan om de wijziging af te trappen. Direct hierna is de code om dezelfde branch te verwijderen. Merk op dat <code>.setForceUpdate(true)</code> nodig is om dit te laten werken; anders zal de aanroep naar <code>.delete()</code> de waarde <code>REJECTED</code> teruggeven, en er gebeurt helemaal niets.</p> </div> <div class="paragraph"> <p>Het laatste voorbeeld laat zien hoe je de waarde <code>user.name</code> uit de Git configuratie bestanden kan ophalen. Deze instantie van Config gebruikt de repository die we eerder geopend hebben voor de lokale configuratie, maar pakt automatisch de wijzigingen op in de globale en systeem configuratie bestanden en leest daar ook waarden uit.</p> </div> <div class="paragraph"> <p>Dit is maar een klein voorproefje van de volledige binnenwerk API; er zijn nog veel meer methoden en klassen beschikbaar. Wat we hier ook niet hebben laten zien is de manier waarop JGit fouten behandelt, namelijk door middel van exceptions. De API’s van JGit gooien soms standaard Java excepties (zoals <code>IOException</code>), maar er is een heel scala aan JGit-specifieke exceptie typen die ook beschikbaar zijn (zoals <code>NoRemoteRepositoryException</code>, <code>CorruptObjectException</code>, en <code>NoMergeBaseException</code>).</p> </div> </div> <div class="sect3"> <h3 id="_porcelein">Porcelein</h3> <div class="paragraph"> <p>De binnenwerk API’s zijn nogal compleet, maar het kan nogal bewerkelijk zijn om ze aan elkaar te knopen om een regulier doel te bereiken, zoals het toevoegen van een bestand aan de index, of een nieuwe commit maken. JGit levert een aantal API’s op een hoger niveau om je hiermee te helpen, en het beginpunt van deze API’s is de <code>Git</code>-klasse:</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>De Git klasse heeft een leuke verzameling hoog-niveau methoden in de <em>builder</em>-stijl die kunnen worden gebruikt om een redelijk ingewikkeld gedrag samen te stellen. Laten we een kijkje nemen naar een voorbeeld - iets doen als <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&lt;Ref&gt; remoteRefs = git.lsRemote() .setCredentialsProvider(cp) .setRemote("origin") .setTags(true) .setHeads(false) .call(); for (Ref ref : remoteRefs) { System.out.println(ref.getName() + " -&gt; " + ref.getObjectId().name()); }</code></pre> </div> </div> <div class="paragraph"> <p>Dit is een normaal patroon met de Git klasse; de methode geeft een commando object terug waarmee je methode aanroepen aaneen kunt rijgen om parameters te zetten, die worden uitgevoerd als je <code>.call()</code> aanroept. In dit geval, vragen we de <code>origin</code> remote om tags, maar niet om heads. Merk ook het gebruik van een <code>CredentialsProvider</code> object op, voor autenticatie.</p> </div> <div class="paragraph"> <p>Vele andere commando’s zijn beschikbaar via de Git klasse, inclusief (maar niet beperkt tot) <code>add</code>, <code>blame</code>, <code>commit</code>, <code>clean</code>, <code>push</code>, <code>rebase</code>, <code>revert</code> en <code>reset</code>.</p> </div> </div> <div class="sect3"> <h3 id="_meer_lezen_2">Meer lezen</h3> <div class="paragraph"> <p>Dit is maar een kleine selectie uit de volledige mogelijkheden van JGit. Als je geïnteresseerd bent en meer wilt lezen, kan je hier kijken voor meer informatie en inspiratie:</p> </div> <div class="ulist"> <ul> <li> <p>De officiële JGit API documentatie is online beschikbaar op <a href="https://www.eclipse.org/jgit/documentation" class="bare">https://www.eclipse.org/jgit/documentation</a>. Dit is standaard Javadoc, dus je favoriete JVM IDE zal in staat zijn om ze lokaal te installeren.</p> </li> <li> <p>De JGit cookbook op <a href="https://github.com/centic9/jgit-cookbook" class="bare">https://github.com/centic9/jgit-cookbook</a> heeft veel voorbeelden van hoe de specifieke taken met JGit te doen.</p> </li> </ul> </div> </div> <div id="nav"><a href="/book/nl/v2/Bijlage-B:-Git-in-je-applicaties-inbouwen-Libgit2">prev</a> | <a href="/book/nl/v2/Bijlage-B:-Git-in-je-applicaties-inbouwen-go-git">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>

Pages: 1 2 3 4 5 6 7 8 9 10