吾八哥博客

您现在的位置是:首页 > 码农手记 > Golang > 正文

Golang

golang里实现获取当前git仓库、分支的方法

吾八哥2020-04-12Golang5120

需要写一个获取当前git仓库的地址和分支的方法,这里想到的最快的方法就是通过命令行的形式,关键代码如下:

package git

import (
	"fmt"
	"os/exec"
	"strings"
)

// ExecShell ...
func ExecShell(command string, arg ...string) (out string, err error) {
	var Stdout []byte
	cmd := exec.Command(command, arg...)
	Stdout, err = cmd.CombinedOutput()
	out = string(Stdout)
	return
}

// Repo ...
func Repo() (repo string, err error) {
	var (
		out string
	)
	if out, err = ExecShell("/bin/sh", "-c", "git remote -v"); err != nil {
		return
	}
	if repo = out[strings.Index(out, ":")+1 : strings.Index(out, ".git")]; repo == "" {
		err = fmt.Errorf("not found, %s", out)
		return
	}
	return
}

// Branch ...
func Branch() (branch string, err error) {
	var (
		out string
	)
	if out, err = ExecShell("/bin/sh", "-c", "git branch"); err != nil {
		return
	}
	list := strings.Split(out, "\n")
	for _, v := range list {
		if strings.HasPrefix(v, "*") {
			branch = v[strings.Index(v, "*")+2:]
			return
		}
	}
	err = fmt.Errorf("not found, %s", out)
	return
}

调用方式如下:

func main() {
	repo, err := git.Repo()
	if err != nil {
		return
	}
	fmt.Println("仓库:" + repo)

	branch, err := git.Branch()
	if err != nil {
		return
	}
	fmt.Println("分支:" + branch)
}