Skip to content

Commit 7744973

Browse files
committed
若原有项目的commit已够用(70以上)就直接修改时间&一次性push
1 parent cff7c3a commit 7744973

File tree

11 files changed

+122
-83
lines changed

11 files changed

+122
-83
lines changed

README.md

+13-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
# autoAddCommit
22
自动添加git提交记录
3+
34
# 运行方式
4-
1. 直接运行 `./make.sh` 后输入文件路径
5-
2. 运行`go install` 后,到自己对应目录运行 `autoAddCommit` 再输入文件路径
5+
### 有golang环境的情况下
6+
1. 修改 cd 后面的路径后 直接运行 `./make.sh` 后输入文件路径
7+
2. 运行`go install` 后,到自己对应目录运行 `autoAddCommit` 再输入文件路径
8+
### 没golang环境的 就直接下载二进制文件使用
9+
10+
# 常见问题
11+
1. 项目最后没成功push
12+
在根目录手动运行 `git push -f`
13+
2. 再输入文件路径 确保只是含有 100 个文件 不然会重复使用
14+
15+
# 声明
16+
本项目仅供学习交流严禁使用于任何商业用途!

commit.log

-10
This file was deleted.

file/file.go

+16-3
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ func CopyFile(to, from string) (err error) {
2525
if _, err := os.Stat(p); os.IsNotExist(err) {
2626
os.MkdirAll(p, 0777) //0777也可以os.ModePerm
2727
os.Chmod(p, 0777)
28-
2928
}
3029
fdest, err := os.Create(to)
3130
if err != nil {
@@ -42,7 +41,7 @@ func CopyFile(to, from string) (err error) {
4241

4342
// files all files with suffix
4443
func GetFiles(dir string) (result []File) {
45-
s, err := getCurrentPath()
44+
s, err := GetCurrentPath()
4645
if err != nil {
4746
util.Errorf("getCurrentPath err (%+v)", err)
4847
panic("getCurrentPath")
@@ -65,11 +64,25 @@ func GetFiles(dir string) (result []File) {
6564
return
6665
}
6766

68-
func getCurrentPath() (string, error) {
67+
func GetCurrentPath() (string, error) {
6968
getwd, err := os.Getwd()
7069
if err != nil {
7170
util.Errorf("Getwd err (%+v)", err)
7271
return "", err
7372
}
7473
return getwd, nil
7574
}
75+
76+
func CreateFile(to string) {
77+
p := path.Dir(to)
78+
if _, err := os.Stat(p); os.IsNotExist(err) {
79+
os.MkdirAll(p, 0777) //0777也可以os.ModePerm
80+
os.Chmod(p, 0777)
81+
}
82+
fdest, err := os.Create(to)
83+
if err != nil {
84+
util.Errorf("Create file err (%+v)", err)
85+
return
86+
}
87+
defer fdest.Close()
88+
}

git/commit.log

-10
This file was deleted.

git/git.go

+73-40
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
package git
22

33
import (
4-
"bufio"
54
"context"
65
"encoding/json"
76
"fmt"
87
"git.medlinker.com/wanghouwei/autoAddCommit/file"
98
"git.medlinker.com/wanghouwei/autoAddCommit/util"
10-
"io"
119
"math/rand"
12-
"os"
1310
"strconv"
11+
"strings"
1412
"time"
1513
)
1614

@@ -20,20 +18,27 @@ var (
2018
startTime time.Time
2119
maxTimes = 100
2220
baseDir = ""
23-
commitTimes = 50
21+
// commit 的数量
22+
commitTimes = 70
23+
// 前面100 天 去分 commit
24+
seconds = 100 * 24 * 60 * 60
2425
)
2526

2627
type commit struct {
2728
Date string `json:"date"`
2829
Hash string `json:"hash"`
29-
Msg string `json:"msg"`
30+
Msg string `json:"msg"`
3031
}
3132

32-
func changeDate() {
33-
id, _ := getCommitID()
33+
func changeDate(hash, t string) {
34+
if hash == "" {
35+
hash, _ = getCommitID()
36+
}
37+
if t == "" {
38+
t = startTime.Format("2006-01-02 15:04:05")
39+
}
3440
cmd := `if [ $GIT_COMMIT = %s ]; then export GIT_AUTHOR_DATE="%s" export GIT_COMMITTER_DATE="%s"; fi`
35-
t := startTime.Format("2006-01-02 15:04:05")
36-
cmdString := fmt.Sprintf(cmd, id, t, t)
41+
cmdString := fmt.Sprintf(cmd, hash, t, t)
3742
ret, err := util.RunCmdRet("git", "filter-branch", "-f", "--env-filter", cmdString)
3843
if err != nil {
3944
util.Errorf("filter-branch err (%+v)", err)
@@ -45,17 +50,21 @@ func changeDate() {
4550
func Run(dir string) {
4651
now := time.Now()
4752
// 前推4个月
48-
startTime = now.Add(time.Second * -1 * 60 * 60 * 24 * 30 * 4)
53+
startTime = now.Add(time.Second * time.Duration(-1*seconds))
4954
//changeDate()
5055
//return
5156
//dir = "/Users/med/mine/goPkgLearn"
5257
// 最后50次
5358
log := getCommitLog(commitTimes)
54-
if len(log) == commitTimes {
59+
if len(log) >= commitTimes {
5560
util.Infof("commit log 已经够分配")
56-
deviceCommit(log)
61+
//deviceCommitTime(log)
62+
commitTime := deviceCommitTime(log)
63+
pushCommitTime(log, commitTime)
64+
push(0)
5765
return
5866
}
67+
util.Infof("commit log 共 (%d) 不够分配,自动生成提交记录中...", len(log))
5968
baseDir = dir
6069
if err := getBranch(); err != nil {
6170
util.Errorf("getBranch err (%+v)", err)
@@ -72,10 +81,11 @@ func Run(dir string) {
7281
// continue
7382
//}
7483
getTime()
75-
if err := gitPush("./", branch, f); err != nil {
84+
if err := addCommit("./", branch, f); err != nil {
7685
return
7786
}
7887
}
88+
push(0)
7989
}
8090

8191
func addFile() (f file.File, err error) {
@@ -92,7 +102,7 @@ func addFile() (f file.File, err error) {
92102
}
93103

94104
// 提交修改内容到git
95-
func gitPush(medSdkDir, branch string, f file.File) (err error) {
105+
func addCommit(medSdkDir, branch string, f file.File) (err error) {
96106
util.Infof("正在提交代码...")
97107
err = util.RunCmd("git", "add", "-A")
98108
if err != nil {
@@ -106,7 +116,7 @@ func gitPush(medSdkDir, branch string, f file.File) (err error) {
106116
date := startTime.Unix()
107117
dateString := fmt.Sprintf("--date=%d", date)
108118
err = util.RunCmd("git", "commit", msgString, dateString)
109-
changeDate()
119+
changeDate("", "")
110120
if err != nil {
111121
util.Errorf("git commit err (%+v)", err)
112122
return
@@ -115,7 +125,6 @@ func gitPush(medSdkDir, branch string, f file.File) (err error) {
115125
util.Infof("无改动文件")
116126
return
117127
}
118-
push(0)
119128
return
120129
}
121130

@@ -125,8 +134,8 @@ func push(restart int64) {
125134
return
126135
}
127136
restart++
128-
// 10s 内没push 成功就重试
129-
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
137+
// 30s 内没push 成功就重试
138+
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
130139
defer cancel()
131140
err := util.RunCmdCtx(ctx, "git", "push", "-f", "origin", branch)
132141
if err != nil {
@@ -204,25 +213,18 @@ func getTime() {
204213
// 如果以前的commit 够用了,则直接随机分配
205214
//git log -n 5 --pretty=format:"%cI | %H | %s" > abc.txt
206215
func getCommitLog(times int) (res []commit) {
207-
err := util.RunCmd("git", "log", "-n", strconv.Itoa(times), "--pretty=format:\"{\\\"date\\\":\\\"%cI\\\",\\\"hash\\\":\\\"%H\\\",\\\"msg\\\":\\\"%s\\\"}\" > commit.log")
216+
pwd, _ := file.GetCurrentPath()
217+
pretty := fmt.Sprintf("--pretty=format:{\"date\":\"%%cI\",\"hash\":\"%%H\"}")
218+
r, err := util.RunCmdRetCD(pwd, "git", "log", "-n", strconv.Itoa(times), pretty)
208219
if err != nil {
209220
util.Errorf("git log err (%+v)", err)
210221
return
211222
}
212-
// 读取
213-
f, err := os.Open("commit.log")
214-
if err != nil {
215-
panic(err)
216-
}
217-
defer f.Close()
218-
rd := bufio.NewReader(f)
219-
for {
220-
line, err := rd.ReadBytes('\n') //以'\n'为结束符读入一行
221-
if err != nil || io.EOF == err {
222-
break
223-
}
223+
split := strings.Split(r, "\n")
224+
for i, s := range split {
225+
util.Infof("commit %d: %s)", i, s)
224226
r := commit{}
225-
if err = json.Unmarshal(line, &r); err != nil {
227+
if err = json.Unmarshal([]byte(s), &r); err != nil {
226228
util.Errorf("Unmarshal err (%+v)", err)
227229
return
228230
}
@@ -231,16 +233,47 @@ func getCommitLog(times int) (res []commit) {
231233
return
232234
}
233235

234-
func deviceCommit(list []commit) {
235-
l := len(list)
236+
func deviceCommitTime(list []commit) (timeList []int) {
237+
l := len(list)
236238
// 4个月
237-
total := 60 * 60 * 24 * 30 * 4
238-
timeList := []int{total}
239+
total := seconds
240+
timeList = []int{}
239241
for i := 0; i < len(list); i++ {
242+
timeList = append(timeList, total)
240243
reduce := util.DoubleAverage(l, total)
241-
total-= reduce
244+
total -= reduce
242245
l--
243-
println(reduce)
244-
timeList = append(timeList, total)
245246
}
246-
}
247+
fmt.Printf("%+v", timeList)
248+
if timeList[len(timeList)-1] > 60*60*24*3 || timeList[len(timeList)-1] < 60*60 {
249+
util.Infof("最后一次分配超过3天,重新分配...")
250+
return deviceCommitTime(list)
251+
}
252+
util.Infof("时间切分完成")
253+
return
254+
}
255+
256+
func pushCommitTime(commitList []commit, timeList []int) {
257+
lc, lt := len(commitList), len(timeList)
258+
if lc != lt {
259+
util.Errorf("lc(%d) != lt (%d)", lc, lt)
260+
panic("出错啦,长度咋不相等呢?")
261+
return
262+
}
263+
// 时间反着得
264+
// 这里不能开协程
265+
//eg := errgroup.Group{}
266+
for i, c := range timeList {
267+
util.Infof("=========== 修改第 %d 次开始 ===========", i+1)
268+
format := time.Now().Add(time.Second * time.Duration(c*-1)).Format("2006-01-02 15:04:05")
269+
//eg.Go(func() error {
270+
changeDate(commitList[i].Hash, format)
271+
//return nil
272+
//})
273+
}
274+
//if err := eg.Wait(); err != nil {
275+
// util.Errorf("errgroup err (%+v)", err)
276+
// return
277+
//}
278+
return
279+
}

git/git_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package git
33
import "testing"
44

55
func Test_getCommitLog(t *testing.T) {
6-
getCommitLog(10)
6+
getCommitLog(22)
77
}
88

99
func Test_Run(t *testing.T) {

git/mainFile/mit.log

-10
This file was deleted.

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ go 1.15
44

55
require (
66
github.com/fatih/color v1.12.0
7-
github.com/shopspring/decimal v1.2.0
7+
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
88
)

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ
44
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
55
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
66
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
7-
github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=
8-
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
7+
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
8+
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
99
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1010
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8=
1111
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=

make.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/bin/bash
22

33
go install
4-
cd /Users/med/mine/github/GoWeb
4+
cd /Users/wanna/mine/github/goCms
55
autoAddCommit

util/util.go

+15-3
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@ func RunCmdRetCD(cd, name string, arg ...string) (out string, err error) {
6060
return
6161
}
6262

63+
func JustRun(cd, name string, arg ...string) (err error) {
64+
logf("CMD: %s", strings.Join(append([]string{name}, arg...), " "))
65+
cmd := exec.Command(name, arg...)
66+
cmd.Dir = cd
67+
err = cmd.Run()
68+
return
69+
}
70+
6371
func logf(format string, args ...interface{}) {
6472
fmt.Printf(format+"\n", args...)
6573
}
@@ -73,13 +81,14 @@ func Errorf(format string, args ...interface{}) {
7381
}
7482

7583
//二倍均值算法,count剩余个数,amount剩余时间
84+
// 间隔在 5小时 到 3天之间
7685
func DoubleAverage(count, total int) int {
7786
if count == 1 {
7887
//返回剩余时间
7988
return total
8089
}
81-
// 提交间隔至少 1h
82-
min := 60 * 60
90+
// 提交间隔至少 5h
91+
min := 60 * 60 * 5
8392
//计算最大可用时间,min最小是1分钱,减去的min,下面会加上,避免出现0分钱
8493
max := total - min*count
8594
//计算最大可用平均值
@@ -90,5 +99,8 @@ func DoubleAverage(count, total int) int {
9099
rand.Seed(time.Now().UnixNano())
91100
//加min是为了避免出现0值,上面也减去了min
92101
x := rand.Intn(avg2) + min
102+
if x > 60*60*24*3 {
103+
return DoubleAverage(count, total)
104+
}
93105
return x
94-
}
106+
}

0 commit comments

Comments
 (0)