diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6fb3e4c13c0f6c3eeef587b47004ae23412935bd..ffafb926bc9b821ddea266715d3ad8ca4f0fd664 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -30,8 +30,6 @@ project("Nebula Graph" C CXX)
 
 set(CMAKE_SKIP_RPATH TRUE)
 
-set(CMAKE_VERBOSE_MAKEFILE TRUE)
-
 option(SKIP_JAVA_CLIENT "Whether to skip building the java client" OFF)
 option(ENABLE_JEMALLOC "Whether to link jemalloc to all executables" ON)
 option(ENABLE_NATIVE "Whether to build native client" OFF)
@@ -72,6 +70,20 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "_build")
 set(NEBULA_HOME ${CMAKE_CURRENT_SOURCE_DIR})
 add_definitions(-DNEBULA_HOME=${NEBULA_HOME})
 
+find_package(Git)
+if (GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
+    execute_process(
+        COMMAND
+        ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse --short HEAD
+        OUTPUT_VARIABLE GIT_INFO_SHA
+    )
+endif()
+
+if (GIT_INFO_SHA)
+    string(REGEX REPLACE "[^0-9a-f]+" "" GIT_INFO_SHA "${GIT_INFO_SHA}")
+    add_definitions(-DGIT_INFO_SHA=${GIT_INFO_SHA})
+endif()
+
 # To include customized FindXXX.cmake modules
 set(CMAKE_MODULE_PATH "${NEBULA_HOME}/cmake" ${CMAKE_MODULE_PATH})
 
diff --git a/src/console/NebulaConsole.cpp b/src/console/NebulaConsole.cpp
index 1b5216edb2fb385cccb4a599e9acf911e8df0d7c..ab918bf5e69a86fe638372ccf9b79e000190f708 100644
--- a/src/console/NebulaConsole.cpp
+++ b/src/console/NebulaConsole.cpp
@@ -15,6 +15,7 @@ DEFINE_string(p, "", "Password used to authenticate");
 
 
 int main(int argc, char *argv[]) {
+    google::SetVersionString(nebula::versionString());
     folly::init(&argc, &argv, true);
 
     using nebula::graph::CliManager;
diff --git a/src/daemons/GraphDaemon.cpp b/src/daemons/GraphDaemon.cpp
index c04d0500c3a5e998cf499fc61cabd8089cdbae4e..c55081524192ac9ac5b9870c19851ebcb86a74dd 100644
--- a/src/daemons/GraphDaemon.cpp
+++ b/src/daemons/GraphDaemon.cpp
@@ -27,11 +27,11 @@ static void signalHandler(int sig);
 static Status setupSignalHandler();
 static Status setupLogging();
 static void printHelp(const char *prog);
-static void printVersion();
 
 DECLARE_string(flagfile);
 
 int main(int argc, char *argv[]) {
+    google::SetVersionString(nebula::versionString());
     if (argc == 1) {
         printHelp(argv[0]);
         return EXIT_FAILURE;
@@ -41,10 +41,6 @@ int main(int argc, char *argv[]) {
             printHelp(argv[0]);
             return EXIT_SUCCESS;
         }
-        if (::strcmp(argv[1], "-v") == 0) {
-            printVersion();
-            return EXIT_SUCCESS;
-        }
     }
 
     folly::init(&argc, &argv, true);
@@ -213,12 +209,5 @@ Status setupLogging() {
 
 
 void printHelp(const char *prog) {
-    fprintf(stderr, "%s -flagfile config_file\n", prog);
-    fprintf(stderr, "%s -h\n", prog);
-    fprintf(stderr, "%s -v\n", prog);
-}
-
-
-void printVersion() {
-    // TODO(dutor)
+    fprintf(stderr, "%s --flagfile <config_file>\n", prog);
 }