= Small Howto use our Git Repro = == Geting repro == === Developer === At first: Every developer should check out the git repository via ssh.. as every other possibility is readonly: {{{ git clone ssh://midnight-commander.org:2222/git/mc.git }}} === Anonymous R/O access === {{{ git clone http://git.midnight-commander.org/mc.git }}} or {{{ git clone git://midnight-commander.org/git/mc.git }}} == Some info about current repro == There are now several branches, namely: * master (testing area) * stable (from this branch we do the releases, only stable code) * mc-ru-fork (code from a former fork, which should be integrated) * utf-8 (a utf8 patch applied) Our workflow is splitted up in four parts: * Creating the patch * Discussing the patch * Applying the patch to master * Moving the patch after testing to stable == Creating the patch == There are two possible ways in order to create a patch: === Way 1 === * create a local branch on top of master: {{{ git checkout -b foobar #if you are on master }}} * Do some work inside this branch. * Have a look what has changed really: {{{ git status }}} * Add all files which shoul go into the patch in order to track them: {{{ git add src/file1.c po/file2.po maint/file3.txt }}} * Create a diff against master: {{{ git diff master > /tmp/newpatch.patch }}} * Delete everything which was done: {{{ git reset --hard $sha_of_last_usefull_commit }}} Using here --soft will also work but then you'll have to delete the untracked stuff on your own * Check if something is still there which shouldn't be there {{{ git status }}} * Switch back to master and delete the foobar branch {{{ git checkout master git branch -d foobar }}} === Way 2 === * Do some work in the master branch * Add all files which should show up in the diff into the stagging area {{{ git add file1 file2 file3 }}} * Create patchfile: {{{ git diff master > /tmp/patchfile.patch }}} * Reset master to last usefull commit: {{{ git reset --hard $sha_of_last_usefull_commit }}} * Check if something is still there which shouldn't be there {{{ git status }}} === Discussing the patch === As a patch should always be build on master it should be fairly trivial to test if the patch is okay (applies): For this only fetch the patch and apply it on master (or on a foobar branch for testing). Maybe test if the patch behaves as expected and read through the patch if the coding style and the changes itself are good. After that comment on the ticket if the patch is okay or should reworked. Afterwards you can clean up again the master branch with {{{ git reset --hard $sha_of_last_usefull_commit }}} === Applying the patch on master === There are a lot of other possibilities in order to create patches/work on the git but I would suggest that you try it on your own ;-)