学习版本控制系统:从git到github
到目前为之,本公众号已经分享了很多有趣的机器学习资源,介绍了很多入门的机器学习项目。今天和大家共同学习一个能够有效、高速的处理从很小到非常大的项目版本管理系统:git。那么什么是git,名字很类似的github又是什么呢?
git官方定义为:一个开源的分布式版本控制系统。这个定义对于计算机初学者显得晦涩难懂,那我们打个比方:
如果你用Microsoft Word写过长篇大论,那你一定有这样的经历:想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……”一个新的Word文件,再接着改,改到一定程度,再“另存为……”一个新文件,这样一直改下去,最后你的Word文档变成了这样:
可以,非常要命。因为命名随便起,你想找回被删除的文字,但是已经记不清删除前保存在哪个文件里了,只好一个一个文件去找。看着一堆乱七八糟的文件,想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删。有时候你和同学合作一个项目,今天你把文件做了修改,明天轮到同学做修改,等到第三天,你在没有沟通的情况下,根本不知道你队友在上千上万的代码中,做了什么改动,导致合作效率低下。
于是你想,如果有一个软件,能自动帮我记录每次文件内容的改动,如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便?
Git出现了。帮你对每一次版本的改动进行记录,方便查找,多人协同工作。
git的安装
git的安装非常简单。很长一段时间内,Git也只能在Linux和Unix系统上跑。不过,慢慢地有人把它移植到了Windows上。现在,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行了。
在Windows上使用Git,可以从Git官网直接下载安装程序,或者前往https://gitee.com/git-installer/git-for-windows,下载后默认安装即可。完成之后在开始菜单里找到“Git”->“Git Bash”,出现类似命令行窗口的东西,就说明Git安装成功!
在git配置版本库
打开Git Bash之后,我们依次输入。
mkdir 学习git//创建版本库所在文件夹
cd 学习git//进入文件夹
git init//把文件夹变成Git可以管理的仓库
此时版本库准备就绪。
利用git进行时光穿梭
存放文件
在创建版本库后,输入pwn命令找到版本库路径。在其中放入一个文本文件(任意文件格式均可)
我们放入tx.txt文件,内容为:这是第一个文件。
提交文件
存放之后,我们将文件提交:输入以下代码
git add tx.txt//add 添加文件
git commit -m "第一"//commit 提交文件 -m添加备注信息
完成之后,我们继续工作,模拟修改过程。我们打开tx.txt,将来文件修改为这是“这是第二个文件。”并保存。
我们可以运行git status命令看看结果:
(git status命令可以让我们时刻掌握仓库当前的状态)
1.为提交文件
2.为提交文件之后运行git status命令,提示工作区干净。
3.为修改文件之后运行git status命令,提示文件被修改过了,但还没有准备提交的修改。我们再次使用add,commit命令提交,备注为“第二”。
回退文件
经过上面的修改,文件内容发生了改变,也记录了备注为“第一”,“第二”两次修改。我们使用git log命令,可以查看每一次的修改:
a.为提交的commit id
b.为每一次提交的备注
利用唯一确定的commit id,我们可以用reset命令回到过去。
git reset --hard d3afc//d3afc为id号前几位
执行之后,我们打开原来的文件,惊讶发现,原来的文件居然回来了!好像时光穿梭一般。
若你再次使用git reset --hard 9256cc,指定备注为第二的修改id,文件将又变回去了。利用commit id和方便查看的备注。我们可以实现文件的来回变换。
git的强大利器:分支管理
分支管理
分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习英语的时候,另一个你正在另一个平行宇宙里努力学习数学。如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了英语又学会了数学!那么这有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
如图,我们在进行主线任务开发时,为了不影响被人的使用,我们手动创造另一条分支,在分支进行开发,等到了合适的时候,我们将分支合并到主线,任务也就完成了。
创造分支
在程序窗口中,我们输入:
git checkout -b dev//创造并跳到分支dev
也可以使用:
git branch dev//创造分支dev
git checkout dev//跳到分支dev
此时我们在dev分支上。我们将来文件内容修改为“这是第三个文件。”若在这个时候调到主线,文件的内容没有变化,因为尚未合并。(但是会丢失没有提交的dev线工作区,我们可以用git stash保存的工作现场,回来之后用git stash list查看保存,并用git stash apply恢复。已经提交则不会丢失)
合并分支
我们已经在分支dev提交了第三次修改,并备注了“第三”。我们使用在程序窗口中,我们输入:
git checkout master//跳回主线
git merge dev//将分支dev合并到主线
执行之后,主线文件变成“这是第三个文件。”
冲突问题
在分支提交后,返回master分支进行再次并提交。合并时会出现冲突的情况,此时合并将会把两个文件合并,我们需要手动修改,再次提交以解决冲突。过程如下图
从git到github
到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了。我们来学习下github。
Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。GitHub实质上就是一个巨大的服务器,存放着大量的仓库。我们可以从这个服务器仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。因为这样的能力,GitHub成为最大的开源代码聚集地。
连接github
步骤如下:
1.首先我们需要注册一个GitHub账号,就可以免费获得Git远程仓库。
2.接着我们打开Git Bash,运行代码:
ssh -keygen -t rsa -C " youremail @ example.com"
3.找到用户主目录里的.ssh目录下id_rsa文件
4.登陆GitHub,打开“Account settings”, “SSH Keys”页面。然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。
上传自己的仓库到GitHub
步骤如下;
1.登陆GitHub,然后在右上角找到“Create a new repo”按钮,创建一个新的仓库:在Repository name填入 tx(自定义仓库名),其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库。
2.参考本文git安装配置,创建本地仓库,提交文件后,运行:
czlin2018需要更换成自己的帐户名,github-需要换成自己定义的仓库名。
3.运行代码:
git push -u origin master//同步到GitHub,首次 使用会出现验证,输入yes即可
此时,查看GitHub帐户,多出了一个仓库,里面文件与本地仓库文件一摸一样。以后修改好代码,直接push提交即可。
下载克隆他人仓库代码
GitHub上有大量的机器学习项目,我们再百度上查找到有兴趣的项目,进入作者首页,点进去项目首页找到:
执行clone命令,项目直接下载到本地仓库,如
作为开源代码库以及版本控制系统,Github拥有超过900万开发者用户。随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法,对于进行计算机学习的我们,无疑是巨大的宝藏!本教程到此结束,推文略长,感谢观看。
“
我们是图灵智能创新团队,同时也是广东海洋大学第一个人工智能创新团队,我们团队的主要方向有:计算机视觉和自然语言处理。本公众号主要面向对人工智能感兴趣的读者,如果想了解更多,欢迎关注我们!
”
—END—
领取专属 10元无门槛券
私享最新 技术干货