Managing Xen Patches with Git

From Xen
Revision as of 13:40, 7 August 2019 by Lars.kurth (talk | contribs)

This document assumes that you are familiar with the following documents

It lays out basic examples and best practice of how to use Git to manage Xen patches as part of the submission process.

Similar documents exist for

  • StGit, a Python application providing similar functionality to Quilt (i.e. pushing/popping patches to/from a stack) on top of Git. You can find instructions at Managing Xen Patches with StGit.

Generating an initial Patch or Patch Series

Begin by cloning the git repo from

$ git clone git:// xen.git

At this point you should have xenbits set up as the remote repostiory called "origin":

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master

This process automatically creates a local branch called master that will track the branch called master.

The branch called staging is the bleeding-edge of commits; this is tested regularly with the build and regression testing system, and when it pases, is pushed to the master branch. It is suggested to develop patches based on the master branch.

Create a branch for your changes

When you want to introduce a change, start by making a new branch based on the most recent change in the master branch.

$ git checkout -b out/trondle-calls master
Switched to a new branch 'out/trondle-calls'

Develop and Test your change

Then edit the source files you want to change. You can see which files have changed by using git status.

Commit your change to your branch

When you're done editing, use git add to specify which file changes you want included in the changeset, and then use git commit to make a commit. You will be prompted to make a changset description. The conventions related to what should be in commit messages are described in Submitting Xen Project Patches. The example below is merely intended to explain the necessary git commands: when you submit patches you will likely need more detail than shown in this document.

$ git status
# On branch out/trondle-calls
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#	modified:   foobar/zot.c
#	modified:   foobar/zot.h
no changes added to commit (use "git add" and/or "git commit -a")
$ git add foobar/zot.c foobar/zot.h
$ git commit

Alternatively, you can commit all changes using "git commit -a":

$ git commit -a
foobar: Add a new trondle calls

Add a some new trondle calls to the foobar interface to support
the new zot feature.

Signed-off-by: Joe Smith <>

Patches vs. Patch Series

Every single commit you make on your branch becomes a patch when you submit it. If your change consists of multiple commits, you will be committing a patch series. Information related to Xen Project conventions around patches and patch series can be found here.

Sending a patch to xen-devel@

You can find instructions on how to send patches in our Patch Submission Guide.

Common tasks

Changes based on staging

If you want to make a local branch based on staging rather than master (for example, to fix a changeset which has caused the nightly testing to fail), you can do the following:

$ git checkout -b staging remotes/origin/staging
Branch staging set up to track remote branch staging from origin.
Switched to a new branch 'staging'

Then in the commands above, you would use "staging" instead of "master" as the base branch. ...