当前位置: 首页 > 工具软件 > github-gmail > 使用案例 >

git 不一致 本地和服务器_本地-GitHub-服务器代码同步

史宸
2023-12-01

目的为了实现在本地编辑代码,服务器跑代码。

通过github,实现本地代码和服务器代码同步,结果同步。

数据备份,不丢失。

举例说明一下:

Mac:本地笔记本电脑,用于编辑代码。 Server:远程服务器,有显卡,用于跑model。

第一步:在Mac上修改代码,上传到自己的github。

第二步:在Server上先同步github(包括结果上传,代码更新),跑model。

第三步:在Mac上同步github,就能看到结果。

如此循环即可。

这样本地-GitHub-服务器,代码数据是保持一致的(除了最新的一点点),相当于有3个备份。如果任意一端崩溃了,都可以快速进行恢复,影响极小。

ps:在家跑实验,服务器崩溃了几次只好采用了这种结构,都是心酸呀。通过脚本,上述的步骤其实很方便的就能完成,不用担心。

方案一:前提要求Mac和Server上都安装了git(是自带的,可以进行覆盖)

有自己的github账户,建立了自己的Reponsitories。

为了方便说明,

设定自己的GitHub账户名:newlei。对应的账号: newlei@gmail.com 密码为: password

设定自己的Reponsitories名字叫:MyReponsitories。二:下载MyReponsitories仓库到本地

github下载仓库到本地很简单,一行命令即可:

git clone https://github.com/newlei/MyReponsitories.git

就会自动下载到本地,文件夹名也是MyReponsitories了。

三:代码同步-脚本

由于MAC和Server上都涉及到上传数据到github和从github下载数据,所以任务是一致的,脚本自然也是一致的。话不多说,直接上脚本代码,将脚本放到上一步的文件夹MyReponsitories里面,并命名为autoSyn.sh。

#!/bin/shgit status

git add *

git commit -m 'add some code from Mac'

# git commit -m 'add some results from Server'

git pull --rebase origin master #domnload data

git push origin master #upload data

git stash pop

这就是主要的部分了,不需要进行修改,直接使用即可。会同步更新,自行合并代码,不会造成覆盖等问题。

其中git commit -m 'add some code from Mac'里面的话可以自己修改,是给此次提交代码添加说明的。

ps:可以为Mac和Server各自写一个脚本也是可以的,因为需求不同,后面也有设置不同的例子

四:运行脚本

执行bash autoSyn.sh就可以运行上述脚本了。(在Linux和Mac上可行的,在win系统中需要自己设置保证能够运行bash文件)

五:只输入一次账户密码

在运行autoSyn.sh脚本的时候,每次都会让你输入账户和密码,比较麻烦。有只输入一次的设置,直接先上命令行进行说明。

git config --global credential.helper store # save forever

git config --global credential.helper 'cache --timeout=3600' # save 3600s,then you need input username and password again

上述的2种方式,第一种会保存账户密码,不需要在输入了,第二种只保存3600秒,之后还需要输入。更多说明

这一步还是有的糊涂对不对,会有疑问在哪里输入密码呢。

先输入上面的命令行,记住先输入上面的命令行,接着再MyReponsitories文件夹里面,然后运行脚本会让你输入账户密码。这样你只需要输入这一次,后续再运行autoSyn.sh脚本,就不需要输入密码了。

六:一些问题解决方案第一次用commit会有错误, 输入下面的命令行即可解决。

git config --global user.email "newlei@gmail.com"

里面的newlei@gmail.com 换成自己的邮箱即可

在运行脚本中遇到

Cannot pull with rebase: You have unstaged changes.

Please commit or stash them.

这是由于git pull --rebase origin master这行指令导致的,一些解决方案是我已经加入脚本中,不用担心,我说一下我这里遇到的特殊情况。如果你允许autoSyn.sh脚本还是遇到,可以参考一下。

我在文件夹MyReponsitories里面会不停的写入文件,这就导致了,git status 之后其实本地仓库还是改变了,那么就出现了不一致,所以报错You have unstaged changes。说你还有一些改变,你没有说明怎么处理,这时候不知道咋解决了。就不回同步更新你的本地仓库了。

既然原因知道了,那就简单,不要不停的写入文件即可

删除文件,这个在脚本里面没有涉及。如果需要可以在脚本里面加入:

git rm **这样就可以删除文件了。七:Server脚本进阶

前面第三步中设置的Mac和Server脚本是一致的。这里给个进阶的用法。

我们可以发现在Server中不仅需要同步代码,还需要跑model,那么之前的autoSyn.sh脚本就不够了,只有同步代码,既然问题出现了,我们很自然的可以把跑model的命令也加入到脚本中去。

由于我是用python写代码,所以跑model就是以python **.py为例。

#!/bin/shgit status

git add *

git commit -m 'add some code from Mac'

# git commit -m 'add some results from Server'

git pull --rebase origin master #domnload data

git push origin master #upload data

git stash pop

sleep 3s #Just for more stable, you can remove this.

python **.py

这样在同步代码之后,就会自动运行python命令,去跑model了。

当然了,你会说,我不是没次都行跑python命令,有时候只是想更新代码,不用慌,如下:

#!/bin/shgit status

git add *

git commit -m 'add some code from Mac'

# git commit -m 'add some results from Server'

git pull --rebase origin master #domnload data

git push origin master #upload data

git stash pop

sleep 3s #Just for more stable, you can remove this.

if [ -n "$1" ]; then

echo 'just syn code and results ----'

else

echo "syn and run code"

python TrainFairness.py

fi

如果需要运行python命令:bash audoSyn.sh

如果只更新代码:bash audoSyn.sh 0,后面的0,可以任意值都行,代码里面并没有处理,只要判断有参数就行。

 类似资料: