是否这样的场景:在公司开心的搬砖,临时其他事打断后没有继续,没有及时把代码更新到repo;回到家后,想继续开心的搬砖,但是丢失白天在公司的进度,勉为其难重新实现想法,又面临代码合并的痛苦。这样几次后,写了一个脚本进行解决,基本思想是这样的:每天定时(如早上7点,晚上6点)自动拉取最新代码,并提交,push到repo去,每天来到公司或者回到家,打开电脑就是最新的干净的电脑,也没有任何心理负担,要记得coding中断后要及时更新repo,因为有定时任务在后面兜底。
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')
git ls-files 列出所有修改过的文件,以及所有“其他”(例如未跟踪)文件。此外,确保通过标志 --exclude-standard 应用通常的 .gitignore 规则。
重要的部分是然后对结果进行通配符 grep 搜索(“.”代表“任何字符都可以”)。但是对实际结果不感兴趣,因此通过将输出重定向到 /dev/null 将其丢弃。我们对退出状态感兴趣:如果找不到结果,grep 将退出并显示错误代码。因此,只有当有未提交的更改时,程序才会继续。
[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
[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 删除。