             launchPath: "/usr/bin/env",
             arguments: ["git"] + arguments)
     }
+    
+    static func commitAll(with message: String) throws {
+        guard GitTask(arguments: ["commit", "-a", "-m", message]).excute() else {
+            throw TaskError()
+        }
+    }
+}
+
+class HubTask: Task {
+    convenience init(arguments: [String] = []) {
+        self.init(
+            launchPath: "/usr/bin/env",
+            arguments: ["hub"] + arguments)
+    }
+    
+    static func version() throws {
+        guard HubTask(arguments: ["version"]).excute() else {
+            throw TaskError()
+        }
+    }
+    
+    static func pullRequest(with message: String) throws {
+        try version()
+        guard HubTask(arguments: [
+            "pull-request",
+            "-b", "leancloud:master",
+            "-m", message,
+            "-p", "-o"])
+            .excute() else {
+                throw TaskError()
+        }
+    }
 }
 
 class PodTask: Task {

    var description: String {
        return self._description
    }
    let _description: String
    init(description: String = "",
         _ file: String = #file,
         _ function: String = #function,

        destination: String? = nil)
        throws
    {
        var arguments: [String] = [
            "-project", project,
            "-scheme", scheme,
