Version 31 (modified by 15 years ago) ( diff ) | ,
---|
Tips and Tricks for using Git with WebKit
Install
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 svn 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
Checkout
To checkout WebKit using git:
git clone git://git.webkit.org/WebKit.git WebKit
If you'd also like to track the svn repository (the git update-ref
command is the secret to reusing the cloned git repository to fast-forward to the tip of the svn repository):
cd WebKit git update-ref refs/remotes/trunk origin/master git svn init -T trunk http://svn.webkit.org/repository/webkit
Updating
If you are tracking the svn repository, this command will fetch information about new commits from svn, reset your local branch to match svn exactly, and then apply your local commits on top:
git svn rebase
If you are tracking the svn repository, this command will fetch information about new commits from svn:
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 still commit through git svn.
First, you'll need to make sure you have the appropriate remote in your git config:
[svn-remote "svn"] url = http://svn.webkit.org/repository/webkit/trunk fetch = :refs/remotes/git-svn
Now, you need to update your repo to the latest from the svn repository. You can either:
- Run 'git svn rebase' which will be incredibly slow...
- Use the
git update-ref
trick manually as mentioned above... - Use the handy
update-gitsvn-from-origin
script found in the QtWebKit tools repository here: http://gitorious.org/qtwebkit/tools
After you have a working remote and have fetched all the blobs of info from it you can:
- Create a 'tot_staging' branch or whatever name you choose
- Apply a patch, cherry-pick a commit, or even merge a branch if it has been reviewed
- Run
git svn rebase
and fix any ChangeLog conflicts that might result - 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 (unlikesvn-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 user.name "Foo Bar" git config --global user.email "foo@webkit.org"
- Install WebKit project-specific git scripts
git clone git://git.ndesk.org/pub/scm/git-porcelains cd git-porcelains make
Note: git-send-bugzilla requires Crypt::SSLeay
More info @ http://git.ndesk.org/?p=git-porcelains;a=summary
Ignores
- You can setup your git repository to ignore the same files that are ignored in the tracked svn repository with: (this will take some time)
git svn show-ignore >> .git/info/exclude