about summary refs log tree commit diff stats
path: root/dev/git/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'dev/git/index.html')
-rw-r--r--dev/git/index.html343
1 files changed, 343 insertions, 0 deletions
diff --git a/dev/git/index.html b/dev/git/index.html
new file mode 100644
index 0000000..40ae49d
--- /dev/null
+++ b/dev/git/index.html
@@ -0,0 +1,343 @@
+<!DOCTYPEhtml>
+<htmldir="ltr" lang="en">
+<head>
+    <meta charset='utf-8'>
+    <title>Git</title>
+</head>
+<body>
+
+    <a href="../index.html">Development Index</a>
+    <h1>Git</h1>
+
+    <p>First configure your global identity, configuration
+    file resides on ~/.gitconfig ;</p>
+
+    <pre>
+       $ git config --global user.name "User Name"
+       $ git config --global user.email user@devbox
+    </pre>
+
+    <p>Assumptions of this document;</p>
+
+    <ul>
+        <li>Correct
+            <a href="../tools/gitolite.html#adminusers">user account</a>
+            exists on git server or is public readable.
+        </li>
+        <li>Repository exists or
+            <a href="../tools/gitolite.html#adminrep">create one</a>
+            if you have permissions. This document uses atom as example.
+        </li>
+        <li>Correct
+            <a href="../tools/openssh.html#sshid">ssh identities</a>,
+            and profile alias have been setup. This document uses devbox as example.
+        </li>
+    </ul>
+
+    <pre>
+       $ git clone devbox:atom
+       $ git remote -v
+    </pre>
+
+    <h2 id="teamwork">1. Team WorkFlow</h2>
+
+    <p>This work flow is based on
+    <a href="http://nvie.com/posts/a-successful-git-branching-model/">Vicent Driessen</a>
+    development model, it defines rules how branches are forked,
+    merged and tagged. By having well defined set of branches,
+    the project structure is used as a communication tool,
+    allowing to work simultaneously on different stages
+    of the development.</p>
+
+    <p>Main Branches;</p>
+
+    <dl>
+        <dt>master</dt>
+        <dd>Current official stable release history.</dd>
+        <dt>develop</dt>
+        <dd>Integration branch for features.</dd>
+    </dl>
+
+    <p>Add-on Branches;</p>
+
+    <dl>
+        <dt>feature (f-)</dt>
+        <dd>New features, improvement proposal, tests, etc...</dd>
+        <dd>Only fork and merge from/to develop.
+        <dt>release (r-)</dt>
+        <dd>Next release, new features not allowed.</dd>
+        <dd>Fork from develop, merges to master and develop.</dd>
+        <dt>hotfix (h-)</dt>
+        <dd>Hotfix only contain isolated bugfixes.</dd>
+        <dd>Only fork from master, merges back to master and develop.</dd>
+    </dl>
+
+    <p>
+    <h3 id="feature">1.1. Feature</h3>
+
+    <p>Create a branch featurex from develop and checkout;</p>
+
+    <pre>
+    $ git checkout -b featurex develop
+    </pre>
+
+    <p>Push new branch to server</p>
+
+    <pre>
+    $ git push -u origin featurex
+    </pre>
+
+    <p>Rename a branch, if all feature branches start by "f-" is easy
+    and quick to type and easy to spot;</p>
+
+    <pre>
+    $ git branch -m featurex f-xpto
+    </pre>
+
+    <p>Rename remote branch;</p>
+
+    <pre>
+    $ git push origin :featurex f-xpto
+    $ git push origin -u f-xpto
+    </pre>
+
+    <p>Merge branch feature into develop;</p>
+
+    <pre>
+    $ git checkout develop
+    Switched to branch 'develop'
+    $ git merge --no-ff f-xpto
+    Updating ea1b82a..05e9557
+    (Summary of changes)
+    $ git push origin develop
+    </pre>
+
+    <p>Delete Local;</p>
+
+    <pre>
+    $ git branch -D f-xpto
+    </pre>
+
+    <p>Delete Remote</p>
+
+    <pre>
+    $ git push origin :f-xpto
+    </pre>
+
+    <h3 id="release">1.2. Release</h3>
+
+    <p>Software release numbers follow <a href="http://semver.org/">Tom Preston-Werner</a>
+    description;</p>
+
+    <pre>
+    software-name-X.Y.Z.tar.xz
+    </pre>
+
+    <dl>
+        <dt>X</dt>
+        <dd>Major version, backwards incompatible API changes.</dd>
+        <dt>Y</dt>
+        <dd>Minor version, backwards-compatible changes.</dd>
+        <dt>Z</dt>
+        <dd>Patch version, backwards-compatible bug fixes.</dd>
+    </dl>
+
+    <pre>
+    $ git checkout -b r-1.2.1 develop
+    Switched to a new branch "release-1.2.1"
+    $ ./bump-version.sh 1.2.1
+    Files modified successfully, version bumped to 1.2.1.
+    $ git commit -a -m "Bumped version number to 1.2.1"
+    [release-1.2 74d9424] Bumped version number to 1.2.1
+    1 files changed, 1 insertions(+), 1 deletions(-)
+    </pre>
+
+    <p>Only documentation or bugfixes are allowed in this
+    branch. When release is ready for production merge
+    and push to master;</p>
+
+    <pre>
+    $ git checkout master
+    Switched to branch 'master'
+    $ git merge --no-ff r-1.2.1
+    Merge made by recursive.
+    </pre>
+
+    <p>Tag new release with software-name-version, this
+    allows meaningful ports
+    <a href="../core/ports.html">distfiles</a> when
+    downloading releases from git archives;</p>
+
+    <pre>
+    $ git tag -a software-name-1.2.1
+    $ git push --follow-tags
+    </pre>
+
+    <p>Update branch develop with bugfixes from last release,
+    conflict will happen in next step</p>
+
+    <pre>
+    $ git checkout develop
+    Switched to branch 'develop'
+    $ git merge --no-ff r-1.2.1
+    Merge made by recursive.
+    (Summary of changes)
+    $ git push
+    </pre>
+
+    <h3 id="tags">1.3. Tags</h3>
+
+    <p>There are two main types of tags, lightweight and
+    annotated. Lightweight tag is a pointer to a specific commit,
+    much like cheap branches. Annotated tags are stored as full objects
+    and allow to sign with <a href="gnupg.html">gnupg</a>, making it ideal
+    for distributing releases.</p>
+
+    <p>Delete local and remote last end of life version;</p>
+
+    <pre>
+    $ git tag -d software-name-0.0.12
+    $ git push origin :refs/tags/software-name-0.8
+    </pre>
+
+    <p>Checkout master commit you want to start long term support and then;</p>
+
+    <pre>
+    $ git tag -m "this commit is tagged" -a "software-name-1.1.8"
+    $ git push --follow-tags
+    </pre>
+
+    <h3 id="hotfix">1.4. Hotfix</h3>
+
+    <p>This branch should never exist, ;)</p>
+
+    <pre>
+    $ git checkout -b h-1.2.2 master
+    $ ./bump-version.sh 1.2.2
+    Files modified successfully, version bumped to 1.2.2
+    $ git commit -a -m "Bumped version number to 1.2.2"
+    </pre>
+
+    <pre>
+    $ git merge --no-ff b-error-xpto
+    ...
+    $ git merge --no-ff b-error-xpto
+    ...
+    $ git commit -m "Commit severe fix"
+    ...
+    $ git commit -m "Commit severe fix"
+    ...
+    </pre>
+
+    <pre>
+    $ git checkout master
+    Switched to branch 'master'
+    $ git merge --no-ff h-1.2.2
+    Merge made by recursive.
+    (Summary of changes)
+    $ git tag -a software-name-1.2.2
+    </pre>
+
+    <p>Conflict will happen in next step</p>
+
+    <pre>
+    $ git checkout develop
+    Switched to branch 'develop'
+    $ git merge --no-ff h-1.2.2
+    Merge made by recursive.
+    (Summary of changes)
+    </pre>
+
+    <pre>
+    $ git -D h-1.2.2
+    </pre>
+
+    <h2 id="local">2. Local Workflow</h2>
+
+    <h3 id="working">2.1. Working area</h3>
+
+    <p>Mark all deleted to commit;</p>
+
+    <pre>
+    $ git ls-files --deleted -z | xargs -0 git rm
+    </pre>
+
+
+    <p>Mark all deleted to commit;</p>
+
+    <pre>
+    $ git ls-files --deleted -z | xargs -0 git rm
+    </pre>
+
+    <h3 id="logdiff">2.2. Logs and commits</h3>
+
+    <p>Create patch files to target branch/tag/ref;</p>
+
+    <pre>
+    $ git format-patch --no-prefix software-v0.0.1
+    </pre>
+
+    <p>Last commit that affected current path</p>
+
+    <pre>
+    $ git rev-list -n 1 HEAD -- .
+    $ git show f000 path/to/file
+    $ git diff --name-status f000 path/to/file
+    </pre>
+
+    <p>Undo a file to specific commit</p>
+
+    <pre>
+    $ git checkout f000^ -- path/to/file
+    </pre>
+
+    <h3 id="remote">2.3. Working with remotes</h3>
+
+    <p>Adding a new remote;</p>
+
+    <pre>
+    $ git remote add newremotename https://github.com/user/repo.git
+    </pre>
+
+    <p>Update all branches with remote;</p>
+
+    <pre>
+    $ git fetch --all
+    $ git pull --all
+    </pre>
+
+    <p>If you want to track all remotes run this line
+    and then the commands mentioned above;</p>
+
+    <pre>
+    $ for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done
+    </pre>
+
+    <p>Future updates;</p>
+
+    <pre>
+    $ git fetch --all
+    $ git pull --all
+    </pre>
+
+    <p>Update local branches removed on remote set;</p>
+
+    <pre>
+    $ git config --global fetch.prune true
+    </pre>
+
+
+    <p>This will prune on fetch or you can keep it manually;</p>
+
+    <pre>
+    $ git remote prune origin
+    </pre>
+
+    <a href="../index.html">Development Index</a>
+    <p>This is part of the c9-doc Manual.
+    Copyright (C) 2016
+    c9 Team.
+    See the file <a href="../../fdl-1.3-standalone.html">Gnu Free Documentation License</a>
+    for copying conditions.</p>
+</body>
+</html>
id='n615' href='#n615'>615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723