To show how git can be used to patch binary installations I wrote up a small program that contains a piece of 'logic' and a configurable message at wolfc/junk-patch-dist · GitHub.


Using the junk-patch repository I created 4 binary distributions:



The 4 distributions I put into the wolfc/junk-patch-dist · GitHub repository.


Note that the 1.1 merge commit was made using all one-off patches together:

git merge --no-commit -s ours p1 p2

Care should be taken that all one-off patches are actually merged together.

The Normal Installation


Now I mimic what might have happened during the original installation:

  1. Unzip
  2. Modify conf/patch/logic/
  3. Overwrite logic.jar with the one from p1 (support patch)


Effectively I'm now at 1.0-p1 with my own configuration, which I can verify with:

$ java -jar main.jar Mucker


Release 1.1


Now I would like to do an in-place upgrade to 1.1. Within the "dist-1.0-SNAPSHOT" directory I should do the following:

$ git init
$ git add .
$ git commit

This puts my entire installation in the master branch.


Now sync it with 1.0-p1

$ git remote add dist
$ git fetch dist
$ git rebase dist/p1

Observe the conflict via:

$ git diff

This should show the change you made in the previous chapter.


Now the tricky bit is to resolve the conflict using your favourite conflict resolving tools (e.g. vim).


After that continue:

$ git add conf/patconf/patch/logic/
$ git rebase --continue


You should now be on the track from version 1.0 through one-off patch #1 into your own setup.


The final step is rebasing it onto version 1.1:

$ git rebase 1.1


Just to show what will happen (and to make it an interesting exercise) version 1.1 contains an update of the configuration file as well. So resolve that conflict and you are on version 1.1.




This is just a small program, but I reckon it should also be doable with an EAP (/ WildFly / AS) installation.