直接回答:用 time.Ticker 配一个死循环、每轮执行 git pull,再用 os/exec 判断输出里有没有文件变化,就能做一个轻量的仓库自动同步进程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| package main
import ( "bufio" "fmt" "io" "os/exec" "time" )
func main() { ticker := time.NewTicker(time.Second * 5) ch := make(chan int, 1) go func() { for _ = range ticker.C { execCmd("git", []string{"pull"}) } }() <-ch }
func execCmd(shell string, raw []string) (int, error) { cmd := exec.Command(shell, raw...) cmd.Dir = "global.RootPath" stdout, err := cmd.StdoutPipe() if err != nil { fmt.Println(err) return 0, nil } stderr, err := cmd.StderrPipe() if err != nil { fmt.Println(err) return 0, nil } if err := cmd.Start(); err != nil { fmt.Println(err) return 0, nil } s := bufio.NewScanner(io.MultiReader(stdout, stderr)) for s.Scan() { text := s.Text() fmt.Println(text) } if err := cmd.Wait(); err != nil { fmt.Println(err) } return 0, nil }
|
这篇笔记整理自我自己的实践记录,如果做法有出入,或者你踩过别的坑,欢迎到留言板一起聊聊。