GitUsage
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 INITIALThen 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