推送电子书项目到GitHub:入门Git后的练手
一、本文目标
搞IT的,应该无人不知晓“GitHub”, 因此将项目代码托付给GitHub网站管理再合适不过了。
(备注:GitHub只是个网站,而Git才是管理代码的(Git——“分布式版本控制系统”) )
将电子书项目推送到Github网站,方便后面电子书项目的更新,也方便大家下载学习交流。
为啥不推送“数码相框”那个项目呢?
因为这个推送只是作为我Git初学者的练手项目,后面再推送数码相框到GitHub。
(如果你懂Git基本操作,但没实战过,那这篇文章很适合你。如果你是个GIt高手,请绕道,给小白留条路,哈哈)
二、建立本地仓库和远程仓库
先在GitHub网站建立个远程仓库,如下所示
备注:我并没有Add.gitignore 和 Add a license. 这两个其实很重要,我并没有选择是因为想留下埋伏,
(注:这些后期都可以完善的) 留到后面讲解Git高级特性时再讲解 : )
此外,新建GitHub仓库,不应该选择那个选项:Initialize this repository with a README, 后面看我掉坑就知道了 : (
这样,就建立了一个名为“Implement-e-book-on-s3c2440-development-board”远程仓库。
那本地仓库如何建立呢?看下图
三、同步后推送本地仓库代码到远程仓库
上面建立了两个仓库——本地仓库+远程仓库,但这两个仓库没有任何瓜葛,因此需将这两个仓库建立联系
即同步,然后把本地的电子书代码推送到远程仓库。
看下图的同步和推送工作:
这里就掉坑了,因为之前选择了生成README,导致本地仓库和远程仓库不匹配。
事情并没有那么顺利,不慌,遇到这错误肯定我不是第一人。网上很快就找到了解决办法
只需先合并远程仓库到本地即可,如下图
接着,继续执行之前失败的命令:git push -u origin master 推送本地仓库到Github。
还是掉坑,如下图
因此,网上找到一篇文章:https://blog.youkuaiyun.com/qq_36181310/article/details/88760623
写得很好,下面按他的指导解决这个错误,如下所示
上面可概括为两步:1)生成密钥(公钥和私钥)到本地 2)将本地公钥复制到GitHub的ssh密钥
ok,ssh密钥搞定之后,重新执行:git push -u origin master 推送本地仓库到Github。
这次没问题了。但是发现,GitHub远程仓库没有本地仓库的代码,即没推送到GitHub的远程仓库,
这时候再push推送会发现:已经是最新了,这是为啥呢?如何推送本地代码呢?还是看下图
一路曲折,终于OK了,以后每次本地仓库修改的代码就可实时推送到GitHub了。
举个例子:修改了main.c , 先git add main.c 放到暂存区,确让没问题就可git commit -m "<注释信息>"提交暂存区的内容
最后 git push 即可推送到远程仓库 以 实时更新项目进展,这也是多人协作开发的好助手,免去了项目版本管理的麻烦。
当然,Git还有很多优越的特性这里没讲,后面遇到问题时再补充。
四、总结
本文主要讲解了如何建立本地仓库和远程仓库,并把本地仓库与远程仓库同步后推送代码到GitHub远程仓库。
整个处理流程:
1. GitHub建立一个仓库
2. 本地进入项目目录下后执行git init 初始化并建立一个本地仓库(生成的.git目录负责追踪)
3. 执行git remote add origin git@github.com:zmk0214/Implement-e-book-on-s3c2440-development-board
关联本地仓库与远程仓库
4. 执行:git push -u origin master 推送本地master分支代码
推送失败,发现本地mster与远程master不相同,便执行git pull --rebase origin master先进行代码合并以保持一致
5. 再次执行推送命令,发现权限不够导致推送失败,是因为本地主机未认证GitHub合法身份(ssh连接需要密钥认证)
6. 接着,1 生成密钥(公钥和私钥)到本地用户的.ssh目录 2. 将公钥内容复制到Github以保证ssh连接时,本地主机
能用生成的私钥匹配GitHub的公钥,以此信任GitHub的合法身份。
7.之后,再次执行推送命令,没有错误。但是发现本地master分支并没有合并/推送到远程仓库的Master分支
8. 执行 git add -A -----> git commit -m "firset version" -----> git push 才把代码推送到了远程仓库,实现同步。
整个流程下来,可谓“一波三折”。不过掉坑才能成长啊,对吧。
最后,代码是托付给GitHub远程仓库管理了。但实际上,还有很多问题呢。比如上传的代码中有 .o 文件,
如何过滤呢?再者,多人协作时,想在另一分支干活,最后合并分支到master分支,如何做呢?等等
这些留到后面再讲, 敬请期待呀 : )