implement init command
diff --git a/git-flow b/git-flow
index a3ec592..04868aa 100755
--- a/git-flow
+++ b/git-flow
@@ -22,6 +22,7 @@
 export MASTER_BRANCH=$(git config --get gitflow.branch.master || echo master)
 export DEVELOP_BRANCH=$(git config --get gitflow.branch.develop || echo develop)
 export ORIGIN=$(git config --get gitflow.origin || echo origin)
+export README=$(git config --get gitflow.readme || echo README)
 
 warn() { echo "$@" >&2; }
 die() { warn "$@"; exit 1; }
@@ -36,6 +37,7 @@
 	echo "gitflow, version $GITFLOW_VERSION"
 	echo
 	echo "usage: git flow <cmd> <type> <args>"
+	echo "       git flow init [<url>]"
 	echo
 	echo "<type> can be any of: feature, release, hotfix, support"
 	echo
@@ -43,15 +45,20 @@
 }
 
 main() {
-	if [ $# -lt 2 ]; then
+	if [ $# -lt 1 ]; then
 		usage
 		exit 1
 	fi
 
 	# sanity checks
-	ACTION="$1"
-	BTYPE="$2"
-	shift 2
+	ACTION="$1"; shift
+
+	if [ "$ACTION" = "init" ]; then
+		gitflow_init "$@"
+		exit 0
+	fi
+
+	BTYPE="$1"; shift
 
 	if [ ! -e "$GITFLOW_DIR/git-flow-$BTYPE" ]; then
 		usage
@@ -79,6 +86,60 @@
 	cmd_$ACTION "$@"
 }
 
+gitflow_init() {
+	echo
+	echo "Summary of actions:"
+
+	if ! git rev-parse --git-dir &>/dev/null; then
+		git init --quiet
+		echo "- A new git repository at $PWD was created"
+	fi
+
+	if ! git rev-parse --quiet --verify HEAD >/dev/null; then
+		touch $README
+		git add $README
+		git commit --quiet -m "initial commit"
+		if [ "$MASTER_BRANCH" != "master" ]; then
+			git branch -m master $MASTER_BRANCH
+		fi
+		echo "- An initial commit was created at branch '$MASTER_BRANCH'"
+	fi
+
+	if ! git rev-parse --verify $MASTER_BRANCH &>/dev/null; then
+		die "Cannot find your master branch. Try: git branch -m <mymaster> $MASTER_BRANCH"
+	fi
+
+	gitflow_check_clean_working_tree
+
+	if git remote | grep -q $ORIGIN; then
+		git fetch -q $ORIGIN
+		gitflow_require_branches_equal $MASTER_BRANCH $ORIGIN/$MASTER_BRANCH
+	fi
+
+	if git rev-parse --verify $DEVELOP_BRANCH &>/dev/null; then
+		gitflow_require_branches_equal $DEVELOP_BRANCH $ORIGIN/$DEVELOP_BRANCH
+	else
+		git checkout -q -b $DEVELOP_BRANCH $MASTER_BRANCH
+		echo "- A new branch '$DEVELOP_BRANCH' was created"
+		echo "- You are now on branch '$DEVELOP_BRANCH'"
+	fi
+
+	if ! git remote | grep -q $ORIGIN; then
+		if [ "$1" = "" ]; then
+			echo "- No remote location was added. Try: git remote add $ORIGIN <url>"
+		else
+			git remote add $ORIGIN $1
+			echo "- A new remote location '$1' was added"
+		fi
+	fi
+
+	echo
+
+	if git remote | grep -q $ORIGIN; then
+		git push $ORIGIN $MASTER_BRANCH $DEVELOP_BRANCH
+	fi
+}
+
 gitflow_check_clean_working_tree() {
 	if ! git diff --no-ext-diff --ignore-submodules --quiet --exit-code; then
 		die "Working tree contains unstaged changes. Aborting ..."