commit d7118ce6161d518f1ecde95222ab62ee09a74796
parent f92d5f88257ab106b2837ff4293aa19122ca987f
Author: lostd <lostd@2f30.org>
Date: Wed, 19 Feb 2014 19:11:21 +0200
Add the git guide by sin@ for us CVS dinosaurs
Diffstat:
3 files changed, 155 insertions(+), 8 deletions(-)
diff --git a/guides.md b/guides.md
@@ -0,0 +1,5 @@
+Just some notes on various useful tasks.
+
+ * [openvpn](guides/openvpn.html): Configuring an OpenVPN proxy on OpenBSD
+ * [icecast](guides/icecast.html): Using icecast and mpd for web radio on OpenBSD
+ * [git](guides/git.html): Simple git guide for CVS users
diff --git a/guides.shtml b/guides.shtml
@@ -1,8 +0,0 @@
-<p>Just some notes on various useful tasks.</p>
-
-<ul>
-<li><a href="guides/openvpn.html">openvpn</a>:
-Configuring an OpenVPN proxy on OpenBSD</li>
-<li><a href="guides/icecast.html">icecast</a>:
-Using icecast and mpd for web radio on OpenBSD</li>
-</ul>
diff --git a/guides/git.md b/guides/git.md
@@ -0,0 +1,150 @@
+### Simple git guide for CVS users
+
+#### 0x0. Set up your user name + email.
+
+ $ git config --global user.name "you"
+ $ git config --global user.email "you@yourserver.org"
+ $ git config --global push.default simple
+
+This will create ~/.gitconfig.
+
+#### 0x1. Centralized workflow - basic notions
+
+Git avoids touching the network as much as possible. The few basic
+commands that require network access are as shown below.
+
+ * git-clone(1) # clone a repo for the first time
+ * git-push(1) # push your branch
+ * git-pull(1) # fetch compressed deltas and merge into current branch
+
+In git you can have tracked and untracked files. In git you have 3
+types of changes. If you modify a tracked file you have *modified*
+the file. When you do git-add(1) you stage the file. Finally
+with git-commit(1) you commit your change into your local branch.
+
+Staging is important if you have modified one or many files and you
+want to select a subset of those changes to commit. This makes it
+easy to break down your patches and organize them as needed. Ideally
+each patch is useful on its own and unrelated changes are grouped in
+separate patches. For more information look at the -p flag for
+git-add(1).
+
+For more advanced operations you should *always* know what state git
+is in. You can query that with git-status(1). If you are in the
+middle of a merge and you forgot about it, git-status(1) will remind
+you. Use git-status(1) frequently.
+
+#### 0x2. Centralized git workflow
+
+To clone a repo:
+
+ $ git clone you@yourserver.org:myrepo.git
+
+To update your repo:
+
+ $ git pull
+
+ If you have local changes the fetch/merge will proceed as expected.
+ You can retain your local changes even if they are not committed.
+ If you have a merge conflict, resolve it by hand and use git-add(1)
+ and git-commit(1). The history will continue to be linear in case
+ of a fast-forward merge.
+
+To look at the commit history and the contents of each patch:
+
+ $ git log -p
+
+To commit your changes:
+
+ $ git commit -am 'Initial import'
+
+ This will add all modified/deleted files and commit them locally.
+ New files are not added.
+
+To add new files/directories:
+
+ $ git add <file|dir>
+ $ git commit -m 'awesome'
+
+To push your changes to the remote branch:
+
+ $ git push
+
+To push a specific branch:
+
+ $ git push origin mybranch
+
+To show a diff between your modified files and the HEAD commit in your branch:
+
+ $ git diff
+
+To show the staged changes (the changes to be committed upon git-commit(1)):
+
+ $ git diff --cached
+
+To unstage changes:
+
+ $ git reset <file|dir>
+
+To remove a tracked file/dir:
+
+ $ git rm -r <file|dir>
+
+ This will also stage the change. You can just git-commit(1) at this point.
+
+To rename a tracked file/dir:
+
+ $ git mv <src> <dst>
+
+ This will also stage the change. You can just git-commit(1) at this point.
+
+To revert a modified file/dir to whatever is in HEAD:
+
+ $ git checkout <file|dir>
+
+To change the contents of your last commit:
+
+ $ # change files
+ $ git add <files>
+ $ git commit --amend
+
+To generate git patch files:
+
+ $ git format-patch -1
+
+ This will generate the patch file for the last commit. You
+ can use git format-patch -<n> for the last *n* commits.
+
+To apply a git patch file:
+
+ $ git am mypatch.patch
+
+For a simple workflow you can avoid using the staging area completely.
+Just use the -am option for git-commit(1) so you can stage and commit
+everything in one step.
+
+#### 0x3. Set up a server-side bare repo for your project
+
+To create a new repo in your home directory:
+
+ $ cd
+ $ cp -r /tmp/myproject myrepo
+ $ cd myrepo
+ $ git init
+ Initialized empty Git repository in /home/you/myrepo/.git/
+ $ git add *
+ $ git commit -m 'Initial import'
+ $ cd
+ $ # We do not need an unpacked repo, just a bare one
+ $ # no need to waste disk space
+ $ git clone --bare myrepo myrepo.git
+ $ rm -rf myrepo
+
+Assuming your ssh-keys are in place, you can now clone myrepo.git
+just by doing:
+
+ $ git clone you@yourserver.org:myrepo.git
+
+bye!
+
+sin