【发布时间】:2022-12-16 04:50:16
【问题描述】:
我正在尝试执行下面提到的代码。代码创建一个分支,然后从工作树目录完成工作树和提交
代码失败并出现以下错误:
error= exit status 1
如果我直接从命令行执行提交(Cmd3),它工作正常:
sh-3.2# /usr/bin/git -C /Users/gitissue/folder1/Outer commit -m Commiting-from-folder1-Outer
On branch Outer
nothing to commit, working tree clean
脚步:
- 创建文件夹 /Users/gitissue
- cd /用户/gitissue
- git 初始化
- 触摸t.txt
- git 添加 .
- git commit -m “提交”
- mkdir -p /Users/gitissue/folder1
- 执行下面提到的go代码
环境细节:
- 苹果操作系统
- git 版本 2.37.0
- go版本go1.18.1 darwin/amd64
代码:
package main import ( "fmt" "io" exec "os/exec" ) func main() { Cmd := exec.Command("git", "-C", "/Users/gitissue", "branch", "Outer") fmt.Print("Cmd1= " + Cmd.String()) err := execBashCmd(Cmd) if err != nil { fmt.Print("error1= " + err.Error()) } Cmd = exec.Command("git", "-C", "/Users/gitissue/folder1", "worktree", "add", "Outer", "Outer") fmt.Print("Cmd2= " + Cmd.String()) err = execBashCmd(Cmd) if err != nil { fmt.Print("error2= " + err.Error()) } Cmd = exec.Command("git", "-C", "/Users/gitissue/folder1/Outer", "commit", "-m", "Commiting-from-folder1-Outer") fmt.Print("Cmd3= " + Cmd.String()) err = execBashCmd(Cmd) if err != nil { fmt.Print("error3= " + err.Error()) } } func execBashCmd(cmd *exec.Cmd) error { stderr, _ := cmd.StderrPipe() if err := cmd.Start(); err != nil { fmt.Print("error= " + err.Error()) } slurp, _ := io.ReadAll(stderr) fmt.Printf("%s\n", slurp) if slurp != nil { } if err := cmd.Wait(); err != nil { fmt.Print("error= " + err.Error()) return err } return nil}
以上代码的输出:
Cmd1= /usr/bin/git -C /Users/gitissue branch Outer Cmd2= /usr/bin/git -C /Users/gitissue/folder1 worktree add Outer OuterPreparing worktree (checking out 'Outer') Cmd3= /usr/bin/git -C /Users/gitissue/folder1/Outer commit -m Commiting-from-folder1-Outer error= exit status 1error3= exit status 1
【问题讨论】:
-
从每个命令中获取
CombinedOutput,看看是什么导致它出错。 -
error= exec: already startedpanic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x1075854]
cmd.Wait()应该关闭它,对吧?我尝试添加一些 time.sleep(),但没有帮助 -
您的代码没有并发性,所以我不明白为什么睡眠会有所帮助。该输出意味着你在某处有一个
nil值,它应该在你的代码的原始输出中。 -
相关的,甚至可能是复制品:How to git commit nothing without an error?
-
Cmd = exec.Command("git", "-C", "/Users/gitissue/folder1/Outer", "commit", "-m", "Commiting-from-folder1-Outer")stdoutStderr, err := Cmd.CombinedOutput()
标签: git go git-worktree