CINXE.COM
Hacking Git
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>Hacking Git</title> <meta name="viewport" content="width=device-width"> <link rel="icon" type="image/x-icon" href="/images/logo.png"/> <link rel="stylesheet" href="/css/main.css"> <script src="/script/script.js" defer></script> <link rel="alternate" type="application/rss+xml" title="RSS" href="/feed.xml"> </head> <body> <div id="wrapper"> <div id="navbar" class="navbar"> <ul> <li><a href="/">Home</a> <li><a href="/rev_news/rev_news/">About Git Rev News</a> <li><a href="/rev_news/news_sources/">Git Rev News Sources</a> <li><a href="/rev_news/">Git Rev News</a> <li><a href="/rev_news/archive/">Git Rev News Archive</a> <li><a href="/SoC-2025-Microprojects/">SoC 2025 Applicant Microprojects</a> <li><a href="/SoC-2025-Ideas/">SoC 2025 Ideas</a> <li><a href="/SoC-2022-Org-Application/">SoC 2022 Organization Application</a> <li><a href="/Mentoring-Program-Guide/">Mentoring Program Guide</a> <li><a href="/Historical-SoC-Outreachy/">Historical Summer of Code and Outreachy Materials</a> <li><a href="/Hacking-Git/">Hacking Git</a> <li><a href="/General-Microproject-Information/">General Microproject Information</a> <li><a href="/General-Application-Information/">General Application Information</a> <li><a href="/GSoC-Participants/">GSoC participants</a> </ul> </div> <div class="site"> <div class="header"> <!-- nothing yet --> </div> <p>The goal of this document is not to be a tutorial, but rather to point to interesting material that has already been written.</p> <p>The goal is also not to list all the articles about Git or its internals. There are a lot of good resources, including free <a href="http://git-scm.com/book/en/v2/">books</a>, about that elsewhere.</p> <p>Contributions are welcome though! Please contact us on the Git Mailing list (at <a href="mailto:git@vger.kernel.org">git@vger.kernel.org</a>) or open an issue or a pull request on our <a href="https://github.com/git/git.github.io/">GitHub repo</a> to discuss or suggest improvements. Thanks!</p> <h2 id="building-git">Building Git</h2> <ul> <li> <p><a href="https://github.com/git/git/blob/master/INSTALL">“<code class="language-plaintext highlighter-rouge">INSTALL</code>”</a> to build using <a href="https://www.gnu.org/software/make/">Make</a>.</p> </li> <li> <p><a href="https://github.com/git/git/blob/master/meson.build">“<code class="language-plaintext highlighter-rouge">meson.build</code>”</a> to build using <a href="https://mesonbuild.com/">Meson</a>.</p> </li> <li> <p><a href="https://git-scm.com/book/en/v2/Getting-Started-Installing-Git#_installing_from_source">“Installing from Source”</a> in the Pro Git book</p> </li> <li> <p><a href="https://github.com/git/git/blob/master/Makefile">The top of the Makefile</a>, for special “Makefile knobs”</p> </li> </ul> <h2 id="understanding-the-git-code-base">Understanding the Git code base</h2> <ul> <li> <p><a href="https://git-scm.com/docs/user-manual#birdview-on-the-source-code">“A birds-eye view of Git’s source code”</a> in the Git User’s Manual</p> </li> <li> <p><a href="https://fabiensanglard.net/git_code_review/architecture.php">Fabien Sanglar’s Git Source Code Review</a></p> </li> <li> <p><a href="https://www.freecodecamp.org/news/boost-programming-skills-read-git-code/">Boost Your Programming Skills by Reading Git’s Code</a></p> </li> </ul> <h2 id="getting-started-hacking-and-contributing">Getting started hacking and contributing</h2> <ul> <li> <p><a href="https://git-scm.com/docs/MyFirstContribution">“My First Contribution”</a></p> </li> <li> <p><a href="https://github.com/git/git/blob/master/Documentation/MyFirstObjectWalk.adoc">“My First Object Walk”</a></p> </li> <li> <p><a href="https://matheustavares.gitlab.io/posts/first-steps-contributing-to-git">Matheus’ tutorial</a></p> </li> <li> <p><a href="https://gitlab.com/gitlab-org/git/-/wikis/Contribute-to-Git:-A-beginner's-Guide">Eric Ju’s “Contribute-to-Git: A beginner’s Guide” wiki</a></p> </li> <li> <p><a href="https://git-scm.com/docs/user-manual#hacking-git">“Hacking Git”</a> in the Git User’s Manual</p> </li> <li> <p><a href="https://github.com/git/git/tree/master/Documentation/technical">“<code class="language-plaintext highlighter-rouge">Documentation/technical</code>”</a>, technical documentation (also viewable at <code class="language-plaintext highlighter-rouge">https://git-scm.com/docs/<file-name-without-.txt></code>)</p> </li> <li> <p><a href="https://git.github.io/General-Microproject-Information/">Our General Microproject Information</a> can help understand the process of contributing and find issues to work on.</p> </li> </ul> <h2 id="conventions-and-processes">Conventions and processes</h2> <ul> <li> <p><a href="https://github.com/git/git/blob/master/Documentation/CodingGuidelines">“<code class="language-plaintext highlighter-rouge">CodingGuidelines</code>”</a></p> </li> <li> <p><a href="https://git-scm.com/docs/SubmittingPatches/">“<code class="language-plaintext highlighter-rouge">SubmittingPatches</code>”</a></p> </li> <li> <p><a href="https://gitforwindows.org/good-commits">Git for Windows’ “Good commits”</a></p> </li> </ul> <h2 id="process-related-tools-and-sites">Process related tools and sites</h2> <ul> <li> <p><a href="https://gitgitgadget.github.io/">GitGitGadget</a> makes it easy to send patches to the mailing list.</p> </li> <li> <p><a href="https://flusp.ime.usp.br/git/sending-patches-by-email-with-git/">Sending patches by email with git</a> is Matheus’ git send-email tutorial.</p> </li> <li> <p><a href="https://lore.kernel.org/git/">lore.kernel.org/git</a> is our preferred mailing list archive.</p> </li> <li> <p><a href="https://public-inbox.org/README.html">public-inbox</a> is the software behind lore.kernel.org.</p> </li> <li> <p><a href="https://people.kernel.org/monsieuricon/lore-lei-part-1-getting-started">lore+lei</a> helps take advantage of lore/public-inbox.</p> </li> <li> <p><a href="https://people.kernel.org/monsieuricon/introducing-b4-and-patch-attestation">b4</a> helps work with patches posted on lore/public-inbox.</p> </li> <li> <p><a href="https://github.com/git-series/git-series">git-series</a> helps manage patch series.</p> </li> <li> <p><a href="https://github.com/stefanha/git-publish">git-publish</a> helps manage patch series.</p> </li> <li> <p><a href="https://github.com/felipec/git-related">git-related</a> finds people who might be interested in a patch.</p> </li> </ul> <h2 id="development-status-news-and-events">Development status, news and events</h2> <ul> <li> <p><a href="https://lore.kernel.org/git/?q=s%3A%22What%27s+cooking+in+git.git%22">Junio’s “What’s cooking in git.git” emails</a> list the status of various development topics.</p> </li> <li> <p><a href="https://tinyurl.com/gitCal">Git’s release calendar</a> shows the planned release cycles, the maintainer’s planned offline time, and possibly other events.</p> </li> <li> <p><a href="https://git.github.io/rev_news/archive/">Git Rev News</a> newsletter.</p> </li> <li> <p><a href="https://git-merge.com/">Git Merge conference</a>.</p> </li> <li> <p><a href="https://lore.kernel.org/git/?q=s%3A%22Review+Club%22">Review Club announces and discussions on the list</a>.</p> </li> <li> <p><a href="https://docs.google.com/document/d/14L8BAumGTpsXpjDY8VzZ4rRtpAjuGrFSRqn3stCuS_w">Review Club meeting notes</a> Google doc.</p> </li> <li> <p><a href="https://lore.kernel.org/git/?q=s%3AContributor*+Summit">Discussions about Contributor(s) Summits on the list</a></p> </li> </ul> <h2 id="branching-workflow">Branching workflow</h2> <ul> <li> <p><a href="https://github.com/git/git/blob/todo/MaintNotes">“A note from the maintainer”</a></p> </li> <li> <p><a href="https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#_large_merging_workflows">“Large-Merging Workflows”</a> in the Pro Git book</p> </li> <li> <p><a href="https://git-scm.com/docs/gitworkflows"><code class="language-plaintext highlighter-rouge">gitworkflows</code></a> manual page</p> </li> <li> <p><a href="https://github.com/git/git/blob/master/Documentation/howto/maintain-git.adoc">“How to maintain Git”</a></p> </li> <li> <p><a href="https://hackernoon.com/how-the-creators-of-git-do-branches-e6fcc57270fb">“How the Creators of Git do Branching”</a>, and the associated <a href="https://github.com/rocketraman/gitworkflow">gitworkflow</a> repository</p> </li> </ul> <h2 id="debugging">Debugging</h2> <ul> <li> <p><a href="https://gitforwindows.org/debugging-git">Git for Windows’ Debugging Git</a></p> </li> <li> <p><a href="https://github.com/git/git/blob/v2.27.0/Documentation/CodingGuidelines#L441-L445">Launching GDB explanations in CodingGuidelines</a></p> </li> <li> <p><a href="https://gist.github.com/phil-blain/17c67740bd26e66f4851fe0c07230ea4">Philippe Blain’s “Debugging Git” Gist</a></p> </li> <li> <p><a href="https://public-inbox.org/git/CAP8UFD3Bd4Af1XZ00VyuHnQs=MFrdUufKeePO1tyedWoReRjwQ@mail.gmail.com/">Debugging test failure using gdb example</a></p> </li> </ul> <h2 id="tests">Tests</h2> <ul> <li> <p><a href="https://github.com/git/git/blob/master/t/README">“<code class="language-plaintext highlighter-rouge">t/README</code>”</a></p> </li> <li> <p><a href="https://github.com/git/git/blob/master/t/perf/README">“<code class="language-plaintext highlighter-rouge">t/perf/README</code>”</a></p> </li> </ul> <h2 id="community-getting-help-mentoring">Community, getting help, mentoring</h2> <ul> <li> <p><a href="https://git-scm.com/community">git-scm community page</a></p> </li> <li> <p><a href="https://web.libera.chat/#git-devel">web interface to #git-devel IRC channel on Libera Chat</a></p> </li> <li> <p><a href="https://colabti.org/irclogger/irclogger_logs/git-devel">#git-devel IRC channel archive</a></p> </li> <li> <p><a href="https://discord.gg/NKY7fFue">Git Community Discord Server</a></p> </li> <li> <p><a href="https://groups.google.com/forum/#!forum/git-mentoring">git-mentoring mailing list</a></p> </li> <li> <p><a href="https://github.com/git/git/blob/todo/MaintNotes">“A note from the maintainer”</a></p> </li> </ul> <h2 id="mentoring-programs">Mentoring programs</h2> <ul> <li> <p><a href="https://summerofcode.withgoogle.com/">Google Summer of Code</a></p> </li> <li> <p><a href="https://www.outreachy.org/">Outreachy</a></p> </li> <li> <p><a href="https://git.github.io/General-Application-Information/">General Application Information</a></p> </li> </ul> <div class="footer"> <!-- nothing yet --> </div> </div> <div id="menuLinkBar"><a href="#navbar">Menu</a></div> </div> <!-- Google Analytics snippet: --> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-68655198-1', 'auto'); ga('send', 'pageview'); </script> </body> </html>