diff options
-rw-r--r-- | dev/git.html | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/dev/git.html b/dev/git.html new file mode 100644 index 0000000..fdae528 --- /dev/null +++ b/dev/git.html @@ -0,0 +1,242 @@ +<!DOCTYPEhtml> +<htmldir="ltr" lang="en"> +<head> + <meta charset='utf-8'> + <title>Git</title> +</head> +<body> + + <a href="index.html">Dev 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> + + <h2 id="teamwork">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> + + <pre> + $ git clone devbox:atom + $ git remote -v + </pre> + + + <h3>Main Branches;</h3> + + <dl> + <dt>master</dt> + <dd>Current official stable release history.</dd> + <dt>release</dt> + <dd>Next release, new features not allowed.</dd> + <dt>develop</dt> + <dd>Integration branch for features.</dd> + </dl> + + <h3>Add-on Branches;</h3> + + <dl> + <dt>feature</dt> + <dd>New features, improvement proposal, tests, etc...</dd> + <dt>hotfix</dt> + <dd>Hotfix is branched of master and should only contain isolated bugfixes.</dd> + </dl> + + <h2 id="feature">Feature</h2> + + <p>Create a branch 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;</p> + + <pre> + $ git branch -m featurex feature-x + </pre> + + <p>Rename remote branch;</p> + + <pre> + $ git push origin :featurex feature-x + $ git push origin -u feature-x + </pre> + + <p>Merge branch feature into develop;</p> + + <pre> + $ git checkout develop + Switched to branch 'develop' + $ git merge --no-ff feature-x + Updating ea1b82a..05e9557 + (Summary of changes) + $ git push origin develop + </pre> + + <p>Delete Local;</p> + + <pre> + $ git branch -D feature-x + </pre> + + <p>Delete Remote</p> + + <pre> + $ git push origin :feature-x + </pre> + + <h2 id="release">Release</h2> + + <pre> + $ git checkout -b release-1.2 develop + Switched to a new branch "release-1.2" + $ ./bump-version.sh 1.2 + Files modified successfully, version bumped to 1.2. + $ git commit -a -m "Bumped version number to 1.2" + [release-1.2 74d9424] Bumped version number to 1.2 + 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 release-1.2 + Merge made by recursive. + (Summary of changes) + $ git tag -a 1.2 + </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 release-1.2 + Merge made by recursive. + (Summary of changes) + </pre> + + <h2 id="hotfix">Hotfix</h2> + + <p>This branch should never exist, ;)</p> + + <pre> + $ git checkout -b hotfix-1.2.1 master + $ ./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" + </pre> + + <pre> + $ git commit -m "Commit severe fixes" + </pre> + + <pre> + $ git checkout master + Switched to branch 'master' + $ git merge --no-ff release-1.2.1 + Merge made by recursive. + (Summary of changes) + $ git tag -a 1.2.1 + </pre> + + <p>Conflict will happen in next step</p> + + <pre> + $ git checkout develop + Switched to branch 'develop' + $ git merge --no-ff release-1.2.1 + Merge made by recursive. + (Summary of changes) + </pre> + + <pre> + $ git -D hotfix-1.2.1 + </pre> + + <h2 id="tags">Tags</h2> + + <pre> + $ git tag -m "this commit is tagged" -a "v1.8" + $ git push --follow-tags + </pre> + + <p>Delete local and remote tag;</p> + + <pre> + $ git tag -d v1.8 + $ git push origin :refs/tags/v1.8 + </pre> + + <h2 id="local">Local Workflow</h2> + + <p>Mark all deleted to commit;</p> + + <pre> + $ git ls-files --deleted -z | xargs -0 git rm + </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> + + <a href="index.html">Dev Index</a> + <p>This is part of the SysDoc Manual. + Copyright (C) 2016 + Silvino Silva. + See the file <a href="../fdl-1.3-standalone.html">Gnu Free Documentation License</a> + for copying conditions.</p> + + +</body> +</html> |