直接回答:用 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" //代替cd命令进入某个目录
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
}


这篇笔记整理自我自己的实践记录,如果做法有出入,或者你踩过别的坑,欢迎到留言板一起聊聊。

站内搜索

没有找到内容!