Build scripts and customizations for creating the Git Shell environment included in GitHub Desktop
Clone or download
#19 Compare This branch is 72 commits ahead, 995 commits behind git-for-windows:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
7-Zip portable: use statically-linked SFX Apr 5, 2017
archive Quote the path properly when making the portable archive Dec 14, 2015
git-extra git-extra: new version Aug 22, 2017
git-for-windows-keyring Ignore a couple more generated files Jun 26, 2017
git-shell tweak the output destination Aug 23, 2017
git-tfs corrected package maintainer after initial copy-pasta problem Oct 7, 2015
github-extra i don't think we need this any more Aug 23, 2017
installer Merge branch 'ensure-uptodate-dll-copies' Aug 22, 2017
mingit mingit: allow to build BusyBox-based versions Aug 5, 2017
mingw-w64-cv2pdb Ignore a couple more generated files Jun 26, 2017
mingw-w64-git-credential-manager Upgrade mingw-w64-git-credential-manager to 1.12.0 Aug 3, 2017
mingw-w64-git-lfs Fix line endings Aug 18, 2017
msi msi: respect user's choice of terminal emulator Jun 21, 2016
nuget
portable Merge remote-tracking branch 'git-for-windows/master' Aug 23, 2017
sdk-installer sdk-installer: shallow clone the git source Aug 4, 2017
.gitattributes Mark remaining shell scripts as LF-only May 2, 2017
.gitignore tweak ignore files Aug 23, 2017
LICENSE.txt
Makefile installer: switch to using edit-git-bash.exe Sep 1, 2016
README.md Merge remote-tracking branch 'origin/master' into update-tooling Apr 13, 2016
ReleaseNotes.css Move ReleaseNotes.{css,md} and update scripts May 23, 2016
ReleaseNotes.md
apply-from-public-inbox.sh apply-from-public-inbox: accept thread URLs, too Mar 27, 2017
commit-msys2.sh commit-msys2.sh: make sure to keep line endings intact Nov 14, 2016
download-stats.sh download-stats: new Git for Windows version Aug 10, 2017
edit-git-bash.c Add debug output to edit-git-bash Jun 19, 2016
get-sources.sh get-sources: work around incorrectly-recorded cURL pkgrel Aug 10, 2017
git-for-windows.svg Add the Git for Windows icon Mar 23, 2015
git-for-windows.xcf Add 48x48 and 24x24 versions of the Got for Windows icon Mar 28, 2015
git.ico msi: move git.ico so all installers can access it May 23, 2016
gpl-2.0.rtf innosetup: move GPL license RTF to build-extra May 23, 2016
install-custom-packages.sh force is bad Oct 26, 2015
make-file-list.sh no git-lfs bundled in the box Aug 23, 2017
package-git-shell.sh split this script into two distinct tasks Oct 6, 2015
pacman-helper.sh pacman-helper: bring the big hammer against those timeout issues Aug 9, 2017
please.sh please.sh rebase: allow --jump again ;-) Aug 22, 2017
post-install.bat Mark scripts as executable Sep 28, 2015
render-release-notes.sh render-release-notes: accept -p as a shortcut for --preview Jun 15, 2016
send-to-virus-total.sh Add a helper to submit files or URLs to VirusTotal Oct 7, 2015
shears.sh shears: allow overriding the editor via GIT_EDITOR Jul 3, 2017
update-upstream-packages.sh split upstream packages and local packages apart Oct 26, 2015
upload-to-github.sh upload-to-github: fix release URL to edit at the end Oct 20, 2015
wingit-snapshot-helper.sh wingit-snapshot-helper add-snapshot: include MinGit if available Apr 13, 2017

README.md

Build environment for Git for Windows

This is Git for Windows SDK, the build environment for Git for Windows.

The easiest way to install Git for Windows SDK is via the Git SDK installer. This installer will clone our repositories, including all the necessary components to build Git for Windows, and perform an initial build. It will also install a shortcut to the Git SDK Bash on the desktop.

Git Shell

This is a tailored build environment for creating the Git Shell tools in GitHub for Windows. Don't try and install these releases by hand - either grab one of the vanilla Git for Windows releases or install GitHub for Windows.

Creating a Release

You need to have the 32-bit Git SDK installed on your machine. Grab it from here.

Once you've installed that (it'll take a while to download and bootstrap the environment), this is all you need to run:

git clone https://github.com/github/ghfw-build-extra.git cd ghfw-build-extra ./update-git-shell.sh ./package-git-shell.sh

We add a couple of things to the default Git for Windows SDK:

  • git-tfs - support for git tfs in the box
  • github-extra - configuration customizations

Components of the Git for Windows SDK

The build environment brings all the necessary parts required to build a Git for Windows installer, or a portable Git for Windows ("portable" == "USB drive edition", i.e. you can run it without installing, from wherever it was unpacked).

Git for Windows

The most important part of Git for Windows is Git, obviously. The Git for Windows project maintains a friendly fork of the "upstream" Git project. The idea is that the Git for Windows repository serves as a test bed to develop patches and patch series that are specific to the Windows port, and once the patches stabilized, they are submitted upstream.

MSYS2

Git is not a monolithic executable, but consists of a couple of executables written in C, a couple of Bash scripts, a couple of Perl scripts, and a couple of Tcl/Tk scripts. Some parts (not supported by Git for Windows yet) are written in other script languages, still.

To support those scripts, Git for Windows uses MSYS2, a project providing a minimal POSIX emulation layer (based on Cygwin), a package management system (named "Pacman", borrowed from Arch Linux) and a number of packages that are kept up-to-date by an active team of maintainers, including Bash, Perl, Subversion, etc.

The difference between MSYS2 and MinGW

MSYS2 refers to the libraries and programs that use the POSIX emulation layer ("msys2 runtime", derived from Cygwin's cygwin1.dll). It is very easy to port libraries and programs from Unix/Linux because most of the POSIX semantics is emulated reasonably well, for example the fork() function. Bash and Perl are examples of MSYS2 programs.

MinGW refers to libraries and programs that are compiled using GNU tools but do not require any POSIX semantics, instead relying on the standard Win32 API and the C runtime library. MinGW stands for "Minimal GNU for Windows". Examples: cURL (a library to talk to remote servers via HTTP(S), (S)FTP, etc), emacs, Inkscape, etc

The POSIX emulation layer of MSYS2 binaries is convenient, but comes at a cost: Typically, MSYS2 programs are noticably slower than their MinGW counterparts (if there are such counterparts). As a consequence, the Git for Windows project tries to provide as many components as possible as MinGW binaries.

MinGW packages

The MinGW packages are built from the MINGW-packages repository which can be initialized in the Git SDK Bash via

cd /usr/src/MINGW-packages
git fetch
git checkout master

The packages inside the /usr/src/MINGW-packages/ directory can then be built by executing makepkg-mingw -s in the appropriate subdirectory.

MinGW packages can be built for both i686 and x86_64 architectures at the same time by making sure that both toolchains are installed (pacman -Sy mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain) before running makepkg-mingw.

MSYS2 packages

The MSYS2 packages are built from the MSYS2-packages repository which can be initialized in the Git SDK Bash via

cd /usr/src/MSYS2-packages
git fetch
git checkout master

To build the packages inside the /usr/src/MSYS2-packages/ directory, the user has to launch a special shell by double-clicking the msys2_shell.bat script in the top-level directory of the Git SDK, switch the working directory to the appropriate subdirectory of /usr/src/MSYS2-packages/ and then execute makepkg -s. Before the first MSYS2 package is built, the prerequisite development packages have to be installed by executing pacman -Sy base-devel binutils.

Installer generators

The Git for Windows project aims to provide three different types of installers:

  • Git for Windows for end users. The subdirectory installer/ contains the files to generate this installer.
  • Portable Git for Windows for end users ("USB drive edition"). This installer is actually a self-extracting .7z archive, and can be generated using the files in portable/.
  • The Git for Windows SDK for Git for Windows contributors. This is a complete development environment to build Git for Windows, including Git, Bash, cURL, etc (including these three installers, of course). The files to generate this installer live in sdk-installer/.

Support scripts/files

The build-extra repository is also the home of other resources necessary to develop and maintain Git for Windows. For example, it contains the Git garden shears that help with updating Git for Windows' source code whenever new upstream Git versions are released ("merging rebase").