猿问

从其他目录的 Go 中获取 Git 状态

我需要从其他目录获取已修改文件的列表。


func main() {

    log.Println("Starting Site map")

    dir := "/media/my_path/ubuntu/"


    git0 := "git --git-dir=" + dir + ".git --work-tree=" + dir + " status"

    log.Println(git0) //<-- works when pasted in console

    cmd0 := exec.Command("git", git0)

    status0, err := cmd0.Output()

    if err != nil {

        log.Println(whereami.WhereAmI(), err)

    }

    log.Println(status0)


    git := "git --git-dir=" + dir + ".git --work-tree=" + dir

    log.Println(git)

    cmd := exec.Command("git", "status", git)

    status, err := cmd.Output()

    if err != nil {

        log.Println(whereami.WhereAmI(), err)

    }

    log.Println(status)

    log.Println("End Site map")

}

I 有以下输出:


2021/05/24 11:38:07 Starting Site map

2021/05/24 11:38:07 git --git-dir=/media/my_path/ubuntu/.git --work-tree=/media/my_path/ubuntu/ status

2021/05/24 11:38:07 File: main.go  Function: main.main Line: 19 exit status 1

2021/05/24 11:38:07 []

2021/05/24 11:38:07 git --git-dir=/media/my_path/ubuntu/.git --work-tree=/media/my_path/ubuntu/

2021/05/24 11:38:07 File: main.go  Function: main.main Line: 28 exit status 128

2021/05/24 11:38:07 []

2021/05/24 11:38:07 End Site map

此命令:粘贴到控制台时工作正常。git --git-dir=/media/my_path/ubuntu/.git --work-tree=/media/my_path/ubuntu/ status


预期的结果将是包含已修改文件的数组。


拉丁的传说
浏览 159回答 2
2回答

慕工程0101907

exec.Command接受一个命令和一些参数。你用“git”来称呼它,然后是“git...”。作为参数,其执行方式如下git&nbsp;"git&nbsp;--git-dir&nbsp;…"这是行不通的。不要在参数中重复该命令。使用单个参数。提供 git 命令的路径。每个参数都应该是一个单独的字符串逗号分隔。exec.Command("/path/to/git",&nbsp;"--git-dir="&nbsp;+&nbsp;dir&nbsp;+&nbsp;".git",&nbsp;"--work-tree="&nbsp;+&nbsp;dir,&nbsp;"status")

慕森王

这对我有用:package mainimport (&nbsp; &nbsp;"os"&nbsp; &nbsp;"os/exec")func main() {&nbsp; &nbsp;c := exec.Command("git", "status")&nbsp; &nbsp;c.Dir = "/media/my_path/ubuntu"&nbsp; &nbsp;c.Stdout = os.Stdout&nbsp; &nbsp;c.Run()}https://golang.org/pkg/os/exec#Cmd.Dir
随时随地看视频慕课网APP

相关分类

Go
我要回答