about summary refs log tree commit diff stats
path: root/dev/git
diff options
context:
space:
mode:
Diffstat (limited to 'dev/git')
-rw-r--r--dev/git/branch.html306
-rw-r--r--dev/git/index.html390
-rw-r--r--dev/git/install.html54
-rw-r--r--dev/git/work.html164
4 files changed, 549 insertions, 365 deletions
diff --git a/dev/git/branch.html b/dev/git/branch.html
new file mode 100644
index 0000000..2db02a2
--- /dev/null
+++ b/dev/git/branch.html
@@ -0,0 +1,306 @@
+<!DOCTYPE html>
+<html dir="ltr" lang="en">
+<head>
+    <meta charset='utf-8'>
+    <title>Git branches</title>
+</head>
+<body>
+
+    <a href="index.html">Git Index</a>
+
+    <h1>3. Git branches</h1>
+
+    <p>Branches in git are "cheap" and easy, they allow to help maintain the information, both locally and remotely.</p>
+
+    <h2 id="teamwork">3.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> and <a href="http://www.bitsnbites.eu/a-stable-mainline-branching-model-for-git/">Marcus Geelnard</a> branch strategies, 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>
+
+    <pre>
+    ___A___________AB_____ Master
+        \___B_____/ \____  Develop
+    </pre>
+
+    <p>A represents a commit, then code forked into develop and a commit B was made, develop was the merged back to master AB.</p>
+
+    <dl>
+        <dt>master</dt>
+        <dd>Current stable release history, it only contains merges, develop, hot-fix and release branches.</dd>
+        <dt>develop</dt>
+        <dd>Where new features are merged and tests are performed, if all tests pass is to forked to release.</dd>
+    </dl>
+
+    <p>Development branches;</p>
+
+    <pre>
+    _A_______________________AF_______________ Master
+      \                    /   \_AFHBH_/       Hotfix
+                   __AFHB_/                    Release
+       \__________/___________________________ Develop
+         \_F_/                                 Feature
+    </pre>
+
+    <dl>
+        <dt>feature (f-)</dt>
+        <dd>Feature only contain isolated features, improvement proposal, code review, integration tests, etc.</dd>
+        <dd>Only fork and merge from/to develop, when only local use rebase to keep update with develop branch.</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>Code support branches;</p>
+    <pre>
+    _______________________________AFHB___ Stable-X.Y
+    __AF_________________________/________ Master
+           \_AFH_/ \            /\         Hotfix
+                    \   __AFHB_/  \        Release
+    _________________\_/___________\______ Develop
+    </pre>
+
+    <dl>
+        <dt>release (r-)</dt>
+        <dd>Next release, only bug fix's are allowed to be merged.</dd>
+        <dd>Major releases fork from develop, merges to master and develop.</dd>
+        <dt>stable (stable-)</dt>
+        <dd>Sable major (X) and minor (Y) release branch, each commit correspond to patch level (Z) with a tag name-(X.Y.Z). Only cherry pick hotfixes from master or next branched security patch level.</dd>
+    </dl>
+
+    <h3 id="feature">3.2. Feature</h3>
+
+    <p>Create a branch featurex from develop and checkout;</p>
+    <pre>
+    $ git checkout -b featurex develop
+    </pre>
+
+    <p>Initial feature commit;</p>
+
+    <pre>
+    $ git commit -m "added new feature X"
+    </pre>
+
+    <p>Other feature commit;</p>
+
+    <pre>
+    $ git commit -m "better implementation and tests."
+    </pre>
+
+    <p>Prepare for testing and merge back;</p>
+
+    <pre>
+    $ git checkout featurex
+    $ git rebase -i develop
+    </pre>
+
+    <p>Run test's, fixes are implemented;</p>
+
+    <pre>
+    $ git commit -m "feature X tests fix's."
+    </pre>
+
+    <p>Rebase strategy is cleaner than merge. When pushed to remotes merge strategy can be used or use force push. To run remote tests, code review etc, push 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, first make sure is update with develop and history is clean;</p>
+
+    <pre>
+    $ git checkout featurex
+    $ git rebase -i develop
+    </pre>
+
+    <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 Remote</p>
+
+    <pre>
+    $ git push origin :f-xpto
+    </pre>
+
+    <p>Delete Local;</p>
+
+    <pre>
+    $ git branch -D f-xpto
+    </pre>
+
+    <h3 id="release">3.3. Release</h3>
+
+    <p>Software release numbers follow <a href="http://semver.org/">Tom Preston-Werner</a>
+    description;</p>
+
+    <pre>
+    projectname-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 level, backwards-compatible bug and security fixes.</dd>
+    </dl>
+
+    <p>There are patch level or minor new features and major releases. New features releases and major releases fork from develop, code is freeze to let keep adding new features to develop while preparing the code to merge to master and back to develop.</p>
+
+    <pre>
+    $ git checkout -b r-1.2.0 develop
+    Switched to a new branch "release-1.2.0"
+    $ ./bump-version.sh 1.2.0
+    Files modified successfully, version bumped to 1.2.0.
+    $ git commit -a -m "Bumped version number to 1.2.0"
+    [release-1.2 74d9424] Bumped version number to 1.2.0
+    1 files changed, 1 insertions(+), 1 deletions(-)
+    </pre>
+
+    <p>Only documentation or bugfixes are allowed in this
+    branch. When release is ready for production tests merge
+    and push to master;</p>
+
+    <pre>
+    $ git checkout master
+    Switched to branch 'master'
+    $ git merge --no-ff r-1.2.0
+    Merge made by recursive.
+    </pre>
+
+    <p>Tag new release with projectname-version, this
+    allows meaningful ports
+    <a href="../core/ports.html">distfiles</a> when
+    downloading releases from git archives;</p>
+
+    <pre>
+    $ git tag -a projectname-1.2.0
+    $ 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.0
+    Merge made by recursive.
+    (Summary of changes)
+    $ git push
+    </pre>
+
+    <h3 id="tags">3.4. 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>Tags are used to mark patch releases, get back in time to make security patches or to mark a new major or minor new release.</p>
+
+    <p>Delete local and remote;</p>
+
+    <pre>
+    $ git tag -d projectname-0.0.12
+    $ git push origin :refs/tags/software-name-0.8
+    </pre>
+
+    <p>List local tags;</p>
+
+    <pre>
+    $ git tag --list
+    </pre>
+
+    <h3 id="hotfix">3.5. Hotfix</h3>
+
+    <p>Hotfix are done in master, the only exceptions are release and stable branches. When hot fix is applied to a stable branch is not included in future releases, only needed when cherry pick is hard or impossible. When hot fixes are done on release branches, as described on this document, they have short duration, hot fixes should relate only to new code. To create a hot/bug fix;</p>
+
+    <pre>
+    $ git checkout -b h-error-name master
+    </pre>
+
+    <p>Merge the branches with bug fixes;</p>
+
+    <pre>
+    $ git merge --no-ff b-error-xpto
+    ...
+    $ git commit -m "Commit severe fix"
+    ...
+    $ git merge --no-ff b-error-xpto
+    ...
+    $ git commit -m "Commit severe fix"
+    ...
+    $ git rebase -i master
+    </pre>
+
+    <p>Merge the hotfix back to master;</p>
+
+    <pre>
+    $ git checkout master
+    Switched to branch 'master'
+    $ git merge --no-ff h-error-name
+    Merge made by recursive.
+    </pre>
+
+    <p>On stable branches cherry pick the commit;</p>
+
+    <pre>
+    $ git checkout stable-1.1
+    $ git checkout -b r-1.1.2
+    $ ./bump-version.sh 1.1.2
+    Files modified successfully, version bumped to 1.1.2
+    $ git commit -a -m "Bumped version number to 1.1.2"
+    $ git cherry-pick h-error-name
+    $ git checkout stable-1.1
+    $ git merge --no-ff r-1.1.2
+    $ git tag -a projectname-1.1.2
+    </pre>
+
+    <p>Conflicts happen in previews and next step;</p>
+
+    <pre>
+    $ git checkout develop
+    Switched to branch 'develop'
+    $ git merge --no-ff h-error-name
+    Merge made by recursive.
+    (Summary of changes)
+    </pre>
+
+    <pre>
+    $ git -D r-1.1.2
+    $ git -D h-error-name
+    </pre>
+
+    <a href="index.html">Git Index</a>
+    <p>This is part of the Hive System Documentation.
+    Copyright (C) 2019
+    Hive Team.
+    See the file <a href="../../fdl-1.3-standalone.html">Gnu Free Documentation License</a>
+    for copying conditions.</p>
+</body>
+</html>
diff --git a/dev/git/index.html b/dev/git/index.html
index b2feb83..463b506 100644
--- a/dev/git/index.html
+++ b/dev/git/index.html
@@ -7,376 +7,36 @@
 <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>If you want to disable pager / paging you can set globally;</p>
-
-    <pre>
-    $ git config --global core.pager cat
-    </pre>
-
-    <p>Paging based on output size with less;</p>
-
-    <pre>
-    $ git config --global core.pager "less -F -X"
-    </pre>
-
-    <p>Use <a href="../../tools/vim.html#vimdiff">vimdiff</a> as diff and merge tool;</p>
-
-    <pre>
-    $ git config --global diff.tool vimdiff
-    $ git config --global merge.tool vimdiff
-    $ git config --global difftool.prompt false
-    $ git config --global merge.conflictstyle diff3
-    </pre>
-
-    <h2 id="teamwork">1. Team WorkFlow</h2>
-
-    <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>
-
-    <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>
-
-    <pre>
-    ___A___________AB_____ Master
-        \___B_____/ \____  Develop
-
-    </pre>
-
-    <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>
-
-    <pre>
-    _A_________________AFR___________________AFRHR Master
-     \            _AFR_/   \        _AFRHR_/\      Release
-      \          /          \_AFRH_/         \     Hotfix
-       \________/_____________________________\__  Develop
-         \_F_/     \_F1_/                          Feature
-
-    </pre>
-
-    <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>Query last commit that affected current file 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>
-
-    <p>Join multiple commits into single one;</p>
-
-    <pre>
-    $ git log --oneline
-    $ git rebase -i oldest_commit_to_rewrite
-    </pre>
-
-    <h3 id="logdiff">2.2. Logs, diff commits</h3>
-
-    <p>Create patch files to target branch/tag/ref;</p>
-
-    <pre>
-    $ git format-patch --no-prefix software-v0.0.1
-    </pre>
-
-    <p>Same using diff command;</p>
-
-    <pre>
-    $ diff -u orig file > file.patch
-    </pre>
-
-    <h3 id="remote">2.3. Working with remotes</h3>
-
-    <p>Adding a new remote;</p>
-
-    <pre>
-    $ git remote add newremotename https://machine.example.org/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>
+    <h1>Git</h1>
 
-    <pre>
-    $ git remote prune origin
-    </pre>
+    <p>Git user documentation.</p>
+
+	<ul>
+            <li><a href="install.html">1. Install and configure</a></li>
+	    <li><a href="work.html">2. Work.</a>
+		<ul>
+	            <li><a href="work.html#local">2.1. Local workflow</a>
+		    <li><a href="work.html#logdiff">2.2. Logs and commits</a></li>
+		    <li><a href="work.html#remote">2.3. Working with remotes</a></li>
+		</ul>
+	    </li>
+
+	    <li><a href="branch.html">3. Branches</a>
+		<ul>
+		    <li><a href="branch.html#teamwork">3.1. Team workflow</a></li>
+		    <li><a href="branch.html#feature">3.2. Feature</a></li>
+		    <li><a href="branch.html#release">3.3. Release</a></li>
+		    <li><a href="branch.html#tags">3.4. Tags</a></li>
+		    <li><a href="branch.html#hotfix">3.5. Hotfix</a></li>
+		</ul>
+	    </li>
+	</ul>
 
     <a href="../index.html">Development Index</a>
+
     <p>This is part of the Hive System Documentation.
-    Copyright (C) 2018
+    Copyright (C) 2019
     Hive Team.
     See the file <a href="../../fdl-1.3-standalone.html">Gnu Free Documentation License</a>
     for copying conditions.</p>
diff --git a/dev/git/install.html b/dev/git/install.html
new file mode 100644
index 0000000..6a42abd
--- /dev/null
+++ b/dev/git/install.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html dir="ltr" lang="en">
+    <head>
+    <meta charset='utf-8'>
+    <title>1. Install git</title>
+</head>
+<body>
+
+    <a href="index.html">Git Index</a>
+
+    <h1>1. Install Git</h1>
+
+    <p>Install git;</p>
+
+    <pre>
+    $ sudo prt-get depinst git
+    </pre>
+
+    <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>If you want to disable pager / paging you can set globally;</p>
+
+    <pre>
+    $ git config --global core.pager cat
+    </pre>
+
+    <p>Paging based on output size with less;</p>
+
+    <pre>
+    $ git config --global core.pager "less -F -X"
+    </pre>
+
+    <p>Use <a href="../../tools/vim.html#vimdiff">vimdiff</a> as diff and merge tool;</p>
+
+    <pre>
+    $ git config --global diff.tool vimdiff
+    $ git config --global merge.tool vimdiff
+    $ git config --global difftool.prompt false
+    </pre>
+
+    <a href="index.html">Git Index</a>
+    <p>This is part of the Hive System Documentation.
+    Copyright (C) 2019
+    Hive Team.
+    See the file <a href="../../fdl-1.3-standalone.html">Gnu Free Documentation License</a>
+    for copying conditions.</p>
+</body>
+</html>
diff --git a/dev/git/work.html b/dev/git/work.html
new file mode 100644
index 0000000..7f97af5
--- /dev/null
+++ b/dev/git/work.html
@@ -0,0 +1,164 @@
+<!DOCTYPE html>
+<html dir="ltr" lang="en">
+<head>
+    <meta charset='utf-8'>
+    <title>Work</title>
+</head>
+<body>
+
+    <a href="index.html">Git Index</a>
+
+    <h1>1. Work</h1>
+
+    <p>Git is very easy to use and very useful to keep information in text or other formats. To start using just go to a directory where you will test git, add some files and;
+
+    <pre>
+$ git init
+    </pre>
+
+    <p>This initiates git directory and configuration files for this repository, you can see new directory ".git/". The next command says the status of your working directory, since no files have been added it will report "untracked files";</p>
+
+    <pre>
+$ git status
+    </pre>
+
+    <p>Add all files to start tracking them;</p>
+
+    <pre>
+$ git add .
+    </pre>
+
+    <p>Run again git status, it should report that new files have been added;</p>
+
+    <pre>
+$ git status
+    </pre>
+
+    <p>If you change any file it will report that the file have been changed at this moment, new changes can be added to current state of the files for the next commit. To commit;</p>
+
+    <pre>
+$ git commit -m "initial commit"
+    </pre>
+
+    <h2 id="local">2.1. Local workflow</h2>
+
+    <p>Check ~/.bashrc for glog alias, help to check branches and their commit history;</p>
+
+    <pre>
+# Git log
+glog () {
+    git log --stat --decorate
+}
+# Git graph log
+gloga () {
+    git log --graph --abbrev-commit --decorate --date=relative --all
+}
+    </pre>
+
+    <p>Mark all deleted to commit;</p>
+
+    <pre>
+    $ git ls-files --deleted -z | xargs -0 git rm
+    </pre>
+
+    <p>Query last commit that affected current file 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>
+
+    <p>Join multiple commits into single one;</p>
+
+    <pre>
+    $ git log --oneline
+    $ git rebase -i oldest_commit_to_rewrite
+    </pre>
+
+    <h2 id="logdiff">2.2. Logs, diff commits</h2>
+
+    <p>Create patch files to target branch/tag/ref;</p>
+
+    <pre>
+    $ git format-patch --no-prefix software-v0.0.1
+    </pre>
+
+    <p>Same using diff command;</p>
+
+    <pre>
+    $ diff -u orig file > file.patch
+    </pre>
+
+    <h2 id="remote">2.3. Working with remotes</h2>
+
+    <p>Adding a new remote;</p>
+
+    <pre>
+    $ git remote add newremotename https://machine.example.org/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>
+
+    <p>When using gitolite as remote, check following documentation;</p>
+
+    <ul>
+        <li>Permission related problems check if correct
+            <a href="../../tools/gitolite.html#adminusers">user account</a>
+            exists on git server or is public readable.
+        </li>
+        <li>Repository related problems check if exists or
+            <a href="../../tools/gitolite.html#adminrep">create one</a>
+            user permissions.
+        </li>
+        <li>Local user account and configuration check correct
+            <a href="../../tools/openssh.html#sshid">ssh identities</a>,
+            and profile alias have been setup.
+        </li>
+    </ul>
+
+    <a href="index.html">Git Index</a>
+    <p>This is part of the Hive System Documentation.
+    Copyright (C) 2019
+    Hive Team.
+    See the file <a href="../../fdl-1.3-standalone.html">Gnu Free Documentation License</a>
+    for copying conditions.</p>
+</body>
+</html>