GitUsage

Revision 14 as of 2008-08-06 16:39:27

Clear message

Ubuntu X-SWAT uses git now

We are now using git for the packages with biggest set of changes, namely "xorg" and "xorg-server". This page is a simplified version of the Debian git-usage page specifically for our needs.

There is also a web interface to review changes: http://git.debian.org/.

Direct links to current Ubuntu branches:

Git archive policy

Currently we only branch xorg and xorg-server, since those have the most changes and have traditionally been painful to merge. The rest are better to just remain sync'able or merged when there are small changes. Changes that benefit Debian are being pushed back so that the delta is kept as small as possible.

Basic tutorial

First you need to pull the repository on your disk, and change the working branch.

For xorg:

git clone ssh://user-guest@alioth.debian.org/git/pkg-xorg/debian/xorg.git
git checkout -b ubuntu origin/ubuntu
 HEAD is now at cdbd698... Prepare changelog for upload.
 Switched to branch "ubuntu"

and for xorg-server:

git clone ssh://user-guest@alioth.debian.org/git/pkg-xorg/xserver/xorg-server.git
git checkout -b ubuntu origin/ubuntu
 HEAD is now at cdbd698... Prepare changelog for upload.
 Switched to branch "ubuntu"

Check the success by running these

git status
 # On branch ubuntu
 nothing to commit (working directory clean)
git log

The first thing usually is to merge with a new Debian release

git pull . debian-unstable <tag>

It most likely complains that there are conflicts, so then make sure you have a merge tool of your choice installed (meld is one alternative) and then run git-mergetool

git-mergetool
 Merging the files: debian/changelog debian/control

 Normal merge conflict for 'debian/changelog':
  {local}: modified
  {remote}: modified
 Hit return to start merge resolution tool (meld): 

Merge leaves behind some temporary files if there are conflicts, so clean them.

git clean
 Removing debian/changelog.orig
 Removing debian/control.orig

Now you can do other changes if necessary. Remember to git-add new files.

<edit>
git-add path/to/a-new-file
dch
git diff

and commit them.

git commit -a

When everything is set, push the changes to the repository.

git push origin ubuntu

Now it's safe to do a release. Don't forget to add -i/I as necessary, and put the tarball in the parent directory before running debuild.

debuild -I".git" -S -sa -v$previousUbuntuVersion ### for xorg
debuild -i".git" -S -sa -v$previousUbuntuVersion ### for rest with an orig.tar.gz

After reviewing the resulting package (debdiff et al) it is ready for upload!

Recovering from mistakes

There are (at least) two ways to revert a change, either reverting and older commit with

git revert <hash>

or by resetting the HEAD if you want to just revert the latest (set of) change(s)

git reset <hash of the new HEAD>

Reverting leaves a message on the log, so it's not a "clean" way to undo changes, but necessary when the changes are already committed to the repository, or when there are changes made after that commit.

Starting a new git tree

If you have a new project to put into git, first initialize a fresh new repository:

mkdir xorg-my-tree
cd xorg-my-tree
git init

Add files as usual:

echo "$DEBFULLNAME <$DEBEMAIL>" > AUTHORS
git add AUTHORS
git commit -m "Initial creation of tree"

Tag the start of your project if you wish:

echo "[user]
        signingkey = $DEBEMAIL
" >> .git/config
git tag -s INITIAL

Then to publish it, first initialize the external git repo on alioth:

ssh user-guest@alioth.debian.org
mkdir -p ~/public_html/git/xorg-my-tree.git
cd ~/public_html/git/
GIT_DIR=xorg-my-tree.git git-init
chmod +x xorg-my-tree.git/hooks/post-update

And then from your local machine, push your initial release up:

git push user-guest@alioth.debian.org:public_html/git/xorg-my-tree.git master
git repack