前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小工具:Git auto-commit & push

小工具:Git auto-commit & push

原创
作者头像
flavorfan
修改2021-12-17 11:15:46
1.7K0
修改2021-12-17 11:15:46
举报
文章被收录于专栏:范传康的专栏

是否这样的场景:在公司开心的搬砖,临时其他事打断后没有继续,没有及时把代码更新到repo;回到家后,想继续开心的搬砖,但是丢失白天在公司的进度,勉为其难重新实现想法,又面临代码合并的痛苦。这样几次后,写了一个脚本进行解决,基本思想是这样的:每天定时(如早上7点,晚上6点)自动拉取最新代码,并提交,push到repo去,每天来到公司或者回到家,打开电脑就是最新的干净的电脑,也没有任何心理负担,要记得coding中断后要及时更新repo,因为有定时任务在后面兜底。

1 更新git状态py文件:git_update

代码语言:txt
复制
import subprocess
import datetime
def git_sync(repo_path):
  timestamp_str = datetime.datetime.now().strftime('%Y-%m-%d%H:%M:%S')
  msg=f'auto commit & push {timestamp_str}'
  cmd_str =f"cd {repo_path} ; git pull && (git ls-files --modified --others --exclude-standard | grep . > /dev/null) && {{ git add . ; git commit -m '{msg}' ; git push; }}"
  res = subprocess.run(cmd_str,shell=True)
  return res

if __name__ == '__main__':
  git_sync(repo1)
  git_sync(repo2)
  print('done')

核心shell解释

git ls-files 列出所有修改过的文件,以及所有“其他”(例如未跟踪)文件。此外,确保通过标志 --exclude-standard 应用通常的 .gitignore 规则。

重要的部分是然后对结果进行通配符 grep 搜索(“.”代表“任何字符都可以”)。但是对实际结果不感兴趣,因此通过将输出重定向到 /dev/null 将其丢弃。我们对退出状态感兴趣:如果找不到结果,grep 将退出并显示错误代码。因此,只有当有未提交的更改时,程序才会继续。

2 实现定时

1) git-update.service

代码语言:txt
复制
[Unit]
Description=Git auto-commit & push on schedule

[Service]
ExecStart=/home/flavor/miniconda3/bin/python /home/flavor/git/homelab_infra/ipynb/git_update.py  
ExecReload=/home/flavor/miniconda3/bin/python /home/flavor/git/homelab_infra/ipynb/git_update.py  

2) git-update.timer

代码语言:txt
复制
[Unit]
Description=Git auto-commit & push on schedule every hour

[Timer]
OnCalendar=*-*-* 07,18:*:00
Unit=git-update.service

[Install]
WantedBy=multi-user.target

其他

如果WSL全面支持systemd的话,那么就是十分完美的跨平台方案。但是wsl目前不支持systemd,只能在写一个sh包装下python执行过程。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 更新git状态py文件:git_update
    • 核心shell解释
    • 2 实现定时
      • 1) git-update.service
        • 2) git-update.timer
        • 其他
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档