我正在尝试从Go调用git shortlog
来获取输出,但是我遇到了麻烦。
这是一个如何使用git log
做到这一点的有效示例:
package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
runBasicExample()
}
func runBasicExample() {
cmdOut, err := exec.Command("git", "log").Output()
if err != nil {
fmt.Fprintln(os.Stderr, "There was an error running the git command: ", err)
os.Exit(1)
}
output := string(cmdOut)
fmt.Printf("Output: \n%s\n", output)
}
给出预期的输出:
$> go run show-commits.go
Output:
commit 4abb96396c69fa4e604c9739abe338e03705f9d4
Author: TheAndruu
Date: Tue Aug 21 21:55:07 2018 -0400
Updating readme
git shortlog
来做到这一点。由于某种原因……我只是无法使其与shortlog一起使用。再次是该程序,唯一的变化是git命令行:
package main
import (
"fmt"
"os"
"os/exec"
)
func main() {
runBasicExample()
}
func runBasicExample() {
cmdOut, err := exec.Command("git", "shortlog").Output()
if err != nil {
fmt.Fprintln(os.Stderr, "There was an error running the git command: ", err)
os.Exit(1)
}
output := string(cmdOut)
fmt.Printf("Output: \n%s\n", output)
}
空输出:
$> go run show-commits.go
Output:
我可以直接从命令行运行git shortlog
,它似乎工作正常。检查docs后,我被认为是'shortlog'命令是git本身的一部分。
有人可以指出我可以做些什么吗?
谢谢
答案 0 :(得分:6)
结果是,我能够通过重新阅读git docs
找到答案答案在这一行:
如果没有在命令行上传递任何修订,并且标准输入不是终端,或者没有当前分支,则git shortlog将输出从标准输入读取的日志的摘要,而无参考到当前存储库。
尽管我可以从终端运行git shortlog
并看到预期的输出,但通过exec()
命令运行时,我需要指定分支。
因此,在以上示例中,我在命令参数中添加了“ master”,如下所示:
cmdOut, err := exec.Command("git", "shortlog", "master").Output()
一切都按预期进行。