<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>GitGitGadget</title><link>https://gitforwindows.org/</link><description>Recent content on GitGitGadget</description><generator>Hugo</generator><language>en</language><atom:link href="https://gitforwindows.org/index.xml" rel="self" type="application/rss+xml"/><item><title/><link>https://gitforwindows.org/diagram-list.json</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/diagram-list.json</guid><description/></item><item><title/><link>https://gitforwindows.org/latest-32-bit-installer.url</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/latest-32-bit-installer.url</guid><description/></item><item><title/><link>https://gitforwindows.org/latest-32-bit-mingit.url</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/latest-32-bit-mingit.url</guid><description/></item><item><title/><link>https://gitforwindows.org/latest-32-bit-portable-git.url</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/latest-32-bit-portable-git.url</guid><description/></item><item><title/><link>https://gitforwindows.org/latest-64-bit-installer.url</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/latest-64-bit-installer.url</guid><description/></item><item><title/><link>https://gitforwindows.org/latest-64-bit-mingit.url</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/latest-64-bit-mingit.url</guid><description/></item><item><title/><link>https://gitforwindows.org/latest-64-bit-portable-git.url</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/latest-64-bit-portable-git.url</guid><description/></item><item><title/><link>https://gitforwindows.org/latest-arm64-installer.url</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/latest-arm64-installer.url</guid><description/></item><item><title/><link>https://gitforwindows.org/latest-arm64-mingit.url</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/latest-arm64-mingit.url</guid><description/></item><item><title/><link>https://gitforwindows.org/latest-arm64-portable-git.url</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/latest-arm64-portable-git.url</guid><description/></item><item><title/><link>https://gitforwindows.org/latest-tag.txt</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/latest-tag.txt</guid><description/></item><item><title/><link>https://gitforwindows.org/latest-version.txt</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/latest-version.txt</guid><description/></item><item><title/><link>https://gitforwindows.org/snaps.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/snaps.html</guid><description/></item><item><title/><link>https://gitforwindows.org/snapshots.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/snapshots.html</guid><description/></item><item><title>32-bit</title><link>https://gitforwindows.org/32-bit.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/32-bit.html</guid><description>&lt;h1 id="32-bit-support-of-git-for-windows">32-bit support of Git for Windows&lt;/h1>
&lt;p>While Git for Windows v1.x was only ever offered as 32-bit installer (i.e. targeting the i686 CPU architecture), with the switch of Git for Windows v2.x in August 2015 to depend on &lt;a href="https://www.msys2.org/">MSYS2&lt;/a>, there have been two variants: the 32-bit and the 64-bit (x86_64) one.&lt;/p>
&lt;p>However, due to Git for Windows&amp;rsquo; reliance on the MSYS2, which &lt;a href="https://www.msys2.org/news/#2020-05-17-32-bit-msys2-no-longer-actively-supported">dropped 32-bit support&lt;/a> (the 32-bit version of the MSYS2 runtime &lt;a href="https://github.com/msys2/msys2-runtime/commit/762dcfc658c85de8d418c6ba4e0e40024bee118a">cannot even be built&lt;/a> as of version 3.4.0), Git for Windows started to phase out 32-bit support after Git for Windows v2.40.x.&lt;/p></description></item><item><title>Adding regression tests</title><link>https://gitforwindows.org/adding-regression-tests.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/adding-regression-tests.html</guid><description>&lt;p>Git comes with an extensive regression test suite. It lives in the &lt;a href="https://github.com/git/git/tree/HEAD/t">&lt;code>t/&lt;/code> subdirectory&lt;/a> of the source code repository and is organized into test scripts, e.g. &lt;code>t8002-blame.sh&lt;/code>, which contain multiple test cases. The test scripts themselves are shell scripts.&lt;/p>
&lt;p>The best documentation how to add tests is the test suite itself, by example.&lt;/p>
&lt;h1 id="adding-test-cases">Adding test cases&lt;/h1>
&lt;p>You will want to add test cases either to demonstrate bugs, or to ensure that certain operations work as expected (e.g. when you just implemented such an operation or fixed a bug).&lt;/p></description></item><item><title>Auto launching ssh agent when git starts</title><link>https://gitforwindows.org/auto-launching-ssh-agent-when-git-starts.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/auto-launching-ssh-agent-when-git-starts.html</guid><description>&lt;p>If you want your passphrase to be &amp;lsquo;remembered&amp;rsquo; for a session (or configurable timeout period) you will need to setup an ssh-agent process to handle this key.&lt;/p>
&lt;p>Recent versions of git for windows 2.x come with an ssh agent startup script and the installer also checks if an ssh agent is currently running and asks you to kill this process.&lt;/p>
&lt;p>Run the ssh agent:&lt;/p>
&lt;pre>&lt;code>start-ssh-agent.cmd
&lt;/code>&lt;/pre>
&lt;p>This should work both in a &lt;code>cmd&lt;/code> and &lt;code>bash&lt;/code> shell and can be included in &lt;code>~/.profile&lt;/code> or &lt;code>~/.bashrc&lt;/code>.&lt;/p></description></item><item><title>Backporting upstream Git patches</title><link>https://gitforwindows.org/backporting-upstream-git-patches.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/backporting-upstream-git-patches.html</guid><description>&lt;h1 id="how-to-backport-a-patch-series-that-was-contributed-to-upstream-git">How to backport a patch (series) that was contributed to upstream Git&lt;/h1>
&lt;p>Git for Windows&amp;rsquo; &lt;a href="https://github.com/git-for-windows/git/security/policy#supported-versions">release cadence&lt;/a> closely follows the &lt;a href="https://tinyurl.com/gitcal">release cycle of the &amp;ldquo;upstream&amp;rdquo; Git project&lt;/a>.&lt;/p>
&lt;p>Sometimes patches that already made it into upstream Git, but that have not been released as part of an official version, are important enough for Git for Windows that they need to be &amp;ldquo;backported&amp;rdquo;, i.e. they to be integrated into Git for Windows&amp;rsquo; &lt;code>main&lt;/code> branch.&lt;/p></description></item><item><title>Building Git</title><link>https://gitforwindows.org/building-git.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/building-git.html</guid><description>&lt;h1 id="building-git-on-windows">Building Git on Windows&lt;/h1>
&lt;p>We build Git for Windows using an &lt;a href="https://msys2.github.io/">MSYS2&lt;/a> based &lt;em>Git for Windows SDK&lt;/em>. This SDK can be installed via the &lt;a href="https://gitforwindows.org/#download-sdk">SDK installer&lt;/a>&lt;/p>
&lt;h2 id="installing-a-build-environment">Installing a build environment&lt;/h2>
&lt;ol>
&lt;li>Just run the &lt;a href="https://gitforwindows.org/#download-sdk">SDK installer&lt;/a>.&lt;/li>
&lt;/ol>
&lt;h2 id="build-git">Build Git&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>An initial &lt;code>git clone&lt;/code> and &lt;code>make&lt;/code> should have already occurred when running the &lt;a href="https://gitforwindows.org/#download-sdk">SDK installer&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Open the &lt;em>Git for Windows SDK&lt;/em> &lt;em>MinGW&lt;/em> shell by double clicking either the Shortcut on the desktop &lt;code>Git SDK 32-bit.lnk&lt;/code> or by double clicking &lt;code>mingw32_shell.bat&lt;/code> in the install folder. That is &lt;code>Git SDK 64-bit.lnk&lt;/code> and &lt;code>mingw64_shell.bat&lt;/code> for the &lt;code>64bit&lt;/code> &lt;a href="https://gitforwindows.org/#download-sdk">SDK installer&lt;/a>.&lt;/p></description></item><item><title>Building msys2 runtime</title><link>https://gitforwindows.org/building-msys2-runtime.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/building-msys2-runtime.html</guid><description>&lt;h1 id="installing-a-build-environment">Installing a build environment&lt;/h1>
&lt;ol>
&lt;li>Download and run the &lt;a href="https://gitforwindows.org/#download-sdk">Git for Windows SDK installer&lt;/a>.&lt;/li>
&lt;/ol>
&lt;h2 id="building-msys2-runtime">Building msys2-runtime&lt;/h2>
&lt;ol start="2">
&lt;li>
&lt;p>Open the Git for Windows SDK MSys shell by double-clicking the &lt;code>msys2_shell.cmd&lt;/code> script in the install folder (by default &lt;code>C:\git-sdk-&amp;lt;arch&amp;gt;&lt;/code>).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>From the MSys shell do: &lt;code>sdk build msys2-runtime&lt;/code>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>This last step may take a while, so please be patient!&lt;/p>
&lt;h2 id="rebuilding-the-msys2-runtime">Rebuilding the msys2-runtime&lt;/h2>
&lt;p>When there are bugs in the msys2-runtime (e.g. problems with the POSIX-to-Windows path mangling), you need to rebuild the &lt;code>msys-2.0.dll&lt;/code>, possibly frequently.&lt;/p></description></item><item><title>Building new package versions</title><link>https://gitforwindows.org/building-new-package-versions.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/building-new-package-versions.html</guid><description>&lt;p>As described in &lt;a href="./package-management.html">Package management&lt;/a>, Git for Windows&amp;rsquo; SDK is a close derivative of the &lt;a href="https://msys2.github.io/">MSYS2&lt;/a> system, and as such, its components are built using &lt;code>makepkg&lt;/code> and &lt;code>makepkg-mingw&lt;/code> (borrowed from Arch Linux&amp;rsquo; &lt;a href="https://wiki.archlinux.org/index.php/Pacman">&lt;code>pacman&lt;/code>&lt;/a>).&lt;/p>
&lt;p>Most of those packages are actually built by the MSYS2 project and consumed by Git for Windows. However, a couple of components (including cURL and OpenSSH) &lt;em>are&lt;/em> built by Git for Windows, e.g. to be able to react faster to newly-available versions, or to allow for modifications specific to Git for Windows.&lt;/p></description></item><item><title>Choosing the default behavior of `git pull`</title><link>https://gitforwindows.org/choosing-the-default-behavior-of-git-pull.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/choosing-the-default-behavior-of-git-pull.html</guid><description>&lt;h1 id="choosing-the-default-behavior-of-git-pull">Choosing the default behavior of &lt;code>git pull&lt;/code>&lt;/h1>
&lt;h2 id="tldr">TL;DR&lt;/h2>
&lt;p>The &lt;code>git pull&lt;/code> command offers different default behaviors. This guide clarifies the differences between these settings.
Essentially, this installer screen configures what happens when you type a plain &lt;code>git pull&lt;/code> in your terminal. It sets a global preference so you don&amp;rsquo;t have to manually type flags (like &lt;code>--rebase&lt;/code>).&lt;/p>
&lt;p>You can change your choice later with the &lt;a href="#changing-your-choice-later">&lt;code>git config&lt;/code>&lt;/a> command.&lt;/p>
&lt;h2 id="what-does-git-pull-actually-do">What does &lt;code>git pull&lt;/code> actually do?&lt;/h2>
&lt;p>Behind the scenes, &lt;code>git pull&lt;/code> is a two-step command. It first runs &lt;code>git fetch&lt;/code> to download the latest commits from the remote, then it integrates those commits into your current branch. The three options on the installer screen only affect the second step.&lt;/p></description></item><item><title>Compiling Git with Visual Studio</title><link>https://gitforwindows.org/compiling-git-with-visual-studio.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/compiling-git-with-visual-studio.html</guid><description>&lt;h1 id="compiling-git-with-visual-studio">Compiling Git with Visual Studio&lt;/h1>
&lt;p>Please note: this page describes how to compile Git&amp;rsquo;s source code in Visual Studio 2015 or later.&lt;/p>
&lt;h2 id="checking-out-vsmain">Checking out &lt;code>vs/main&lt;/code>&lt;/h2>
&lt;blockquote>
&lt;p>[!WARNING]&lt;br>
The &lt;code>vs/main&lt;/code> branch and &lt;code>git.sln&lt;/code> is deprecated. The current approach is to open the &lt;code>git&lt;/code> folder in VS directly, refer to the &lt;a href="https://github.com/git-for-windows/git/tree/vs/main">README of the &lt;code>vs/main&lt;/code> branch&lt;/a>.&lt;/p>&lt;/blockquote>
&lt;p>Git&amp;rsquo;s source code (and hence also Git for Windows&amp;rsquo; source code) is &lt;a href="./building-git.html">usually built using GNU C and GNU Make in a Git for Windows SDK&lt;/a>.&lt;/p></description></item><item><title>Contact</title><link>https://gitforwindows.org/contact.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/contact.html</guid><description>&lt;h1 id="how-to-contact-the-git-for-windows-project">How to contact the Git for Windows project&lt;/h1>
&lt;p>Please state the nature of your medical emergency.&lt;/p>
&lt;h2 id="i-found-a-bug">I found a bug!&lt;/h2>
&lt;p>Please follow &lt;a href="./issue-reporting-guidelines.html">our guide lines&lt;/a> on reporting bugs.&lt;/p>
&lt;h2 id="i-have-a-question">I have a question!&lt;/h2>
&lt;p>We have &lt;a href="https://github.com/git-for-windows/git/discussions/">GitHub Discussions&lt;/a>. If, for some reason or other, you prefer a mailing list, use &lt;a href="mailto:git@vger.kernel.org">the Git mailing list&lt;/a>.&lt;/p>
&lt;h2 id="but-i-really-have-only-a-quick-question">But I really have only a quick question!&lt;/h2>
&lt;p>Ask away &lt;a href="https://discord.gg/GRFVkzgxRd">on Discord&lt;/a>.&lt;/p>
&lt;h2 id="but-i-would-prefer-to-email-somebody-directly">But I would prefer to email somebody directly!&lt;/h2>
&lt;p>Please keep in mind that the time of competent Open Sourcerers is better spent on communicating publicly.&lt;/p></description></item><item><title>Continuous Integration (CI)</title><link>https://gitforwindows.org/continuous-integration.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/continuous-integration.html</guid><description>&lt;p>All of Git for Windows&amp;rsquo; CI builds happen in GitHub Actions:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/git-for-windows/git/actions/workflows/main.yml">&lt;code>git&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/git-for-windows/git-for-windows-automation/actions">&lt;code>git-for-windows-automation&lt;/code>&lt;/a>&lt;/li>
&lt;li>There are also various automated runs in &lt;a href="https://github.com/orgs/git-for-windows/repositories">other repositories in Git for Windows&amp;rsquo; org&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Debugging Git</title><link>https://gitforwindows.org/debugging-git.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/debugging-git.html</guid><description>&lt;h1 id="debugging-git-using-the-gnu-debugger-gdb">Debugging Git using the GNU debugger (GDB)&lt;/h1>
&lt;p>First of all, Git&amp;rsquo;s &lt;code>.exe&lt;/code> files should be rebuilt with debugging information, and without optimization (because &lt;code>gdb&lt;/code> has serious troubles single-stepping code compiled using &lt;code>-O2&lt;/code> for some reason). To this end:&lt;/p>
&lt;ol>
&lt;li>&lt;a href="https://gitforwindows.org/#download-sdk">install the Git for Windows SDK&lt;/a>&lt;/li>
&lt;li>Create &lt;code>/usr/src/git/config.mak&lt;/code> with the following contents to disable compiler optimization and ASLR:&lt;/li>
&lt;/ol>
&lt;pre tabindex="0">&lt;code>DEVELOPER=1
ifndef NDEBUG
CFLAGS := $(filter-out -O2,$(CFLAGS))
ASLR_OPTION := -Wl,--dynamicbase
BASIC_LDFLAGS := $(filter-out $(ASLR_OPTION),$(BASIC_LDFLAGS))
endif
&lt;/code>&lt;/pre>&lt;ol start="3">
&lt;li>run &lt;code>make&lt;/code> in &lt;code>/usr/src/git/&lt;/code>.&lt;/li>
&lt;/ol>
&lt;p>After that, you can run Git&amp;rsquo;s executables in GDB like so:&lt;/p></description></item><item><title>Diagnosing performance issues</title><link>https://gitforwindows.org/diagnosing-performance-issues.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/diagnosing-performance-issues.html</guid><description>&lt;h1 id="how-to-diagnose-when-git-for-windows-is-slow">How to diagnose when Git for Windows is slow&lt;/h1>
&lt;p>Under certain circumstances, Git can become very slow on Windows. Here are a couple of hints to figure out why.&lt;/p>
&lt;h2 id="identify-specific-git-commands-performance-issues">Identify specific Git commands&amp;rsquo; performance issues&lt;/h2>
&lt;p>If the problem lies with a specific Git command, the most straight-forward way to investigate is to use profiling tools.&lt;/p>
&lt;p>The canonical profiling tool in GCC&amp;rsquo;s tool set is &lt;a href="https://sourceware.org/binutils/docs/gprof/">&lt;code>gprof&lt;/code>&lt;/a>. However, the MINGW version of the GCC tools offered by MSYS2 has been known to produce empty output on occasion.&lt;/p></description></item><item><title>FAQ</title><link>https://gitforwindows.org/faq.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/faq.html</guid><description>&lt;h2 id="which-versions-of-windows-are-supported">Which versions of Windows are supported?&lt;/h2>
&lt;p>Git for Windows currently works with all recent, commercially released x64 versions of Windows, starting with Windows 8.1.&lt;/p>
&lt;blockquote>
&lt;p>[!IMPORTANT]
Git for Windows version &lt;a href="https://github.com/git-for-windows/git/releases/tag/v2.46.2.windows.1">2.46.2&lt;/a> was the last version supporting Windows 7 and 8.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>[!IMPORTANT]
Git for Windows version &lt;a href="https://github.com/git-for-windows/git/releases/tag/v2.40.1.windows.1">2.40.1&lt;/a> was the last version with full support for any 32-bit Windows version.&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>[!IMPORTANT]
Git for Windows version &lt;a href="https://github.com/git-for-windows/git/releases/tag/v2.37.1.windows.1">2.37.1&lt;/a> was the last version supporting Windows Vista and Server 2008.&lt;/p></description></item><item><title>File names, Branch names, Path quotation, Executable bit and file modes, core.FileMode</title><link>https://gitforwindows.org/file-names-branch-names-path-quotation-executable-bit-and-file-modes-core-filemode.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/file-names-branch-names-path-quotation-executable-bit-and-file-modes-core-filemode.html</guid><description>&lt;h1 id="case-preservation-case-insensitivity">Case Preservation, Case insensitivity&lt;/h1>
&lt;p>Windows is case insensitive, but case preserving for filenames. Meanwhile Linux/Posix, for which Git is designed, is case sensitive.&lt;/p>
&lt;p>In addition Git branch names are stored as filenames.&lt;/p>
&lt;p>This means that in normal usage, Git will have difficulty when it meets a changed case file or branch. Lower case is common for Linux usage!&lt;/p>
&lt;p>E.g. &lt;code>Main&lt;/code> branch and &lt;code>main&lt;/code> branch are different, even though, on Windows, Git will often mistake one for the other (because Windows will read the &amp;lsquo;other&amp;rsquo; case version of the file.&lt;/p></description></item><item><title>Git cannot create a file or directory with a long path</title><link>https://gitforwindows.org/git-cannot-create-a-file-or-directory-with-a-long-path.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/git-cannot-create-a-file-or-directory-with-a-long-path.html</guid><description>&lt;h1 id="git-for-windows-vs-long-paths">Git for Windows vs long paths&lt;/h1>
&lt;h2 id="the-problem">The problem&lt;/h2>
&lt;p>Windows does not properly support files and directories longer than 260 characters. This applies to Windows Explorer, &lt;code>cmd.exe&lt;/code> and many other applications (including many IDEs as well as bash, perl and tcl that come with Git for Windows).&lt;/p>
&lt;h2 id="opt-in-configuration">Opt-In configuration&lt;/h2>
&lt;p>For this reason, long paths support in Git for Windows is disabled by default.&lt;/p>
&lt;p>That being said, long paths support for C-based git commands can be enabled by setting the &lt;code>core.longpaths&lt;/code> option to true. Scripted git commands may still fail with this option, so use at your own risk. Example:&lt;/p></description></item><item><title>Git wrapper</title><link>https://gitforwindows.org/git-wrapper.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/git-wrapper.html</guid><description>&lt;h1 id="what-is-the-git-wrapper">What &lt;em>is&lt;/em> the &amp;ldquo;Git wrapper&amp;rdquo;?&lt;/h1>
&lt;p>One of the more confusing aspects of Git for Windows is that its main entry points (&lt;code>&amp;lt;Git&amp;gt;\git-bash.exe&lt;/code>, &lt;code>&amp;lt;Git&amp;gt;\cmd\git.exe&lt;/code>, &lt;code>&amp;lt;Git&amp;gt;\bin\bash.exe&lt;/code>, where &lt;code>&amp;lt;Git&amp;gt;&lt;/code> is the location into which Git was installed, typically &lt;code>C:\Program Files\Git&lt;/code>) are &lt;em>not&lt;/em> the actual binaries implementing the functionality.&lt;/p>
&lt;p>All of these executables are variants of the &lt;a href="https://github.com/git-for-windows/MINGW-packages/blob/main/mingw-w64-git/git-wrapper.c">&amp;ldquo;Git wrapper&amp;rdquo;&lt;/a>. Its only purpose is to set a couple of environment variables and then spawn the &lt;em>actual&lt;/em> program. For example, &lt;code>Git/bin/bash.exe&lt;/code> will set &lt;code>MSYSTEM&lt;/code> and &lt;code>PATH&lt;/code> and spawn &lt;code>Git/usr/bin/bash.exe&lt;/code>.&lt;/p></description></item><item><title>Good commits</title><link>https://gitforwindows.org/good-commits.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/good-commits.html</guid><description>&lt;p>Please note that it is a best practice embraced by us to craft elegant, well-separated commits. Each commit is kind of its own little story, so if you make a typo fix, that is its own commit. If you add documentation, that is another commit. If you have multiple typo fixes, you could consider to put them into the same commit, depending on your taste.&lt;/p>
&lt;p>In short, make sure that commits are logical units of changes.&lt;/p></description></item><item><title>governance-model</title><link>https://gitforwindows.org/governance-model.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/governance-model.html</guid><description>&lt;h1 id="git-for-windows-governance-model">Git for Windows governance model&lt;/h1>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;em>Git for Windows&lt;/em> is led by a benevolent dictator (Johannes Schindelin) and managed by the community. That is,
the community actively contributes to the day-to-day maintenance of the project, but the general strategic
line is drawn by the benevolent dictator. In case of disagreement, they have the last word. It is the
benevolent dictator’s job to resolve disputes within the community and to ensure that the project is able to
progress in a coordinated way. In turn, it is the community’s job to guide the decisions of the benevolent
dictator through active engagement and contribution.&lt;/p></description></item><item><title>How to participate</title><link>https://gitforwindows.org/how-to-participate.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/how-to-participate.html</guid><description>&lt;h1 id="you-want-to-contribute-great-heres-how">You want to contribute? Great. Here&amp;rsquo;s how!&lt;/h1>
&lt;p>There are several ways to participate in the Git for Windows project. First off, have a look at the &lt;a href="https://gitforwindows.org/governance-model.html">governance model&lt;/a> of the project.&lt;/p>
&lt;h2 id="help-users">Help users&lt;/h2>
&lt;p>In &lt;a href="https://github.com/git-for-windows/git/discussions/">Git for Windows&amp;rsquo; discussions&lt;/a> or on &lt;a href="https://github.com/git-for-windows/git/issues">the issue tracker&lt;/a>, help is always welcome.&lt;/p>
&lt;h2 id="add-documentation">Add documentation&lt;/h2>
&lt;p>A lot of documentation wants to be written, still. A good place is &lt;a href="https://github.com/git-for-windows/git-for-windows.github.io">Git for Windows&amp;rsquo; home page&lt;/a>. Tutorials, step by step instructions and general background information, etc. Even just keep the links up to date and reporting inconsistencies is helpful.&lt;/p></description></item><item><title>Install inside MSYS2 proper</title><link>https://gitforwindows.org/install-inside-msys2-proper.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/install-inside-msys2-proper.html</guid><description>&lt;h1 id="please-note-that-this-scenario-is-not-officially-supported-by-git-for-windows">&lt;strong>Please note that this scenario is not officially supported by Git for Windows&lt;/strong>&lt;/h1>
&lt;blockquote>
&lt;p>[!IMPORTANT]
You shouldn&amp;rsquo;t need this anymore. We&amp;rsquo;ve worked with MSYS2 to make &lt;a href="https://packages.msys2.org/base/mingw-w64-git">&lt;code>mingw-w64-git&lt;/code> available directly in MSYS2&lt;/a>. Of the packages mentioned here only &lt;code>mingw-w64-git-extra&lt;/code> isn&amp;rsquo;t available in MSYS2.&lt;/p>&lt;/blockquote>
&lt;p>Git for Windows being based on MSYS2, it&amp;rsquo;s possible to install the &lt;code>mingw-w64-git&lt;/code> package into an existing MSYS2 installation. That means that if you are already using MSYS2 on your computer, you can use Git for Windows without running the full installer or using the portable version. There are some caveats for going this way, details below. Reading the whole guide before starting is recommended.&lt;/p></description></item><item><title>Install or update inside MSYS2, Cygwin or Git for windows itself</title><link>https://gitforwindows.org/install-or-update-inside-msys2-cygwin-or-git-for-windows-itself.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/install-or-update-inside-msys2-cygwin-or-git-for-windows-itself.html</guid><description>&lt;h2 id="its-different-from-install-inside-msys2-proper">It&amp;rsquo;s different from &lt;a href="./install-inside-msys2-proper.html">Install inside MSYS2 proper&lt;/a>&lt;/h2>
&lt;p>Instead of configuring and installing Git for Windows using &lt;code>pacman&lt;/code>, this guide introduces another approach to properly install or update Git for Windows inside MSYS2, Cygwin or even Git for Windows itself. The only thing you need is a &lt;code>bash&lt;/code> interpreter on Windows and a &lt;code>curl&lt;/code>.&lt;/p>
&lt;h2 id="how-to">How to&lt;/h2>
&lt;p>With the script &lt;code>getgit&lt;/code> introduced by &lt;a href="https://github.com/git-for-windows/build-extra/pull/261">git-for-windows/build-extra#261&lt;/a>, you can download and run the script or just run &lt;code>curl https://raw.githubusercontent.com/git-for-windows/build-extra/HEAD/git-extra/getgit | bash&lt;/code>.&lt;/p></description></item><item><title>Issue reporting guidelines</title><link>https://gitforwindows.org/issue-reporting-guidelines.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/issue-reporting-guidelines.html</guid><description>&lt;ul>
&lt;li>Search Existing issues &amp;amp; pull requests, both &lt;a href="https://github.com/git-for-windows/git/issues?q=is%3Aopen">open&lt;/a> and &lt;a href="https://github.com/git-for-windows/git/issues?q=is%3Aclosed">closed&lt;/a>. Determine whether or not a bug report has been dispatched. What is the status of the report? Are there any other bugs to be looked at? If so issue another bug report.&lt;/li>
&lt;li>Include the output of the &lt;code>git --version&lt;/code> in addition to the Windows version as that information is often necessary to reproduce the issue. When reporting problems involving a server, include the same information for the server side (insofar possible). Likewise, please mention if you use 32-bit Windows, or a 32-bit version of Git on a 64-bit Windows. If in doubt, try to provide more information rather then less; It&amp;rsquo;s better than leaving a lot of guess work! :)&lt;/li>
&lt;li>Describe the options used when installing Git for Windows, and the console type/window (if any).&lt;/li>
&lt;li>If your setup is different from &amp;ldquo;normal&amp;rdquo; setups in any way, it is a good idea to put specifics about that into your bug report, too.&lt;/li>
&lt;li>Describe your issue properly. If you spend 30 seconds throwing out a sloppy report, do expect that others will spend exactly the same amount on trying to resolve it. In contrast, if you write a complete and pleasantly informative bug report, you will almost certainly be rewarded by excellent help with your problem.&lt;/li>
&lt;li>Include a &lt;a href="http://stackoverflow.com/help/mcve">Minimal, Complete, and Verifiable example&lt;/a> using GitHub Markdown&amp;rsquo;s &lt;code>codeblock&lt;/code> delimiters.&lt;/li>
&lt;li>If your issue stems from a particular repository include its URL. If the repository is proprietary try to create a public test repository showing the same issue.&lt;/li>
&lt;li>Be prepared to test fixes!&lt;/li>
&lt;li>Be polite. You are asking highly competent software developers for help, for free, so you might want to avoid treating them as if they were a commodity or at your free disposal.&lt;/li>
&lt;li>An example for an outstanding report can be found &lt;a href="https://github.com/msysgit/msysgit/issues/206#issuecomment-44574988">here&lt;/a>. You may want to imitate the level of detail.&lt;/li>
&lt;li>For further inspiration, read reports that were resolved successfully, &lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/bugs.html">http://www.chiark.greenend.org.uk/~sgtatham/bugs.html&lt;/a>, &lt;a href="http://stackoverflow.com/questions/how-to-ask">http://stackoverflow.com/questions/how-to-ask&lt;/a> and &lt;a href="http://whathaveyoutried.com/">http://whathaveyoutried.com/&lt;/a>.&lt;/li>
&lt;/ul></description></item><item><title>Making a portable Git</title><link>https://gitforwindows.org/making-a-portable-git.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/making-a-portable-git.html</guid><description>&lt;p>As the portable Git is made by putting together files from the Git SDK, it is advisable to update those files first. To update the packages, call &lt;code>pacman -Syu&lt;/code> (&lt;a href="./package-management.html#updating-msys2-runtime-pacman-and-bash">caveats apply&lt;/a>). If you want to test Git changes or make an portable Git from your own Git fork, you need to call &lt;code>cd /usr/src/git &amp;amp;&amp;amp; make install&lt;/code> (for documentation changes, &lt;code>make install-html&lt;/code> and &lt;em>afterwards&lt;/em> &lt;code>prefix=/mingw64 make -C contrib/subtree install-html&lt;/code> - without the second &lt;code>make&lt;/code> you get a error message about a missing &lt;code>git-subtree.html&lt;/code> file).&lt;/p></description></item><item><title>Making an installer</title><link>https://gitforwindows.org/making-an-installer.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/making-an-installer.html</guid><description>&lt;h1 id="making-a-git-for-windows-installer">Making a Git for Windows installer&lt;/h1>
&lt;h2 id="the-quick-way">The quick way&lt;/h2>
&lt;p>Download the &lt;a href="https://gitforwindows.org/#download-sdk">Git for Windows SDK&lt;/a>, install it and run &lt;code>sdk build installer&lt;/code>.&lt;/p>
&lt;p>If you need to include a Git version built with custom patches, call &lt;code>sdk cd git&lt;/code>, then make sure that it is at the commit you want, then call &lt;code>sdk build git-and-installer&lt;/code>.&lt;/p>
&lt;h2 id="debuggingdeveloping-a-single-installer-wizard-page">Debugging/Developing a single installer &amp;ldquo;wizard page&amp;rdquo;&lt;/h2>
&lt;p>Sometimes the wording needs to be changed, or the layout, or something, in a single page of the installer. To avoid having to build the entire installer (and compressing all of Git for Windows), run &lt;code>sdk cd installer&lt;/code> and run &lt;code>./release.sh -d &amp;lt;page&amp;gt;&lt;/code>. For example, to modify the page where Git&amp;rsquo;s default editor can be configured, run this:&lt;/p></description></item><item><title>Mapping between Git Installer GUI Settings And Command Line Arguments</title><link>https://gitforwindows.org/mapping-between-git-installer-gui-settings-and-command-line-arguments.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/mapping-between-git-installer-gui-settings-and-command-line-arguments.html</guid><description>&lt;p>The following table maps Git GUI Installation settings to corresponding Git Command Line Installation arguments:&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Screenshot&lt;/th>
 &lt;th>Available Arguments&lt;br/>(in sequence)&lt;/th>
 &lt;th>Example Arguments&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;img src="https://github.com/git-for-windows/git/assets/9283914/ca0ae5e8-77ed-4a46-ac4b-b8b2f29e1504" alt="Git 01">&lt;/td>
 &lt;td>&lt;br/>&lt;code>Components=&lt;/code>&lt;br/>&lt;br/>&lt;ul>&lt;li>&lt;code>icons&lt;/code>&lt;/li>&lt;li>&lt;code>ext\reg\shellhere&lt;/code>&lt;/li>&lt;li>&lt;code>gitlfs&lt;/code>&lt;/li>&lt;li>&lt;code>assoc&lt;/code>&lt;/li>&lt;li>&lt;code>assoc_sh&lt;/code>&lt;/li>&lt;li>&lt;code>windowsterminal&lt;/code>&lt;/li>&lt;li>&lt;code>scalar&lt;/code>&lt;/li>&lt;/ul>&lt;br/>&lt;/td>
 &lt;td>&lt;code>Components=gitlfs,scalar&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;img src="https://github.com/git-for-windows/git/assets/9283914/44547320-012f-4a14-9c20-657a67a45813" alt="Git 02">&lt;/td>
 &lt;td>&lt;br/>&lt;code>EditorOption=&lt;/code>&lt;br/>&lt;br/>&lt;ul>&lt;li>&lt;code>Nano&lt;/code>&lt;/li>&lt;li>&lt;code>VIM&lt;/code>&lt;/li>&lt;li>&lt;code>Notepad++&lt;/code>&lt;/li>&lt;li>&lt;code>VisualStudioCode&lt;/code>&lt;/li>&lt;li>&lt;code>VisualStudioCodeInsiders&lt;/code>&lt;/li>&lt;li>&lt;code>SublimeText&lt;/code>&lt;/li>&lt;li>&lt;code>Atom&lt;/code>&lt;/li>&lt;li>&lt;code>VSCodium&lt;/code>&lt;/li>&lt;li>&lt;code>Notepad&lt;/code>&lt;/li>&lt;li>&lt;code>Wordpad&lt;/code>&lt;/li>&lt;li>&lt;code>CustomEditor&lt;/code>&lt;/li>&lt;/ul>&lt;br/>&lt;/td>
 &lt;td>&lt;code>EditorOption=VisualStudioCode&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;img src="https://github.com/git-for-windows/git/assets/9283914/748ecec9-d460-4bb2-bcb7-63cf9f37c882" alt="Git 03">&lt;/td>
 &lt;td>&lt;br/>&lt;code>DefaultBranchOption=&lt;/code>&lt;br/>&lt;br/>&lt;em>{branch name}&lt;/em>&lt;br/>&lt;/td>
 &lt;td>&lt;code>DefaultBranchOption=main&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;img src="https://github.com/git-for-windows/git/assets/9283914/7296a36f-416d-4ab6-9913-c83cfa6f2a06" alt="Git 04">&lt;/td>
 &lt;td>&lt;br/>&lt;code>PathOption=&lt;/code>&lt;br/>&lt;br/>&lt;ul>&lt;li>&lt;code>BashOnly&lt;/code>&lt;/li>&lt;li>&lt;code>Cmd&lt;/code>&lt;/li>&lt;li>&lt;code>CmdTools&lt;/code>&lt;/li>&lt;/ul>&lt;br/>&lt;/td>
 &lt;td>&lt;code>PathOption=Cmd&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;img src="https://github.com/git-for-windows/git/assets/9283914/ed274bde-ab0e-49d5-820e-3bd6fae6f873" alt="Git 05">&lt;/td>
 &lt;td>&lt;br/>&lt;code>SSHOption=&lt;/code>&lt;br/>&lt;br/>&lt;ul>&lt;li>&lt;code>OpenSSH&lt;/code>&lt;/li>&lt;li>&lt;code>ExternalOpenSSH&lt;/code>&lt;/li>&lt;li>&lt;code>Plink&lt;/code>&lt;/li>&lt;/ul>&lt;br/>&lt;/td>
 &lt;td>&lt;code>SSHOption=ExternalOpenSSH&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;img src="https://github.com/git-for-windows/git/assets/9283914/0b5711f9-d1ad-4c64-aae6-0629a0bda235" alt="Git 06">&lt;/td>
 &lt;td>&lt;br/>&lt;code>CurlOption=&lt;/code>&lt;br/>&lt;br/>&lt;ul>&lt;li>&lt;code>OpenSSL&lt;/code>&lt;/li>&lt;li>&lt;code>WinSSL&lt;/code>&lt;/li>&lt;/ul>&lt;br/>&lt;/td>
 &lt;td>&lt;code>CurlOption=WinSSL&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;img src="https://github.com/git-for-windows/git/assets/9283914/d8d5b885-1c26-439b-9dab-ea855f0387ca" alt="Git 07">&lt;/td>
 &lt;td>&lt;br/>&lt;code>CRLFOption=&lt;/code>&lt;br/>&lt;br/>&lt;ul>&lt;li>&lt;code>CRLFAlways&lt;/code>&lt;/li>&lt;li>&lt;code>LFOnly&lt;/code>&lt;/li>&lt;li>&lt;code>CRLFCommitAsIs&lt;/code>&lt;/li>&lt;/ul>&lt;br/>&lt;/td>
 &lt;td>&lt;code>CRLFOption=CRLFAlways&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;img src="https://github.com/git-for-windows/git/assets/9283914/bb676934-eafb-4316-bbfd-877e6eb2b659" alt="Git 08">&lt;/td>
 &lt;td>&lt;br/>&lt;code>BashTerminalOption=&lt;/code>&lt;br/>&lt;br/>&lt;ul>&lt;li>&lt;code>MinTTY&lt;/code>&lt;/li>&lt;li>&lt;code>ConHost&lt;/code>&lt;/li>&lt;/ul>&lt;br/>&lt;/td>
 &lt;td>&lt;code>BashTerminalOption=ConHost&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;img src="https://github.com/git-for-windows/git/assets/9283914/b802d077-650a-4f41-a87f-23e2ff412c66" alt="Git 09">&lt;/td>
 &lt;td>&lt;br/>&lt;code>GitPullBehaviorOption=&lt;/code>&lt;br/>&lt;br/>&lt;ul>&lt;li>&lt;code>Merge&lt;/code>&lt;/li>&lt;li>&lt;code>Rebase&lt;/code>&lt;/li>&lt;li>&lt;code>FFOnly&lt;/code>&lt;/li>&lt;/ul>&lt;br/>&lt;/td>
 &lt;td>&lt;code>GitPullBehaviorOption=Merge&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;img src="https://github.com/git-for-windows/git/assets/9283914/c556c3e1-f9bc-4462-b65e-3d87ff9aac1b" alt="Git 10">&lt;/td>
 &lt;td>&lt;br/>&lt;code>UseCredentialManager=&lt;/code>&lt;br/>&lt;br/>&lt;ul>&lt;li>&lt;code>Enabled&lt;/code>&lt;/li>&lt;li>&lt;code>Disabled&lt;/code>&lt;/li>&lt;li>&lt;code>Core&lt;/code>&lt;/li>&lt;/ul>&lt;br/>&lt;/td>
 &lt;td>&lt;code>UseCredentialManager=Enabled&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;img src="https://github.com/git-for-windows/git/assets/9283914/79864759-a5fa-499b-9a6b-94443b6a9253" alt="Git 11">&lt;/td>
 &lt;td>&lt;br/>&lt;code>PerformanceTweaksFSCache=&lt;/code>&lt;br/>&lt;br/>&lt;ul>&lt;li>&lt;code>Enabled&lt;/code>&lt;/li>&lt;li>&lt;code>Disabled&lt;/code>&lt;/li>&lt;/ul>&lt;br/>&lt;br/>&lt;code>EnableSymlinks=&lt;/code>&lt;br/>&lt;br/>&lt;ul>&lt;li>&lt;code>Auto&lt;/code>&lt;/li>&lt;li>&lt;code>Enabled&lt;/code>&lt;/li>&lt;li>&lt;code>Disabled&lt;/code>&lt;/li>&lt;/ul>&lt;br/>&lt;/td>
 &lt;td>&lt;code>PerformanceTweaksFSCache=Enabled&lt;/code>&lt;br/>&lt;br/>&lt;code>EnableSymlinks=Disabled&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;img src="https://github.com/git-for-windows/git/assets/9283914/7bcdf2cb-2b6e-4a50-8f52-8b22e7df2a3c" alt="Git 12">&lt;/td>
 &lt;td>&lt;br/>&lt;code>EnablePseudoConsoleSupport=&lt;/code>&lt;br/>&lt;br/>&lt;ul>&lt;li>&lt;code>Auto&lt;/code>&lt;/li>&lt;li>&lt;code>Enabled&lt;/code>&lt;/li>&lt;li>&lt;code>Disabled&lt;/code>&lt;/li>&lt;/ul>&lt;br/>&lt;br/>&lt;code>EnableFSMonitor=&lt;/code>&lt;br/>&lt;br/>&lt;ul>&lt;li>&lt;code>Auto&lt;/code>&lt;/li>&lt;li>&lt;code>Enabled&lt;/code>&lt;/li>&lt;li>&lt;code>Disabled&lt;/code>&lt;/li>&lt;/ul>&lt;br/>&lt;/td>
 &lt;td>&lt;code>EnablePseudoConsoleSupport=Disabled&lt;/code>&lt;br/>&lt;br/>&lt;code>EnableFSMonitor=Enabled&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;br/>
&lt;p>For a comprehensive list of Git for Windows Installer command line arguments &lt;a href="./silent-or-unattended-installation.html">see here&lt;/a>.&lt;/p></description></item><item><title>Merge Conflicts Resolving and Remembering them</title><link>https://gitforwindows.org/merge-conflicts-resolving-and-remembering-them.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/merge-conflicts-resolving-and-remembering-them.html</guid><description>&lt;p>Work in Progress as I try and work out how to do this (06-04-2019)..&lt;/p>
&lt;p>When building a new release for Git-for-Windows, the full range of Windows patches the maintainer applies need to be moved (&lt;a href="https://git-scm.com/docs/git-rebase">&lt;code>rebase&lt;/code>&lt;/a>d) from being on top of the old upstream Git, to being on top of the new upstream release.&lt;/p>
&lt;p>There is a &lt;a href="./rebasing-git-for-windows.html">process&lt;/a>, a script and the support of the merging-rebase code, but still there maybe conflicts, old and new, especially if some of the Windows code has been adopted upstream in a different form.&lt;/p></description></item><item><title>MinGit</title><link>https://gitforwindows.org/mingit.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/mingit.html</guid><description>&lt;h1 id="mingit-is-git-for-windows-applications">MinGit is &lt;em>Git for Windows Applications&lt;/em>&lt;/h1>
&lt;h2 id="rationale">Rationale&lt;/h2>
&lt;p>Git for Windows targets end users, and for a long time third-party applications that spawn &lt;code>git.exe&lt;/code> in order to provide Git-specific functionality piggy-backed onto the end-user installation.&lt;/p>
&lt;p>However, for third-party applications it can be quite important to target certain minimum Git versions, e.g. when features such as &lt;code>git reset --stdin&lt;/code> are needed that were introduced only recently.&lt;/p>
&lt;p>Bundling a complete portable Git for such cases may very well be overkill, as the applications that want to call Git usually do not require &lt;em>all&lt;/em> of Git for Windows&amp;rsquo; functionality, &lt;em>especially&lt;/em> not the interactive features including Git GUI and Git Bash.&lt;/p></description></item><item><title>MSYS2 Notes</title><link>https://gitforwindows.org/msys2-notes.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/msys2-notes.html</guid><description>&lt;p>Page for things that pop up while fiddling with MSYS2.&lt;/p>
&lt;h2 id="ps1-script">PS1 script&lt;/h2>
&lt;p>I had to replace &lt;code>PS1=&amp;quot;$PS1&amp;quot;'\n'&lt;/code> with &lt;code>PS1=&amp;quot;$PS1&amp;quot;$'\n'&lt;/code> within the &lt;code>profile&lt;/code> file to get the git prompt working. See also &lt;a href="http://sourceforge.net/p/msys2/tickets/17/">this msys2 ticket page&lt;/a>&lt;/p>
&lt;h2 id="ps1-script-continuation">PS1 Script (continuation)&lt;/h2>
&lt;p>If you have this error (or something alike) with a prompt like this one: &lt;code>\e[0;36m[\e[1;36m\t\e[0m\e[0;36m]\e[0m \e[0;33m\w\e[0m&lt;/code>&lt;strong>&lt;code>$(__git_ps1 ' \e[0;31m(\e[1;31m%s\e[0m\e[0;31m)\e[0m')&lt;/code>&lt;/strong>&lt;code>\n$&lt;/code>, then you will have to replace the &lt;code>$(...)&lt;/code> syntax by backtick (`).&lt;/p>
&lt;p>This PS1 will do the following error:&lt;/p></description></item><item><title>OpenSSH Integration with Pageant</title><link>https://gitforwindows.org/openssh-integration-with-pageant.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/openssh-integration-with-pageant.html</guid><description>&lt;p>For some users, it may be desirable to tie OpenSSH in to the PuTTY authentication agent (Pageant) using &lt;a href="https://github.com/cuviper/ssh-pageant">ssh-pageant&lt;/a>. This is a drop-in replacement for &lt;em>ssh-agent&lt;/em>, which simply builds a connection between OpenSSH and Pageant for key-based authentication. The tool makes it easy to leverage OpenSSH for remote repository access, which tends to be the most reliable choice within the specific context of Git for Windows (Git), without the need to run multiple agents which don&amp;rsquo;t interoperate.&lt;/p></description></item><item><title>Package management</title><link>https://gitforwindows.org/package-management.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/package-management.html</guid><description>&lt;h1 id="git-for-windows-package-management">Git for Windows&amp;rsquo; package management&lt;/h1>
&lt;p>Modern software development relies heavily on a way to manage dependencies, i.e. to keep track of required software libraries and their versions. Examples are &lt;code>apt&lt;/code> for Linux, &lt;code>homebrew&lt;/code> for macOS, &lt;code>maven&lt;/code> for Java and &lt;code>pip&lt;/code> for Python.&lt;/p>
&lt;p>While Git for Windows is based on &lt;a href="https://msys2.github.io/">MSYS2&lt;/a> which bundles the &lt;a href="https://wiki.archlinux.org/index.php/Pacman">Pacman&lt;/a> tool (known from Arch Linux) for dependency management, the &lt;code>pacman.exe&lt;/code> command is only bundled with the Git for Windows SDK, not the normal installer.&lt;/p></description></item><item><title>Performance profiling with Visual Studio</title><link>https://gitforwindows.org/performance-profiling-with-visual-studio.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/performance-profiling-with-visual-studio.html</guid><description>&lt;p>A very powerful method to identify performance bottlenecks is &lt;em>performance profiling&lt;/em>. Visual Studio (including the free-of-cost Community edition) offers convenient tools for that via the &lt;em>Debug&amp;gt;Performance Pro&lt;u>f&lt;/u>iler&amp;hellip;&lt;/em> menu entry.&lt;/p>
&lt;p>&lt;em>This space intentionally left blank for volunteers to fill in walkthroughs with screenshots, and links for further reading&lt;/em>&lt;/p>
&lt;h1 id="analyze-the-performance-of-a-git-command-specified-as-a-command-line">Analyze the performance of a Git command specified as a command-line&lt;/h1>
&lt;ol>
&lt;li>Open the &amp;ldquo;git.exe&amp;rdquo; file via &lt;em>File&amp;gt;Open&lt;/em>&lt;/li>
&lt;li>Specify the arguments and the working directory via &lt;em>Debug&amp;gt;git Properties&lt;/em>&lt;/li>
&lt;li>&lt;em>Debug&amp;gt;Performance Profiler&amp;hellip;&lt;/em>&lt;/li>
&lt;/ol>
&lt;h2 id="analyze-executables-compiled-by-gcc">Analyze executables compiled by GCC&lt;/h2>
&lt;p>Visual Studio obtains the debug information used in the output from &amp;ldquo;.pdb&amp;rdquo; files, but GCC does not generate debug information in that format.&lt;/p></description></item><item><title>Problems specific to 32-bit</title><link>https://gitforwindows.org/problems-specific-to-32-bit.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/problems-specific-to-32-bit.html</guid><description>&lt;h1 id="problems-specific-to-32-bit">Problems specific to 32-bit&lt;/h1>
&lt;h2 id="what-is-the-problem-with-running-git-for-windows-in-32-bit-mode">What is the problem with running Git for Windows in 32-bit mode?&lt;/h2>
&lt;p>Note that typically, there is no problem because the solution described &lt;a href="#adjusting-msys-20dlls-address-range-manually">here&lt;/a> is executed preventively upon installation of Git for Windows.&lt;/p>
&lt;p>The problem only resurfaces if a &lt;code>.dll&lt;/code> has been installed &lt;em>after&lt;/em> Git for Windows&amp;rsquo; installation and only if that &lt;code>.dll&lt;/code> &lt;a href="#background">interferes with the address range hard-coded into the MSYS2 runtime&lt;/a>.&lt;/p>
&lt;p>The simplest solution to fix that problem if it rears its ugly head at all is to switch to the 64-bit version of Git for Windows (the 64-bit address range is so large that MSYS2&amp;rsquo;s runtime virtually never has any run-in with another &lt;code>.dll&lt;/code>).&lt;/p></description></item><item><title>Rebasing Git for Windows</title><link>https://gitforwindows.org/rebasing-git-for-windows.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/rebasing-git-for-windows.html</guid><description>&lt;h1 id="rebasing-git-for-windows-to-a-new-git-version">Rebasing Git for Windows to a new Git version&lt;/h1>
&lt;p>To do a &lt;em>rebase&lt;/em> of the &lt;em>Git for Windows&lt;/em> source onto a new &lt;a href="https://github.com/git/git">upstream&lt;/a> &lt;em>Git&lt;/em> release, follow this guideline.&lt;/p>
&lt;h2 id="assumptions">Assumptions&lt;/h2>
&lt;ol>
&lt;li>You want to &lt;em>rebase&lt;/em> onto a new &lt;a href="https://github.com/git/git">upstream&lt;/a> release tagged as &lt;code>v2.3.4&lt;/code>&lt;/li>
&lt;li>The latest &lt;em>rebase&lt;/em> was done onto a &lt;a href="https://github.com/git/git">upstream&lt;/a> release tagged as &lt;code>v2.3.3&lt;/code>&lt;/li>
&lt;li>the &lt;code>origin/main&lt;/code> below means remote &lt;a href="https://github.com/git-for-windows/git">https://github.com/git-for-windows/git&lt;/a>, its &lt;code>main&lt;/code> branch.
You may have them named differently.&lt;/li>
&lt;/ol>
&lt;h2 id="preconditions">Preconditions&lt;/h2>
&lt;ol>
&lt;li>A working &lt;a href="https://gitforwindows.org/#download-sdk">Git for Windows SDK&lt;/a>.&lt;/li>
&lt;li>A fetched build-extra repository.
&lt;code>cd /usr/src/build-extra&lt;/code>
&lt;code>git fetch&lt;/code>
&lt;code>git checkout main&lt;/code>
(&lt;code>git pull&lt;/code> if your branch is behind the upstream)&lt;/li>
&lt;li>Working directory set to current &lt;em>Git for Windows&lt;/em> source.
&lt;code>cd /usr/src/git&lt;/code>&lt;/li>
&lt;li>Added &lt;a href="https://github.com/git/git">upstream&lt;/a> as a remote.
&lt;code>git remote add git https://github.com/git/git&lt;/code>
&lt;code>git fetch git&lt;/code>&lt;/li>
&lt;/ol>
&lt;h2 id="starting-the-rebase">Starting the &lt;em>rebase&lt;/em>&lt;/h2>
&lt;p>Run the &lt;code>shears.sh&lt;/code> script to build up the actual &lt;em>rebase&lt;/em> script.
&lt;code>/usr/src/build-extra/shears.sh --merging --onto v2.3.4 merging-rebase&lt;/code>
Note: &lt;code>v2.3.4&lt;/code> is a &lt;code>tag&lt;/code> in the remote &lt;code>git&lt;/code>.
See the script if you are testing changes initiated in a local branch of the git upstream.&lt;/p></description></item><item><title>Release Hashes</title><link>https://gitforwindows.org/release-hashes.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/release-hashes.html</guid><description>&lt;p>Release hashes are detailed in:&lt;/p>
&lt;ul>
&lt;li>the ANNOUNCE mail notifications on &lt;a href="mailto:git@vger.kernel.org">the Git mailing list&lt;/a> and&lt;/li>
&lt;li>on the &lt;a href="https://github.com/git-for-windows/git/releases">https://github.com/git-for-windows/git/releases&lt;/a> page.&lt;/li>
&lt;/ul>
&lt;p>The list can be read at &lt;a href="https://lore.kernel.org/git/">https://lore.kernel.org/git/&lt;/a> and joined &lt;a href="git+subscribe@vger.kernel.org">here&lt;/a>.&lt;/p></description></item><item><title>Releasing Git for Windows</title><link>https://gitforwindows.org/releasing-git-for-windows.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/releasing-git-for-windows.html</guid><description>&lt;h1 id="git-for-windows-release-process">Git for Windows&amp;rsquo; release process&lt;/h1>
&lt;p>The release process of Git for Windows is ever-evolving. For now, it consists of these steps:&lt;/p>
&lt;ul>
&lt;li>Making sure that there are no unaddressed issues&lt;/li>
&lt;li>Rebasing Git for Windows&amp;rsquo; patches&lt;/li>
&lt;li>Opening a PR to kick off a PR build (and waiting for it to succeed)&lt;/li>
&lt;li>Kicking off the &lt;code>/git-artifacts&lt;/code> slash command&lt;/li>
&lt;li>Verifying that the resulting installer works&lt;/li>
&lt;li>Kicking off the &lt;code>/release&lt;/code> slash command that publishes the release&lt;/li>
&lt;li>Pushing directly to &lt;code>main&lt;/code> to close the PR and set the stage for the Azure Pipeline (at some stage during the &lt;code>-rc&amp;lt;N&amp;gt;&lt;/code> cycle)&lt;/li>
&lt;/ul>
&lt;p>Note: the hardest part is traditonally preparing &lt;code>-rc0&lt;/code> of every major release.&lt;/p></description></item><item><title>requirements</title><link>https://gitforwindows.org/requirements.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/requirements.html</guid><description>&lt;h1 id="prerequisites">Prerequisites&lt;/h1>
&lt;p>This page lists the prerequisites required to run &lt;a href="https://gitforwindows.org/">Git for Windows&lt;/a>.&lt;/p>
&lt;h2 id="windows-version">Windows version&lt;/h2>
&lt;p>Git for Windows requires Windows 8.1 or later on a 64-bit CPU (x64 or amd64). The last version to support Windows 7, 8, Server 2008 R2 and Server 2012 was &lt;a href="https://github.com/git-for-windows/git/releases/tag/v2.46.2.windows.1">v2.46.2&lt;/a>. The last version to support Windows Vista and Server 2008 was &lt;a href="https://github.com/git-for-windows/git/releases/tag/v2.37.1.windows.1">v2.37.1&lt;/a>. The last version of Git for Windows to support Windows XP and Windows Server 2003 is &lt;a href="https://github.com/git-for-windows/git/releases/tag/v2.10.0.windows.1">v2.10.0&lt;/a>.&lt;/p></description></item><item><title>Running Git's regression tests</title><link>https://gitforwindows.org/running-gits-regression-tests.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/running-gits-regression-tests.html</guid><description>&lt;h1 id="gits-test-suite">Git&amp;rsquo;s test suite&lt;/h1>
&lt;h2 id="running-tests">Running tests&lt;/h2>
&lt;p>Git&amp;rsquo;s source code ships with a lot of &lt;a href="http://en.wikipedia.org/wiki/Regression_testing">regression tests&lt;/a>. This gives us a pretty good indicator of the source code&amp;rsquo;s health: if a regression test starts failing for a topic branch, it is safe to assume that there is some &amp;ldquo;room for improvement&amp;rdquo; in the changes introduced by said topic branch.&lt;/p>
&lt;p>It is a good practice to add a regression test when fixing bugs. Such a test not only illustrates what is going wrong (and lets other developers verify that there is indeed a bug that needs fixing), it also ensures that it is much harder to re-introduce that bug by mistake in the future: the regression tests would sound an alarm.&lt;/p></description></item><item><title>Setting your Core.Editor (e.g. Notepad Plus Plus)</title><link>https://gitforwindows.org/setting-your-core-editor-e-g-notepad-plus-plus-.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/setting-your-core-editor-e-g-notepad-plus-plus-.html</guid><description>&lt;p>Many Windows users are not familiar with vi/vim/emacs style command line terminal editors.
[To quit: type &lt;code>:q&lt;/code> in the bottom bar and press Enter. If you&amp;rsquo;re typing into the file contents, press Esc first.]&lt;/p>
&lt;p>Many users prefer their local Windows graphic editor, such as Notepad++, this note shows how.&lt;/p>
&lt;h1 id="setting-notepad-as-your-coreeditor">Setting Notepad++ as your Core.Editor&lt;/h1>
&lt;p>Notepad++ provides multiple useful options (&lt;a href="https://notepad-plus-plus.org">Npp&lt;/a> &lt;a href="https://notepad-plus-plus.org/online-help/">online help&lt;/a>. Install as required.&lt;/p>
&lt;p>The command&lt;/p>
&lt;p>&lt;code>git config --global core.editor &amp;quot;'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noplugin&lt;/code>&amp;quot;&lt;/p></description></item><item><title>Silent or Unattended Installation</title><link>https://gitforwindows.org/silent-or-unattended-installation.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/silent-or-unattended-installation.html</guid><description>&lt;h2 id="using-command-line-options">Using Command-Line Options&lt;/h2>
&lt;p>It is possible to install Git for Windows silently using the following flags when called from a command-line prompt:&lt;/p>
&lt;pre tabindex="0">&lt;code>Git-&amp;lt;version&amp;gt;-&amp;lt;bitness&amp;gt;.exe /VERYSILENT /NORESTART /NOCANCEL /SP- /CLOSEAPPLICATIONS /RESTARTAPPLICATIONS /COMPONENTS=&amp;#34;icons,ext\reg\shellhere,assoc,assoc_sh&amp;#34;
&lt;/code>&lt;/pre>&lt;h2 id="using-installer-options-from-a-file">Using Installer Options From a File&lt;/h2>
&lt;p>You can also load install parameters from a file with &lt;code>/LOADINF=&amp;quot;filename&amp;quot;&lt;/code>, and you can record parameters to a file using &lt;code>/SAVEINF=&amp;quot;filename&amp;quot;&lt;/code>.&lt;/p>
&lt;p>Example for saving selected options to a file during an interactive run started from the command-line:&lt;/p></description></item><item><title>Site Map</title><link>https://gitforwindows.org/sitemap.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/sitemap.html</guid><description>&lt;h1 id="site-map">Site Map&lt;/h1>
&lt;ul class="page-index">

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 &lt;li>&lt;a href="https://gitforwindows.org/32-bit.html">32-bit&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/adding-regression-tests.html">Adding regression tests&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/auto-launching-ssh-agent-when-git-starts.html">Auto launching ssh agent when git starts&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/backporting-upstream-git-patches.html">Backporting upstream Git patches&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/building-git.html">Building Git&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/building-msys2-runtime.html">Building msys2 runtime&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/building-new-package-versions.html">Building new package versions&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/choosing-the-default-behavior-of-git-pull.html">Choosing the default behavior of `git pull`&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/compiling-git-with-visual-studio.html">Compiling Git with Visual Studio&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/contact.html">Contact&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/continuous-integration.html">Continuous Integration (CI)&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/debugging-git.html">Debugging Git&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/diagnosing-performance-issues.html">Diagnosing performance issues&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/faq.html">FAQ&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/file-names-branch-names-path-quotation-executable-bit-and-file-modes-core-filemode.html">File names, Branch names, Path quotation, Executable bit and file modes, core.FileMode&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/git-cannot-create-a-file-or-directory-with-a-long-path.html">Git cannot create a file or directory with a long path&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/git-wrapper.html">Git wrapper&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/good-commits.html">Good commits&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/governance-model.html">governance-model&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/how-to-participate.html">How to participate&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/install-inside-msys2-proper.html">Install inside MSYS2 proper&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/install-or-update-inside-msys2-cygwin-or-git-for-windows-itself.html">Install or update inside MSYS2, Cygwin or Git for windows itself&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/issue-reporting-guidelines.html">Issue reporting guidelines&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/making-a-portable-git.html">Making a portable Git&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/making-an-installer.html">Making an installer&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/mapping-between-git-installer-gui-settings-and-command-line-arguments.html">Mapping between Git Installer GUI Settings And Command Line Arguments&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/merge-conflicts-resolving-and-remembering-them.html">Merge Conflicts Resolving and Remembering them&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/mingit.html">MinGit&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/msys2-notes.html">MSYS2 Notes&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/openssh-integration-with-pageant.html">OpenSSH Integration with Pageant&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/package-management.html">Package management&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/performance-profiling-with-visual-studio.html">Performance profiling with Visual Studio&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/problems-specific-to-32-bit.html">Problems specific to 32-bit&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/rebasing-git-for-windows.html">Rebasing Git for Windows&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/release-hashes.html">Release Hashes&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/releasing-git-for-windows.html">Releasing Git for Windows&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/requirements.html">requirements&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/running-gits-regression-tests.html">Running Git&amp;#39;s regression tests&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/setting-your-core-editor-e-g-notepad-plus-plus-.html">Setting your Core.Editor (e.g. Notepad Plus Plus)&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/silent-or-unattended-installation.html">Silent or Unattended Installation&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/sitemap.html">Site Map&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/snapshot-builds.html">Snapshot builds&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/sourcetrail-code-viewer-and-linkage-to-visual-studio-for-git.html">Sourcetrail code viewer and linkage to Visual Studio, for Git&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/symbolic-links.html">Symbolic Links&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/technical-overview.html">Technical overview&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/the-difference-between-mingw-and-msys2.html">The difference between MINGW and MSYS2&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/updating-your-sdk.html">Updating your SDK&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/upgrading-the-perl-component-to-a-new-version.html">Upgrading the `perl` component to a new version&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/using-an-external-openssh-client.html">Using an external OpenSSH client&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/using-sshd-to-host-a-git-server.html">Using sshd to host a git server&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/vagrant.html">Vagrant&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/versioning.html">Versioning&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/visual-studio-and-msvc-compilation.html">Visual Studio and MSVC compilation&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/why-git-for-windows-does-not-work-with-mandatory-address-space-layout-randomization.html">Why Git for Windows does not work with Mandatory Address Space Layout Randomization&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/wiki.html">Wiki&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/windows-vs-linux-fork-and-exec-semantics.html">Windows-vs-Linux-fork()/exec()-semantics&lt;/a>&lt;/li>
 

 
 &lt;li>&lt;a href="https://gitforwindows.org/zip-archives-extracting-the-released-archives.html">Zip Archives extracting the released archives&lt;/a>&lt;/li>
 

&lt;/ul></description></item><item><title>Snapshot builds</title><link>https://gitforwindows.org/snapshot-builds.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/snapshot-builds.html</guid><description>&lt;p>Git for Windows&amp;rsquo; &lt;code>main&lt;/code> branch is kept in an always-releasable state as much as possible.&lt;/p>
&lt;p>For example, in case that a critical bug is discovered that really needs to be fixed within the same day, Git for Windows does not have a maintenance branch (or, &amp;ldquo;stable&amp;rdquo; branch). Such a fix would be applied on top of &lt;code>main&lt;/code> and a new version would be created from that state.&lt;/p>
&lt;p>To allow users to help verifying that &amp;ldquo;always-releasable state&amp;rdquo;, as well as to allow users to verify fixes introduced via PRs, Git for Windows builds &amp;ldquo;snapshot&amp;rdquo; releases (published &lt;a href="https://gitforwindows.org/git-snapshots/">here&lt;/a>) whenever the &lt;code>main&lt;/code> branch advances.&lt;/p></description></item><item><title>Sourcetrail code viewer and linkage to Visual Studio, for Git</title><link>https://gitforwindows.org/sourcetrail-code-viewer-and-linkage-to-visual-studio-for-git.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/sourcetrail-code-viewer-and-linkage-to-visual-studio-for-git.html</guid><description>&lt;p>&lt;a href="https://www.sourcetrail.com">Sourcetrail&lt;/a> is an interactive source explorer that simplifies navigation in existing source code. It is &lt;a href="https://www.sourcetrail.com/blog/open_source/">now open source&lt;/a>. You can support them on Patreon.&lt;/p>
&lt;p>This note is a quick start to setting up a Sourcetrail project for exploring the Git source code in conjunction with Visual Studio. Source trail is configurable and some parameter need to be set on initial project setup.&lt;/p>
&lt;ol>
&lt;li>Git-for-Windows is available as a Visual Studio build in the &lt;code>main&lt;/code> &lt;a href="https://github.com/git-for-windows/git/tree/main">branch&lt;/a>. Visual Studio will detect the &lt;code>CMakeLists.txt&lt;/code> file in &lt;code>\contrib\buildsystems&lt;/code> to build the project. See that file for instructions on generating the &lt;code>.sln&lt;/code> and &lt;code>vcproj&lt;/code> files needed for Sourcetrail and other VS Extensions. The VS project comprises ~19 sub-projects including &lt;code>ALL BUILD&lt;/code> and &lt;code>libgit&lt;/code>.&lt;/li>
&lt;li>This was tested with the free VS2019 community edition.&lt;/li>
&lt;li>Build the project in Visual Studio so that it&amp;rsquo;s &lt;code>vcpkg&lt;/code> dependencies are downloaded and compiled (may take some time).&lt;/li>
&lt;li>Download and install the Sourcetrail software. Check the &lt;a href="https://www.sourcetrail.com/documentation/">documentation&lt;/a>, especially the &lt;a href="https://youtu.be/7fguPwKR_7Y">intro video&lt;/a>.&lt;/li>
&lt;li>Download and install the &lt;a href="https://marketplace.visualstudio.com/items?itemName=vs-publisher-1208751.SourcetrailExtension">VS Sourcetrail Extension&lt;/a>.&lt;/li>
&lt;/ol>
&lt;p>For Git, Sourcetrail will need it&amp;rsquo;s pre-processor dependencies which are numerous, so let&amp;rsquo;s extract them from Visual Studio. We need to collect the main preprocessor directives from &lt;code>libgit&lt;/code> (which everything depends on) and &lt;code>git&lt;/code>.&lt;/p></description></item><item><title>Symbolic Links</title><link>https://gitforwindows.org/symbolic-links.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/symbolic-links.html</guid><description>&lt;h1 id="git-for-windows-vs-symbolic-links">Git for Windows vs symbolic links&lt;/h1>
&lt;p>Short version: there is no exact equivalent for POSIX symlinks on Windows, and the closest thing is unavailable for non-admins by default unless Developer Mode is enabled and a relatively recent Windows 10 version is used. Therefore, symlink emulation support is only turned on by default when that scenario is detected. Support can be enabled by the user, via the &lt;code>core.symlinks=true&lt;/code> config setting.&lt;/p>
&lt;h2 id="background">Background&lt;/h2>
&lt;p>Starting with Windows Vista, there is support for symbolic links. These are not your grandfather&amp;rsquo;s Unix symbolic links; they differ in quite a few ways:&lt;/p></description></item><item><title>Technical overview</title><link>https://gitforwindows.org/technical-overview.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/technical-overview.html</guid><description>&lt;p>Git for Windows is essentially a subset of &lt;a href="https://msys2.github.io/">MSYS2&lt;/a> with a defined set of installed packages of which a subset is included in the installer.&lt;/p>
&lt;p>The process to build an instance of the Git for Windows installer is made easier with the &lt;code>Git for Windows SDK&lt;/code>. Basically, the steps are as follows:&lt;/p>
&lt;ol>
&lt;li>Download and install the SDK, which installs the sources for &lt;code>git&lt;/code>, additional msys and mingw packages, and helpers to build the installer. It also provides the &lt;code>Git for Windows SDK&lt;/code> MSys shell&lt;/li>
&lt;li>[optional] Hack in the changes you want and make these changes available to the installer.&lt;/li>
&lt;li>Call the right helper tools to build the package you want.&lt;/li>
&lt;/ol>
&lt;h2 id="installing-the-sdk">Installing the SDK&lt;/h2>
&lt;p>Download the &lt;a href="https://gitforwindows.org/#download-sdk">SDK&lt;/a> and run it (using &amp;ldquo;Run as Administrator&amp;rdquo;). You will end up with a console window running the &lt;code>Git for Windows SDK&lt;/code> shell, which you can use for the next steps. You need to fetch the latest version of the Git sources - just run the command &lt;code>sdk init git&lt;/code>. After that, if you just want to build an installer from the latest development, you are ready to go.&lt;/p></description></item><item><title>The difference between MINGW and MSYS2</title><link>https://gitforwindows.org/the-difference-between-mingw-and-msys2.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/the-difference-between-mingw-and-msys2.html</guid><description>&lt;h2 id="tldr">tl;dr&lt;/h2>
&lt;p>MINGW refers to executables that are compiled using the MINGW GCC Compiler and target the Win32 API. MSYS2 refers to executables that are compiled by MSYS2 GCC Compiler and make use of a POSIX emulation layer.&lt;/p>
&lt;h2 id="background">Background&lt;/h2>
&lt;p>First of all, it needs to be noted that many parts of Git are not written in portable C; Git relies on a POSIX shell and Perl to be available instead.&lt;/p>
&lt;h2 id="git-for-windows-1x-mingw-and-msys">Git for Windows 1.x (MINGW and MSys)&lt;/h2>
&lt;p>To support the scripts, Git for Windows has to ship a minimal POSIX emulation layer with Bash and Perl thrown in, and when the Git for Windows effort started in August 2007, it used MSys, a stripped down version of Cygwin. Consequently, the original name of the project was &amp;ldquo;msysGit&amp;rdquo; (which, sadly, caused a &lt;em>lot&lt;/em> of confusion because few Windows users know about MSys, and even less care).&lt;/p></description></item><item><title>Updating your SDK</title><link>https://gitforwindows.org/updating-your-sdk.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/updating-your-sdk.html</guid><description>&lt;h2 id="installing-the-sdk">Installing the SDK&lt;/h2>
&lt;p>The &lt;a href="https://github.com/git-for-windows/build-extra/releases/latest">Git for Windows SDK release&lt;/a> is a self extracting and auto executing 7-zip archive that clones the latest version of files in &lt;a href="https://github.com/git-for-windows/git-sdk-64">Git for Windows SDK 64 repository&lt;/a> using a temporary bundled git. For the &lt;a href="https://github.com/git-for-windows/git-sdk-32">32 bit version&lt;/a> it also performs a run time optimisation on cloned DLLs (rebase).&lt;/p>
&lt;p>This was previously called the &amp;rsquo;net installer&amp;rsquo;, see below. It provides everything required to bootstrap a development environment, even if no git is available (or an unstable one is being worked on).&lt;/p></description></item><item><title>Upgrading the `perl` component to a new version</title><link>https://gitforwindows.org/upgrading-the-perl-component-to-a-new-version.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/upgrading-the-perl-component-to-a-new-version.html</guid><description>&lt;p>One of the many components included in Git for Windows&amp;rsquo; SDK is the &lt;code>perl&lt;/code> package. Part of its components are included in Git for Windows&amp;rsquo; installer and Portable Git versions, to allow for running Perl scripts. The two most prominent Perl scripts in Git for Windows are, of course, &lt;code>git svn&lt;/code> and &lt;code>git send-email&lt;/code>.&lt;/p>
&lt;p>Upgrading to a new Perl version is unfortunately a bit more involved than only following the advice in &lt;a href="./building-new-package-versions.html">Building new package versions&lt;/a>. In addition to adjusting the patches applied via the &lt;code>PKGBUILD&lt;/code> script, the major problem with Perl is that its DLL embeds the Perl version in its file name.&lt;/p></description></item><item><title>Using an external OpenSSH client</title><link>https://gitforwindows.org/using-an-external-openssh-client.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/using-an-external-openssh-client.html</guid><description>&lt;h2 id="openssh-on-windows-10">OpenSSH on Windows 10&lt;/h2>
&lt;p>Modern versions of Windows and Windows Server come with &lt;a href="https://www.openssh.com/">OpenSSH&lt;/a> installed, and available on the system PATH. By default, the OpenSSH binaries are located in &lt;code>C:\WINDOWS\System32\OpenSSH\&lt;/code>.&lt;/p>
&lt;p>The &lt;a href="https://man.openbsd.org/ssh-agent.1">&lt;code>ssh-agent&lt;/code>&lt;/a> is also implemented as a &lt;a href="https://docs.microsoft.com/en-us/windows/win32/services/services">Windows service&lt;/a>, allowing it to be run automatically, during boot or login, and so on.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>NOTE:&lt;/strong> By default the &lt;code>ssh-agent&lt;/code> service is &lt;strong>disabled&lt;/strong>, and if its use required — to manage your private keys, for instance — it will need to be explicitly enabled, and then started (or configured to start as necessary).&lt;/p></description></item><item><title>Using sshd to host a git server</title><link>https://gitforwindows.org/using-sshd-to-host-a-git-server.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/using-sshd-to-host-a-git-server.html</guid><description>&lt;p>Everything you need to host a git server on Windows is included with Git for Windows.
In these instructions it is assumed that Git for Windows is installed at &lt;code>%GIT_HOME%&lt;/code> and that you have &lt;code>%GIT_HOME%\cmd&lt;/code> in your path on both client and server machines.&lt;/p>
&lt;h3 id="configure-sshd">Configure sshd&lt;/h3>
&lt;p>You need to create a key pair within &lt;code>%GIT_HOME%\etc\ssh&lt;/code> for sshd to use as the server identity, e.g. &lt;code>ssh_host_rsa_key&lt;/code> and &lt;code>ssh_host_rsa_key.pub&lt;/code> files.&lt;/p>
&lt;p>Here is a good description of how to create the key pair: &lt;a href="http://www.geekride.com/how-to-generate-ssh-host-keys/">http://www.geekride.com/how-to-generate-ssh-host-keys/&lt;/a>&lt;/p></description></item><item><title>Vagrant</title><link>https://gitforwindows.org/vagrant.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/vagrant.html</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>&lt;a href="https://www.vagrantup.com/">Vagrant&lt;/a> is a modern way to define the requirements of a project. In the case of &lt;a href="https://gitforwindows.org/">Git for Windows&lt;/a>, it allows us to set up a minimal virtual Linux machine that makes it easy to run the same revision of Git on Windows as well as on Linux without much effort.&lt;/p>
&lt;p>&lt;strong>Note&lt;/strong>: while Vagrant makes things easy, quite a bit of bandwidth is required for the setup (roughly a gigabyte will be downloaded in total).&lt;/p></description></item><item><title>Versioning</title><link>https://gitforwindows.org/versioning.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/versioning.html</guid><description>&lt;p>Git for Windows is a fork of Git, and therefore follows Git&amp;rsquo;s versions. Therefore, whenever a new Git version comes out, we release a new Git for Windows version whose version number is derived from Git&amp;rsquo;s. Example: short after &lt;a href="https://github.com/git/git/blob/v2.29.2/Documentation/RelNotes/2.29.2.txt">Git v2.29.0&lt;/a> was released, &lt;a href="https://github.com/git-for-windows/git/releases/tag/v2.29.2.windows.1">Git for Windows v2.29.0&lt;/a> was released.&lt;/p>
&lt;p>Sometimes, Git for Windows needs to release intermediate versions that do not follow a release by the Git project. For example, in November 2020 a new Git LFS version was released that fixed a critical security bug. Since Git for Windows ships with Git LFS included and enabled by default, we had to quickly release a new Git for Windows version, too. We called the corresponding tag &lt;a href="https://github.com/git-for-windows/git/releases/tag/v2.29.2.windows.2">&lt;code>v2.29.2.windows.2&lt;/code>&lt;/a> and the version &amp;ldquo;v2.29.0(2)&amp;rdquo; (the first part of the version still indicates the upstream Git version, and the number in parentheses indicates the iteration of Git for Windows on top of that, and that number is identical to the suffix of the tag name).&lt;/p></description></item><item><title>Visual Studio and MSVC compilation</title><link>https://gitforwindows.org/visual-studio-and-msvc-compilation.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/visual-studio-and-msvc-compilation.html</guid><description>&lt;p>This page curates tidbits regarding the use of Microsoft tools when editing or creating a personal version of Git.&lt;/p>
&lt;p>You can comple Git using the MSVC compiler, or create a Visual Studio project for Git.&lt;/p>
&lt;p>As Git upstream develops, the MSVC and VS projects can get left behind, so this page is to help folk keep up to date, keep testing, reporting breakages, and hopefully offering fixes or at least a bit of analysis using their favourite tool (you&amp;rsquo;re here, so it must be..)&lt;/p></description></item><item><title>Why Git for Windows does not work with Mandatory Address Space Layout Randomization</title><link>https://gitforwindows.org/why-git-for-windows-does-not-work-with-mandatory-address-space-layout-randomization.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/why-git-for-windows-does-not-work-with-mandatory-address-space-layout-randomization.html</guid><description>&lt;p>A common source for exploits has been to cause buffer overflows. When executables are loaded to the same address range every time they are launched, such buffer overflows can rely on encountering the same scenario every time, which makes it easier to exploit them.&lt;/p>
&lt;p>To remedy that, &lt;a href="https://msrc-blog.microsoft.com/2013/12/11/software-defense-mitigating-common-exploitation-techniques/">Address Space Layout Randomization (ASLR)&lt;/a> has been invented. Essentially, it causes executables and dynamic libraries to be loaded into somewhat random memory locations, making the common buffer overflows much harder to exploit. There is even an option to require all programs to use ASLR, whether the executables indicate that they want that or not: &lt;a href="https://msrc-blog.microsoft.com/2017/11/21/clarifying-the-behavior-of-mandatory-aslr/">Mandatory ASLR&lt;/a>.&lt;/p></description></item><item><title>Wiki</title><link>https://gitforwindows.org/wiki.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/wiki.html</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>&lt;em>Git for Windows&lt;/em> originally had a wiki, meant for more technical information than was presented on &lt;a href="https://gitforwindows.org/">its home page&lt;/a>. To prevent vandalism from going unnoticed for weeks, that wiki had to be shut down. It is still possible to edit these pages, though, via Pull Request in &lt;a href="https://github.com/git-for-windows/git-for-windows.github.io">the repository&lt;/a>. See also &lt;a href="./how-to-participate.html">the documentation how you can contribute&lt;/a>.&lt;/p>
&lt;h2 id="about">About&lt;/h2>
&lt;p>&lt;em>Git for Windows&lt;/em> is very different from &lt;em>Git&lt;/em> in one very important respect: As Windows does not provide the &lt;em>POSIX&lt;/em> infrastructure Git expects, Git for Windows always had to ship with much more than any other Git distribution: provide a &lt;code>bash&lt;/code>, a &lt;code>perl&lt;/code>, many &lt;em>POSIX&lt;/em> tools such as &lt;code>sed&lt;/code>, &lt;code>awk&lt;/code>, &lt;code>tr&lt;/code>, etc.&lt;/p></description></item><item><title>Windows-vs-Linux-fork()/exec()-semantics</title><link>https://gitforwindows.org/windows-vs-linux-fork-and-exec-semantics.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/windows-vs-linux-fork-and-exec-semantics.html</guid><description>&lt;h2 id="tldr">TL;DR&lt;/h2>
&lt;p>Traditionally, you needed to make 2 separate calls to create new process in Linux: &lt;a href="http://man7.org/linux/man-pages/man2/fork.2.html">&lt;code>fork()&lt;/code>&lt;/a> and then &lt;a href="http://man7.org/linux/man-pages/man3/exec.3.html">&lt;code>exec()&lt;/code>&lt;/a>. Windows has a different way, using a single call (&lt;a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx">&lt;code>CreateProcess()&lt;/code>&lt;/a>), and doesn&amp;rsquo;t support &lt;code>fork()&lt;/code>. Software originally written for Linux has to use an emulated (way slower and somewhat imperfect) &lt;code>fork()&lt;/code> to run on Windows. If this software creates a lot of processes during its normal workload, it will then run noticeably slower on Windows than on Linux.&lt;/p></description></item><item><title>Zip Archives extracting the released archives</title><link>https://gitforwindows.org/zip-archives-extracting-the-released-archives.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gitforwindows.org/zip-archives-extracting-the-released-archives.html</guid><description>&lt;p>The self-extracting 7z archives that are currently released (e.g. for the portable version) can easily be installed in a headless manner using the extraction options.&lt;/p>
&lt;p>The self-extracting 7z archives are far more compact than regular .zip archives as the compaction is done across the whole content, rather than file by file, which would make .zip files inconveniently large.&lt;/p>
&lt;p>For a quiet extraction of the archive from the command line:&lt;/p>
&lt;pre tabindex="0">&lt;code>&amp;gt; .\PortableGit-2.11.0-64-bit.7z.exe -y -gm2 -InstallPath=&amp;#34;C:\\use\\double\\backslashes&amp;#34;
&lt;/code>&lt;/pre>&lt;p>We use the old .sfx component that used to be hosted on &lt;a href="http://7zsfx.info">http://7zsfx.info&lt;/a>. This provides more options for a fully quiet extraction - as shown, in this case:&lt;/p></description></item></channel></rss>