diff --git a/.fswatch.json b/.fswatch.json
new file mode 100644
index 0000000000..81243ebc3f
--- /dev/null
+++ b/.fswatch.json
@@ -0,0 +1,20 @@
+{
+    "paths": ["."],
+    "depth": 2,
+    "exclude": [
+        "^gogs$",
+        "~$",
+        "\\.swp$",
+        "\\.exe$",
+        "\\.swx$",
+        ".*\\.log$"
+    ],
+    "include": ["\\.go$"],
+    "command": [
+        "bash", "-c", "go build && ./gogs web"
+    ],
+    "env": {
+        "POWERED_BY": "github.com/shxsun/fswatch"
+    },
+    "enable-restart": false
+}
diff --git a/models/models.go b/models/models.go
index 0ad863371c..ee96207d10 100644
--- a/models/models.go
+++ b/models/models.go
@@ -18,7 +18,9 @@ import (
 )
 
 var (
-	orm       *xorm.Engine
+	orm    *xorm.Engine
+	tables []interface{}
+
 	HasEngine bool
 
 	DbCfg struct {
@@ -28,6 +30,11 @@ var (
 	UseSQLite3 bool
 )
 
+func init() {
+	tables = append(tables, new(User), new(PublicKey), new(Repository), new(Watch),
+		new(Action), new(Access), new(Issue), new(Comment), new(Oauth2))
+}
+
 func LoadModelsConfig() {
 	DbCfg.Type = base.Cfg.MustValue("database", "DB_TYPE")
 	if DbCfg.Type == "sqlite3" {
@@ -58,9 +65,7 @@ func NewTestEngine(x *xorm.Engine) (err error) {
 	if err != nil {
 		return fmt.Errorf("models.init(fail to conntect database): %v", err)
 	}
-
-	return x.Sync(new(User), new(PublicKey), new(Repository), new(Watch),
-		new(Action), new(Access), new(Issue), new(Comment))
+	return x.Sync(tables...)
 }
 
 func SetEngine() (err error) {
@@ -102,9 +107,9 @@ func SetEngine() (err error) {
 func NewEngine() (err error) {
 	if err = SetEngine(); err != nil {
 		return err
-	} else if err = orm.Sync(new(User), new(PublicKey), new(Repository), new(Watch),
-		new(Action), new(Access), new(Issue), new(Comment)); err != nil {
-		return fmt.Errorf("sync database struct error: %v", err)
+	}
+	if err = orm.Sync(tables...); err != nil {
+		return fmt.Errorf("sync database struct error: %v\n", err)
 	}
 	return nil
 }
diff --git a/start.sh b/start.sh
index 331d340cda..3b974378e5 100755
--- a/start.sh
+++ b/start.sh
@@ -1,6 +1,15 @@
-#!/bin/bash -
+#!/bin/sh -
+# Copyright 2014 The Gogs Authors. All rights reserved.
+# Use of this source code is governed by a MIT-style
+# license that can be found in the LICENSE file.
 #
 # start gogs web
 #
-cd "$(dirname $0)"
-./gogs web
+IFS=' 
+	'
+PATH=/bin:/usr/bin:/usr/local/bin
+HOME=${HOME:?"need \$HOME variable"}
+USER=$(whoami)
+export USER HOME PATH
+
+cd "$(dirname $0)" && exec ./gogs web
diff --git a/web.go b/web.go
index 00fa72cbce..86c395e7bd 100644
--- a/web.go
+++ b/web.go
@@ -88,7 +88,7 @@ func runWeb(*cli.Context) {
 	m.Get("/avatar/:hash", avt.ServeHTTP)
 
 	m.Group("/user", func(r martini.Router) {
-		// r.Any("/login/github", user.SocialSignIn)
+		r.Any("/login/github", user.SocialSignIn)
 		r.Any("/login", binding.BindIgnErr(auth.LogInForm{}), user.SignIn)
 		r.Any("/sign_up", binding.BindIgnErr(auth.RegisterForm{}), user.SignUp)
 		r.Any("/forget_password", user.ForgotPasswd)