git - 从不同的目录从 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")
}
我有以下输出:
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
粘贴到控制台时可以正常工作。
预期的结果将是包含修改文件的数组。
解决方案
这对我有用:
package main
import (
"os"
"os/exec"
)
func main() {
c := exec.Command("git", "status")
c.Dir = "/media/my_path/ubuntu"
c.Stdout = os.Stdout
c.Run()
}
推荐阅读
- javascript - 如何将每个对象值从json推送到数组中?
- node.js - Firebase - 我们与 Stripe 的连接发生错误
- c# - 如何使用 wpf 在数据网格的特定单元格中复制值
- php - 图片上传到数据库参考原始名称
- android - 如何以编程方式将文本元素添加到我的小部件/类?
- opencv - OpenCV VideoWriter 不写入 Output.avi
- javascript - Ajax/PageMethod 都返回完整页面 HTML 而不是执行 webmethod 并正确返回
- angular - 如何将复选框动态添加到角度形式(Angular 4)
- tensorflow - 为什么在训练我的模型时我在 Keras 中的损失没有改变?
- php - Silverstripe 4 中的 GroupedList,按 many_many_extrafield 分组