How and when does Git for Windows get released
We try to follow the git release schedule. When a core msysGit contributor reads that there is a new release, we try to update Git for Windows and incorporate changes from git.git.
The procedure can be outlined as follows:
git remote add junio https://github.com/git/git.git
git remote update junio origin
git fetch junio --tags
git checkout master
git pull origin master
git checkout -b tentative-foo
git branch -u origin/master
/share/msysgit/merging-rebase.sh foo # use --dry-run for testing
Here foo is a tag from the junio remote.
Once all conflicts are resolved, commit the changes.
We then run the tests. To get a compact output it helps to use the prove framework. So configure this by editing the /git/config.mak file as follows:
DEFAULT_TEST_TARGET=prove
GIT_PROVE_OPTS=--timer --jobs 16
With this config in place, running make test
runs the git tests under the prove
test reporting aggregator. Once the tests complete, it will produce a simplified report of those tests that failed at the end. Typically, there are one or two failures which we try to investigate, or send a message to the msysGit mailing list mentioning which tests need to be shown some love.
Once the person starting the process (we are very loose on procedures, basically the first person having time, the others realize from "git fetch"ing that the process was started) is reasonably happy with the test suite, he or she makes the packages.
cd /
version=W.X.Y
git_tag=v$version.msysgit.Z
msysgit_tag=$version-preview`date +"%Y%m%d"`
# Tag /git
git tag -a -m "Git $version" $git_tag git
# Commit the submodules
git commit -m "Commit submodule in preparation of $version" git doc/git/html src/git-cheetah
Inspiration for editing the release notes can be found by studying the log output of the submodules and /. For /git one can also try the following snippet which works better with our merging-rebase approach:
git log --no-merges --author-date-order --decorate --date=short --format="%ad %h %s" --abbrev-commit HEAD
This shows our non-merge commits in author date order. Every commit after the date of our last release is new and should be noted in the release notes. The date of our last release can be found with
cd /git && git show `git tag | grep msysgit | tail -n1`
Edit release notes
wordpad /share/WinGit/ReleaseNotes.rtf
Build the GfW installer
/share/WinGit/release.sh $msysgit_tag
/share/WinGit/portable-release.sh $msysgit_tag
/share/msysGit/net/release.sh $msysgit_tag
Push everything to the remote (this might differ for maintenance branches)
git push
git push origin $msysgit_tag
cd /git
git push
git push origin $git_tag
- Upload the installers either via webinterface or /bin/upload-to-github.sh
- Write announcement mail to the msysgit and git mailing list
- Change download links on msysgit.github.io
Fetch yourself something nice to drink as you should reward yourself ;-)