= Collaboration on !GitHub = This page gives guidelines for distributed Django development. It is not officially part of the Django development process. == Prerequisites == === 1. Install git === If you want to learn more about `git`, see [http://git-scm.com/ the git webpage] or [http://git.or.cz/gitwiki/GitCheatSheet the git cheat sheet] for a quick overview. ==== Ubuntu ==== As of January 2009, the latest `git` release is 1.6.1. As there are many improvements compared with older releases (notably, a single executable), it is advisable to use this version instead of the ones provided in the Ubuntu release repositories. There is [https://launchpad.net/~smartlounge/+archive a personal package archive] that provides `git` 1.6.1 backports to all Ubuntu releases since Hardy. Installation instructions: 1. add the following line to `/etc/apt/sources.list` (substituting `UBUNTU_RELEASE_NAME` with the Ubuntu release you are using): {{{ deb http://ppa.launchpad.net/smartlounge/ubuntu UBUNTU_RELEASE_NAME main }}} 1. install `git`: {{{ $ apt-get update $ apt-get install git }}} 1. verify that the correct version was installed: {{{ $ git --version git version 1.6.1 }}} === 2. Register an account on !GitHub === Go to https://github.com/signup/free and follow the instructions. == Work process == The process should be managed with the '''Dictator and Lieutenants Workflow''', described at http://whygitisbetterthanx.com/#any-workflow. * ''Dictators'' are core Django developers, who eventually merge the `git` branches back to Django trunk. * ''Lieutenants'' are developers, who take the responsibility of steering and coordinating the work on a large feature (e.g. aggregates). * ''Contributors'' are developers who contribute -- under lieutenant's guidance -- to the development of the feature. === Lieutenant === 1. Create a fork of the automatically updated Django SVN trunk mirror on !GitHub by clicking ''fork'' at http://github.com/django/django/tree/master 1. Describe the design of the feature you implement on !GitHub project wiki, list tasks that need tackling so that contributors get a clear overview and pick tasks easily. 1. Clone the fork to your workstation: {{{ git clone git@github.com:YOUR_NICK_HERE/django.git }}} 1. Add the upstream Django SVN mirror for tracking: {{{ cd django git remote add upstream git://github.com/django/django.git git fetch upstream }}} 1. Work on code, commit locally as needed: {{{ git commit -a -m "Implemented foo." }}} 1. Publish changes to your public repository: {{{ git push }}} 1. When the upstream Django SVN mirror is updated, pull the updates from it (fetching and merging in one step): {{{ git pull upstream master }}} === Contributor ===