Version 33 (modified by, 14 years ago) (diff)

Clear up the section about git-svn

Tips and Tricks for using Git with WebKit


You can download Git binaries directly from the official site!

or if you're using Debian:

   sudo apt-get install git-core

or if you're using Fink:

   fink install git

or if you're using MacPorts:

   port install git-core

or if you're using MacPorts and you want to track the Subversion repository (e.g., a committer):

   port install git-core +svn

or perhaps you'd like to use a 3rd party Mac OS X git install package

or msysgit for windows from google? (Yong)


To checkout WebKit using git:

   git clone git:// WebKit

If you'd also like to track the Subversion repository (the git update-ref command is the secret to reusing the cloned git repository to fast-forward to the tip of the Subversion repository):

   cd WebKit
   git update-ref refs/remotes/trunk origin/master
   git svn init -T trunk

This will add the following section to your .git/config:

[svn-remote "svn"]
        url =
        fetch = trunk:refs/remotes/trunk

You can then run the following command to have git-svn rebuild its metadata from your local repository, and to pull any recent commits from the WebKit SVN repository.

   git svn fetch


If you're not tracking the Subversion repository the following command will fetch new commits from

    git fetch

You can then merge or rebase your local branches with origin/master to pick up the new commits.

If you are tracking the Subversion repository, this command will fetch information about new commits from Subversion, reset your local branch to match Subversion exactly, and then apply your local commits on top:

   git svn rebase

If you'd like to fetch new commits from the Subversion repository without moving your local branch, you can use the following command:

   git svn fetch

Commit through git-svn

If you have been granted commit access to WebKit's SVN repository it is possible to work entirely with git and to commit through git-svn.

After you have configured your working copy to track the Subversion repository you can:

  1. Create a tot_staging branch or whatever name you choose
  2. Apply a patch, cherry-pick a commit, or even merge a branch if it has been reviewed
  3. Run git svn rebase and fix any ChangeLog conflicts that might result
  4. And then when everything is ready: git svn dcommit.

WebKit Script support for Git

The various scripts in WebKitTools/Scripts have been made to work pretty well with Git. Here are some of the specific things you can do with them:

  • Telling the various scripts to append the git branch name to every build. This is especially useful so you don't clobber your previous branch's build when you switch branches
      git config core.webKitBranchBuild (true|false) //the default is off
  • Overriding the core.webKitBranchBuild setting for a specific branch
      git config branch.$branchName.webKitBranchBuild (true|false)
  • Using prepare-Changelog with git
      WebKitTools/Scripts/prepare-ChangeLog --git-commit=$committish --git-reviewer="Foo Reviewer"
  • Using resolve-ChangeLog with git. Assuming you got a conflict merging a ChangeLog file, this tool will reapply the patch using patch --fuzz=3 so that your change lands at the top of the ChangeLog file. If the patch was successfully applied, git-add is run on the ChangeLog file. Note that this tool does not change the date of the ChangeLog entry (unlike svn-apply).
      WebKitTools/Scripts/resolve-ChangeLogs path/to/ChangeLog [path/to/ChangeLog ...]
  • Using commit-log-editor with git will automatically insert the ChangeLog entry as your commit message (assuming WebKitTools/Scripts is in your path)
      git config core.editor commit-log-editor
    If you want to make sure log gets regenerated from ChangeLog entry each time you modify an already existing commit, use --regenerate-log:
      git config core.editor "commit-log-editor --regenerate-log"
  • If you do not manually generate a ChangeLog entry and you have staged changes in your working tree, commit-log-editor will automatically generate a commit message in the WebKit ChangeLog entry format when you do 'git commit'. You can control this behaviour with the git configuration option webkitGenerateCommitMessage on a global or per-branch basis.
      git config core.webkitGenerateCommitMessage (true|false) //the default is true
      git config branch.$branchName.webkitGenerateCommitMessage (true|false)

Misc. Tips and Tricks

  • You can setup Git shell completion and branch name in your bash prompt. In your /path/to/git/source/contrib/completion directory you will find a 'git-completion.bash' file. Follow the instructions in that file to enable shell completion. Here is a nice bash prompt for instance
    PS1='\[\033[41;1;37m\]\u@\h:\[\033[40;1;33m\]\W$(__git_ps1 " (%s)")>\[\033[0m\] '
  • You can set up multiple working directories to work on more than one branch at a time. In your /path/to/git/source/contrib/workdir directory you will find a 'git-new-workdir' script that can create new working directories. The usage is
    ./git-new-workdir <repository> <new_workdir> [<branch>]
  • Colorize various git commands
    git config --global color.status auto
    git config --global color.diff auto
    git config --global color.branch auto
  • Important git config settings
    git config --global "Foo Bar"
    git config --global ""
  • Install WebKit project-specific git scripts
     git clone git://
     cd git-porcelains

Note: git-send-bugzilla requires Crypt::SSLeay

More info @;a=summary


  • You can setup your git repository to ignore the same files that are ignored in the tracked Subversion repository with: (this will take some time)
    git svn show-ignore >> .git/info/exclude