记一次Git仓库同步
前言
在开发过程中,可能遇到Git仓库搬家或Git仓库同步的窘境,本文记录一次Git仓库同步过程,同样也可用于仓库迁移。
实现思路
- 环境:
仅拥有仓库A的读权限,不具备修改和推送的权限。 - 目标:
将仓库A的代码定期推送/同步至仓库B
不论何种方法都需要定期更新代码,这块可以使用crontab来简单实现,因此不做详细记录。
需求到了以后,刚毕业的码媛小A接下了此任务,对于不熟悉Git命令的她打算这样开始:
1.将源码目录code拷贝至code_1
2.删除code_1目录下的.git文件夹
3.删除仓库B所有文件
4.重新初始化code_1目录Git仓库并设置远程仓库为仓库B
5.commit文件,推送至远程仓库B
经过一个下午的努力,第一版的同步脚本成功交付,并稳定运行了一段时间。然而过了不久同事过来提了一个严重的问题,这样虽然可以实现需求,但是原始的commit的信息无法保留,当仓库代码发生变动时,无法得知代码变更,这样和传统的FTP传输文件区别不大。
小A抓紧学习了一天Git命令,发现git push --mirror
可以实现代码同步,同时对于仓库A不具有侵入性,便产生了如下思路。
1.获取仓库A最后一次提交的时间
2.使用git push --mirror
将代码推送至仓库B,同时将仓库A最后一次提交时间写入到临时文件/tmp/LAST_MODIFY_TIME
3.在下次执行脚本时,获取最后一次提交时间后,检查提交时间和临时文件里的内容是否一致,一旦不一致继续执行第二步,如果一致则没有代码变更退出程序即可。
Shell脚本实现Git仓库同步/迁移
1 |
|
小记
自此小A学会了很多git参数和命令,笔记如下:
1.git log命令可一接受一个–pretty选项,来确定输出的格式.
比如 :
如果我们只想输出hash.
1 | git log --pretty=format:"%h" |
详细 命令 :
- %H: commit hash
- %h: 缩短的commit hash
- %T: tree hash
- %t: 缩短的 tree hash
- %P: parent hashes
- %p: 缩短的 parent hashes
- %an: 作者名字
- %aN: mailmap的作者名字 (.mailmap对应,详情参照git-shortlog(1)或者git-blame(1))
- %ae: 作者邮箱
- %aE: 作者邮箱 (.mailmap对应,详情参照git-shortlog(1)或者git-blame(1))
- %ad: 日期 (–date= 制定的格式)
- %aD: 日期, RFC2822格式
- %ar: 日期, 相对格式(1 day ago)
- %at: 日期, UNIX timestamp
- %ai: 日期, ISO 8601 格式
- %cn: 提交者名字
- %cN: 提交者名字 (.mailmap对应,详情参照git-shortlog(1)或者git-blame(1))
- %ce: 提交者 email
- %cE: 提交者 email (.mailmap对应,详情参照git-shortlog(1)或者git-blame(1))
- %cd: 提交日期 (–date= 制定的格式)
- %cD: 提交日期, RFC2822格式
- %cr: 提交日期, 相对格式(1 day ago)
- %ct: 提交日期, UNIX timestamp
- %ci: 提交日期, ISO 8601 格式
- %d: ref名称
- %e: encoding
- %s: commit信息标题
- %f: sanitized subject line, suitable for a filename
- %b: commit信息内容
- %N: commit notes
- %gD: reflog selector, e.g., refs/stash@{1}
- %gd: shortened reflog selector, e.g., stash@{1}
- %gs: reflog subject
- %Cred: 切换到红色
- %Cgreen: 切换到绿色
- %Cblue: 切换到蓝色
- %Creset: 重设颜色
- %C(…): 制定颜色, as described in color.branch.* config option
- %m: left, right or boundary mark
- %n: 换行
- %%: a raw %
- %x00: print a byte from a hex code
- %w([[,[,]]]): switch line wrapping, like the -w option of git-shortlog(1)
2.写shell脚本的过程中,小A无意间还学会了linux中date命令的详细使用
1 | date +%s #获取当前时间戳 1598016486 |
文章评论