Win10 Git Mac

发布于 更新于

AI总结: 本文介绍了几个用于Git操作的批处理脚本,包括循环执行的git pull和git push命令,以应对GitHub连接不稳定的问题。主要内容包括:retry.cmd脚本用于循环执行命令,设置了最大重试次数和间隔时间;pull.cmd和push.cmd脚本在当前目录为Git仓库时,循环尝试执行相应的命令;apull.cmd脚本在执行pull之前会暂存本地变更,并在拉取完成后恢复变更。此外,还提供了Mac上设置alias的示例,以及cmd编码的修改方法。改进建议包括增加对错误处理的详细记录,便于排查问题,以及考虑将重试次数和间隔时间作为参数传入,以提高灵活性。

循环执行脚本

判断参数命令执行结果, 如果失败则重复执行
retry.cmd git push origin main

@echo off  
chcp 65001  
echo %*  
for /l %%a in (1,1,100) do (echo %%a------------------- && %* && goto :EOF; sleep 5)  

:EOF  
echo -------------------end  

git推拉脚本

因github容易连不上, 所以pull, push时, 有时需要循环执行
暂定间隔5秒循环执行, 一般10次以内能成功 这里设置了100次, 如果需要永久循环 设置为(0,0,1)

用法: 将pull.cmd, push.cmd脚本放到PATH目录下, 使用时直接在仓库目录, 执行pull, push即可

pull.cmd

@echo off  
chcp 65001  
rem 因github容易连不上, 所以间隔5秒循环执行, 一般10次以内都能成功 这里设置了100次, 如果需要永久循环 设置为(0,0,1)  
echo git pull  
git rev-parse --is-inside-work-tree >nul 2>nul  
if %errorlevel% equ 0 (  
    for /l %%a in (1,1,100) do (echo %%a----------------------- && git pull && goto :EOF; sleep 5)  
) else (  
    echo 当前目录不是git仓库  
)  
:EOF  
echo -------------------------end  

push.cmd

@echo off  
chcp 65001  
rem 因github容易连不上, 所以间隔5秒循环执行, 一般10次以内都能成功 这里设置了100次, 如果需要永久循环 设置为(0,0,1)  
echo git push  
git rev-parse --is-inside-work-tree >nul 2>nul  
if %errorlevel% equ 0 (  
    for /l %%a in (1,1,100) do (echo %%a------------------- && git push && goto :EOF; sleep 5)  
) else (  
    echo 当前目录不是git仓库  
)  

:EOF  
echo -------------------end  

apull.cmd 先暂存本地变更, 再pull, 最后恢复变更

@echo off  
chcp 65001 >nul  
echo 正在检查本地变更...  
git update-index -q --refresh  
:: 判断是否有未暂存/未提交的修改  
git diff --quiet HEAD -- 2>nul  
if %errorlevel% equ 0 (  
    echo  没有本地修改,直接拉取更新...  
) else (  
    echo  检测到未保存的修改,正在临时存储...  
    git stash push -m "AutoStash_%DATE%_%TIME%" --quiet  
    echo  已暂存本地修改: && git stash list | findstr "AutoStash"  
)  
:: 执行拉取操作  
echo  正在从远程仓库拉取更新...  
git pull  
:: 如果有暂存则恢复  
if %errorlevel% equ 0 if exist .git/refs/stash (  
    echo  正在恢复暂存的修改...  
    git stash pop --index --quiet  
    echo 本地修改已恢复 ^!  
)  
echo  操作完成 ^!  

Mac添加alias实现

pull='for i in `seq 1 100`; do echo $i && git pull && break; sleep 5; done'  
push='for i in `seq 1 100`; do echo $i && git push && break; done'  

chcp

修改cmd编码

chcp 936  #GBK  
chcp 65001 #UTF-8