入职之后公司里发了电脑,跟随自己闯荡多年的电脑就赋闲在家了。有时候在公司小小地摸个鱼写的jupyternotebook文件,想要回家用自己的电脑接着写,但是文件同步是一个大问题。为了不天天背着重重的书包挤地铁,决定探索一下两台电脑的无缝协作模式,要求就是:两台电脑里的一个文件夹里的内容可以互相同步。
尝试了用有道云笔记等云笔记软件进行云同步,每次拖拽到本地电脑更新,但是上传到云笔记的文件只能单个另存到本地,不能批量操作,而且文件一多也并不知道修改了哪个文件,只能都同步一次。这样严重阻碍了工作效率,最后还是拿起了git这个利器。果然,懒惰是人类的第一生产力。基于以上需求,基本走通了通过git同步两台电脑文件夹的需求,具体实现步骤如下:
一、安装git
首先安装git,下载网址在这里:git
直接一路点下一步安装即可。
二、构建本地仓库
在你的本地建立一个目录。以后在这里放置需要同步的文件,git就同步这个目录里的文件。
1、建立一个文件夹
随便,我主要同步jupyter文件,所以在D盘新建了一个名字为jupyter_project
的文件夹。
2、在当前文件夹下打开git控制台
进入这个目录,点击鼠标右键,在弹出框里点击“Git Bash here”,在当前文件夹打开git控制台。
界面如下:
3、初始化仓库
接下来,git要宣告系统:这个文件夹我征用了。代码很简单:
$ git init
输出:
Initialized empty Git repository in /Users/***/jupyter_project/.git/ (***是你中间的文件路径)
这样瞬间Git就把仓库建好了,而且告诉你这是一个空的仓库(empty Git repository)。当你添加了文件之后,再执行这个命令的时候,会显示:
Reinitialized existing Git repository in D:/jupyter_project/.git/
4、添加文件
当然,在这个文件夹里的文件并不是全部受git监控。你得把需要git监控的文件添加进去。
比如:我们把一个名字为test.ipynb
的文件复制进来,为了让git时刻监视他,我们在git命令行中执行:
git add test.ipynb
如果没有报错,现在这个文件就已经在git的监控范围之内了。
你可以按照这种方法添加多个文件。
5、提交
git commit -m "20191022 first backup"
其中, -m 后边后面输入的是本次提交的说明,可以输入任意内容。最好写一个说明,主要目的是留个案底以备以后自己回忆。万一以后想恢复文件死活想不起这是什么时候提交的就糟糕了,这里我前边写了一串提交日期,建议你也加上。
简单来说,add是给文件添加监控,commit是生成截止目前监控到的文件状态,类似于生成一个游戏存档,便于以后恢复。
三、将本地仓库推送到github
单纯地在本机上建立git版本管理器,并没有使用到git的精髓,也并没有得到我们的目标。接下来,我们将本地文件备份到github上。
1、在github上新建项目
登录自己的github(没有账号需要先注册账号),点击“新建项目”,按照图示进行操作:
2、将本地仓库与远程github仓库关联
创建好仓库之后,github会跳转到一个提示页面,分别对应的不同情况下的命令行操作,当然你也可以直接一键复制代码操作。
因为我们已经建好了本地的仓库,直接按照第二种方法提示就好。具体步骤如下:
1)添加远程仓库:
git remote add origin <你的项目地址> //注:
这里项目地址形式为:https://gitee.com/xxx/xxx.git
,为了防止出错,最好直接复制提示页面的代码。
你可以通过以下代码查看关联的远程仓库:
git remote -v
输出如下;
origin https://github.com/boyliwensheng/jupyter_project.git (fetch)
origin https://github.com/boyliwensheng/jupyter_project.git (push)
如果地址输入错误,你也可以删除与远程仓库的关联:
git remote rm origin
删除之后,重新执行上述操作。
2)推送
git push origin master
会弹出一个窗口,提示你输入github账号和密码,接着等待程序执行完毕
,之后刷新github网页,可以看到,我在本地仓库commit的一个csv文件和一个ipynb文件已经推送到我的远程github仓库了。
四、将远程项目clone到本地
在另一台安装好了git的电脑上,只需要在某个文件夹下打开git控制台。输入如下代码:
git clone git@github.com:你的账户名/jupyter_project.git
很不幸,第一次尝试并没有成功,输出如下:
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
如果是公有仓库,这时应该就成功下载下来了。但因为我远程建了一个私密仓库,这样不加验证是没有办法从我的私密仓库clone文件到本地的,我们需要生成一个sshkey,告诉远程仓库:是我们自己人在下载代码,请放行。
生成公匙代码:
ssh-keygen.exe -t rsa -C "xxx@163.com"
三次回车后,在/c/Users/你的电脑名/.ssh
这个文件夹中找到名字为id_rsa.pub
的文件,打开并复制里边的代码,并按照 这篇文章 在github上配置sshkey。
接着进行clone操作,出现以下提示,说明clone成功了,在当前文件夹就可以找到远程备份的文件了。
五、更新本地代码
这样,两台电脑的jupyter_project这个文件夹就通过git远程连通起来了。这里需要注意的是:新建一个文件后,还是需要手动把这个文件add一下,以后在公司随便修改这个文件夹里的文件,只需要下班之前commit+push一下就好。回到家,冲一杯咖啡,只需要执行以下几个操作:
git fetch origin master //从远程的origin仓库的master分支下载代码到本地的origin master
git log -p master.. origin/master//比较本地的仓库和远程参考的区别
git merge origin/master//把远程下载下来的代码合并到本地仓库,远程的和本地的合并
在公司同步上云端的文件此刻就同步到你的电脑里了,接着干活!
值得一提的是,git对文件格式没有要求,几乎可以备份所有文件,不限于图片、word文档,实现了简单的多台电脑无缝办公。当然,以上只是git的一个小应用,git的作用远远不止这些,你也可以利用git进行远程团队协作等,更多功能等待你自己去挖掘。
最后,云电脑绝对是未来啊。华为云电脑、google云游戏都是在不断探索这种云端办公的未来形态,当前主要受限于网速,不能实时把云端的计算结果返回客户端,相信随着5G的成熟,这种云办公的方式必定会逐渐成熟,成为未来办公的主流趋势。拭目以待!
六、配置过程中的常见报错以及解决方案
1、git报错:Please make sure you have the correct access rights and the repository exists
由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以必须要让github仓库认证你SSH key,在此之前,必须要生成SSH key,发生这个错误同样是因为没有和远程GitHub验证SSH key。参考第四步的解决方案。
2、git报错:refusing to merge unrelated histories
在使用git pull origin master
这个语句push到远程github上的时候,产生了这个错误。
翻译过来就是:拒绝合并不相关的历史。其实原因也很好理解,我这个远程仓库里已经放了一个和本地重名的文件,推送的时候git无法判断保留哪个文件。
只需要执行以下命令:
git pull origin master --allow-unrelated-histories
如果成功合并,接着,再进行推送,就可以成功推送了。
3、git推送到远程的时候报错:Updates were rejected because the tip of your current branch is behind
解决方案:
1)使用强制push的方法:
git push -u origin master -f
这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。
2)push前先将远程repository修改pull下来
git pull origin master
git push -u origin master
- 若不想merge远程和本地修改,可以先创建新的分支,然后push:
git branch [name]
git push -u origin [name]