From f4782c99b8bb5e93f1d3d69b5dd639cc3441fabb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=A7al=20Comajoan=20Cara?= Date: Mon, 3 Dec 2018 06:33:31 +0100 Subject: [PATCH] eng/vc-authors: Convert wiki page to Rest (GCI 2018) Converted https://devel.rtems.org/wiki/Developer/Git/Committers to Rest, and TBDs and wiki TODOs into comments. Also changed http links to https (the ones that are possible), corrected some typos, created a folder for eng images and added some formatting. This work was part of GCI 2018. --- eng/vc-authors.rst | 355 +++++++++++++++++++++++++++++++- images/eng/Git-personalrepo.png | Bin 0 -> 24895 bytes 2 files changed, 353 insertions(+), 2 deletions(-) create mode 100644 images/eng/Git-personalrepo.png diff --git a/eng/vc-authors.rst b/eng/vc-authors.rst index 68f28e3..7e6e763 100644 --- a/eng/vc-authors.rst +++ b/eng/vc-authors.rst @@ -7,5 +7,356 @@ Software Development (Git Writers) ********************************** -TBD - Convert https://devel.rtems.org/wiki/Developer/Git/Committers -TBD - and insert here. +.. COMMENT: TBD - Convert https://devel.rtems.org/wiki/Developer/Git/Committers +.. COMMENT: TBD - and insert here. + +.. COMMENT: TBD - Some guidelines for anyone who wishes to contribute to +.. COMMENT: TBD - rtems... Patches? Pull Requests?... + + The preferred workflow for making changes to RTEMS is to push patches to a + committer's personal repository in public view and then merge changes from + there. For working on enhancements or bug fixes committers are encouraged to + push to branches on their personal repositories and to merge into the main + RTEMS repository from their personal repository. Personal branches should + not be pushed to the RTEMS repository. + +SSH Access +---------- + +Currently all committer's should have an ssh account on the main git server, +dispatch.rtems.org. If you have been granted commit access and do have an +account on dispatch.rtems.org one should be requested on the devel@… list. +SSH access for git uses key logins instead of passwords. The key should be at +least 1024bits in length. + +The public repositories can by cloned with + +.. code-block:: shell + + git clone ssh://user@dispatch.rtems.org/data/git/rtems.git + +Or replace `rtems.git` with another repo to clone another one. + +Personal Repository +------------------- +Personal repositories keep the clutter away from the master repository. A +user with a personal repository can make commits, create and delete branches, +plus more without interfering with the master repository. Commits to the +master repository generate email to the vc@… list and development type commits +by a developer would only add noise and lessen the effectiveness of the commit +list + +A committer should maintain a personal clone of the RTEMS repository through +which all changes merged into the RTEMS head are sent. The personal repository +is also a good place for committers to push branches that contain works in +progress. The following instructions show how to setup a personal repositor +that by default causes commits to go to your private local repository and +pushes to go to your publicly visible personal repository. The RTEMS head is +configured as a remote repository named 'upstream' to which you can push +changes that have been approved for merging into RTEMS. + +Branches aren't automatically pushed until you tell git to do the initial push +after which the branch is pushed automatically. In order to keep code private +just put it on a branch in your local clone and do not push the branch. + +Create a personal repository +---------------------------- + +Set up the server side repository. In the following substitute user with your +username. + +.. code-block:: shell + + # ssh git.rtems.org + [user@git ~]$ ln -s /data/git/user git + [user@git ~]$ ls -l + lrwxrwxrwx 1 user rtems 16 Feb 1 11:52 git -> /data/git/user + [user@git ~]$ cd git + [user@git git]$ git clone --mirror /data/git/rtems.git + +Provide a description for the repository, for example "Clone of master +repository." + +.. code-block:: shell + + [user@git git]$ echo "Clone of master repository." > rtems.git/description + [user@git git]$ logout + +Clone the repository on your local machine + +.. code-block:: shell + + # git clone ssh://user@dispatch.rtems.org/home/user/git/rtems.git + # cd rtems + +Add the RTEMS repository as a remote repository and get the remote tags +and branches + +.. code-block:: shell + + # git remote add upstream ssh://user@dispatch.rtems.org/data/git/rtems.git + # git fetch upstream + +After a little while you should be able to see your personal repo +at https://git.rtems.org/@USER@/rtems.git/ and you can create other +repositories in your git directory that will propagate +to https://git.rtems.org/@USER@/ if you need. For example, `joel`'s personal +repos appear at https://git.rtems.org/joel/. + + +.. figure:: ../images/eng/Git-personalrepo.png + :width: 50% + :align: center + :alt: Git Personal Repositories + +Check your setup +~~~~~~~~~~~~~~~~ + +.. code-block:: shell + + git remote show origin + +Should print something similar to + +.. code-block:: shell + + * remote origin + Fetch URL: ssh://user@dispatch.rtems.org/home/user/git/rtems.git + Push URL: ssh://user@dispatch.rtems.org/home/user/git/rtems.git + HEAD branch: master + Remote branches: + 4.10 tracked + 4.8 tracked + 4.9 tracked + master tracked + Local branch configured for 'git pull': + master merges with remote master + Local ref configured for 'git push': + master pushes to master (up to date) + +Push commits to personal repo master from local master +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: shell + + # git push + +Push a branch onto personal repo +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: shell + + # git push origin branchname + +Update from upstream master (RTEMS head) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + When you have committed changes on a branch that is private (hasn't been + pushed to your personal repo) then you can use rebase to obtain a linear + history and avoid merge commit messages. + +.. code-block:: shell + + # git checkout new_features + # git pull --rebase upstream master + +If you cannot do a fast-forward merge then you could use the ``--no-commit`` +flag to prevent merge from issuing an automatic merge commit message. + +When you have committed changes on a branch that is public/shared with another +developer you should not rebase that branch. + +GIT Push Configuration +---------------------- + +People with write access to the main repository should make sure that they +push the right branch with the git push command. The above setup ensures +that git push will not touch the main repository, which is identified as +upstream, unless you specify the upstream (by ``git push upstream master``). + +Lets suppose we have a test branch intended for integration into the master +branch of the main repository. + +.. code-block:: shell + + # git branch + master + * test + +There are two options for pushing with the branch. First, + +.. code-block:: shell + + # git push origin test + +Will push the test branch to the personal repository. To delete the remote +branch + +.. code-block:: shell + + # git push origin :test + +You'll still need to delete your local branch if you are done with it. + +If you are going to work exclusively with one branch for a while, you might +want to configure git to automatically push that branch when you use git push. +By default git push will use the local master branch, but you can use the +`test` branch as the source of your changes: + +.. code-block:: shell + + # git config remote.origin.push test:master + +Now git push will merge into your master branch on your personal repository. +You can also setup a remote branch: + +.. code-block:: shell + + # git config remote.origin.push test:test + +You can see what branch is configured for pushing with + +.. code-block:: shell + + # git remote show origin + +And reset to the default + +.. code-block:: shell + + # git config remote.origin.push master + +Pull a Developer's Repo +----------------------- + +The procedures for creating personal repositories ensure that every developer +can post branches that anyone else can review. To pull a developer's personal +repository into your local RTEMS git clone, just add a new remote repo: + +.. code-block:: shell + + # git remote add devname git://dispatch.rtems.org/devname/rtems.git + # git fetch devname + # git remote show devname + # git branch -a + +Replace devname with the developer's user name on git, which you can see by +accessing https://git.rtems.org. Now you can switch to the branches +for this developer. + +Use a tracking branch if the developer's branch is changing: + +.. code-block:: shell + + # git branch --track new_feature devname/new_feature + +Committing +---------- + +Ticket Updates +~~~~~~~~~~~~~~ + +Our trac instance supports updating a related ticket with the commit message. + +Any references to a ticket for example #1234 will insert the message into +he ticket as an 'update'. No command is required. + +Closing a ticket can be done by prefixing the ticket number with any of the +following commands: + +``close``, ``closed``, ``closes``, ``fix``, ``fixed``, or ``fixes`` + +For example: + +``closes #1234`` + +``This is a random update it closes #1234 and updates #5678`` + +Commands +~~~~~~~~ + +When merging someone's work, whether your own or otherwise, we have some +suggested procedures to follow. + +* Never work in the master branch. Checkout a new branch and apply + patches/commits to it. +* Before pushing upstream: + - Update master by fetching from the server + - Rebase the working branch against the updated master + - Push the working branch to the server master + +The basic workflow looks like + +.. code-block:: shell + + # git checkout -b somebranch upstream/master + # patch .. git add/rm/etc + # git commit ... + # git pull --rebase upstream master + # git push upstream somebranch:master + +If someone pushed since you updated the server rejects your push until you +are up to date. + +For example a workflow where you will commit a series of patches from +``../patches/am/`` directory: + +.. code-block:: shell + + # git checkout -b am + # git am ../patches/am* + # git pull --rebase upstream master + # git push upstream am:master + # git checkout master + # git pull upstream master + # git log + # git branch -d am + # git push + +The git log stage will show your newly pushed patches if everything worked +properly, and you can delete the am branch created. The git push at the end +will push the changes up to your personal repository. + +Another way to do this which pushes directly to the upstream is shown here +in an example which simply (and quickly) applies a patch to the branch: + +.. code-block:: shell + + git checkout -b rtems4.10 --track remotes/upstream/4.10 + cat /tmp/sp.diff | patch + vi sparc.t + git add sparc.t + git commit -m "sparc.t: Correct for V8/V9" + git push upstream rtems4.10:4.10 + git checkout master + git log + git branch -d rtems4.10 + +Pushing Multiple Commits +------------------------ + +A push with more than one commit results in Trac missing them. Please use the +following script to push a single commit at a time: + +.. code-block:: shell + + #! /bin/sh + commits=$(git log --format='%h' origin/master..HEAD | tail -r) + for c in $commits + do + cmd=$(echo $c | sed 's%\(.*\)%git push origin \1:master%') + echo $cmd + $cmd + done + +Ooops! +------ + +So you pushed something upstream and broke the repository. First things first: +stop what you're doing and notify devel@... so that (1) you can get help and +(2) no one pulls from the broken repo. For an extended outage also notify +users@.... Now, breathe easy and let's figure out what happened. One thing +that might work is to just `undo the push +`_. To get an +idea of what you did, run ``git reflog``, which might be useful for getting +assistance in undoing whatever badness was done. diff --git a/images/eng/Git-personalrepo.png b/images/eng/Git-personalrepo.png new file mode 100644 index 0000000000000000000000000000000000000000..751499a4fac6b4ea05a5ce226aec084c0c653196 GIT binary patch literal 24895 zcmZsCWmH>Dv^MS*q(Gra@ZwP1OK_K9#ibN?cM2sGm*Q56lu(@FlHyK*;#w@l-R*|= zuDjOv<6|wtIbmkb%$_}4p8cF?O?3r)oR>IANJ#ifiXd$yBor;g^*$B`;#0Tr%oy

RN;A^1IAIoJB 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