托管项目到GitHub
GitHub,是一个面向开源及私有软件项目的托管平台。随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法。
作为一名程序员,尤其是移动开发者,都或多或少得去GitHub上下载过第三方库来简化自己的工作。
下载一定是人人都会的,但是,要把我们自己的项目托管到GitHub上的流程到底是怎样的?阅读完本文,你能很快在GitHub上建立起自己的代码库。
在第一次接触GitHub的时候,我在想,我是在GitHub直接创建一个仓库,之后在本地通过地址下载,还是在Android Studio中创建一个项目,再关联到GitHub?
GitHub Desktop
GitHub Desktop,是一个图形化的应用软件,通过它我们可以很方便的创建仓库,同步本地代码到GitHub上,从使用角度来说,它是目前最简单的方式。因为,使用者不需要额外去学习任何命令行指令
和Git相关的技术,支持mac和windows。
本地项目关联到GitHub
打开GitHub Desktop之后,如果你想把本地的某个项目文件夹关联到GitHub上,最简单的办法就是拖拽项目文件夹到GitHub Desktop中。
如果你的项目文件夹,已经被Git管理起来了,那么GitHub Desktop会立即同步代码到GitHub上,这点请放心。
如果你的项目文件夹,不是一个Git版本控制仓库,那么GitHub Desktop会弹出窗口,询问你是否要把它加入版本控制,请注意转换为Git仓库并不会修改或删除原项目中任何文件,仅会生成一个Git管理的隐藏目录。
提交代码到本地仓库
所有的Git仓库都是由很多次在某个时刻提交的代码的快照组成而已,什么意思呢?其实,就是指你代码如果被修改了而没有上传到GitHub上,则库上的代码是没有更新的,这很好理解,因为你改动的仅仅是保存在本地的一份代码拷贝而已,因此,我们在同步我们代码到GitHub上之前,是需要进行Commit
提交的。
同步本地仓库到GitHub
和SVN不同的是, Git的操作要多一步PUSH
。因为,Git有本地库和远程库2个库,我们本地修改的代码,通过commit
仅仅是提交到了本地仓库中,而远程库的更新则是需要push
操作,把本地库中更新同步到远程库。
Command Line
图形化的GitHub Desktop,虽然操作简单,但是对于追求效率高的程序员来说,还是太慢,使用Command Line
虽然需要学习很多命令行指令,但对理解Git版本控制实现原理还是很有帮助的,使用命令行自由度更大,而且对于培养极客精神
也是大有裨益的。
我自己就是使用Command Line
来进行项目的版本控制,用的多了自然对Git指令基本没啥压力。因此本文,重点在于如何使用命令行进行日常代码的版本控制。
明确需求
前面说过,在日常编程中,主要有3种情况:
第一种:一个新项目刚起,准备托管到GitHub上,一般先由主程在GitHub上创建一个远程库,git地址发给所有开发人员,开发人员在本地创建一个空白的文件夹,然后克隆刚刚创建的项目,开始开发工作。
第二种:以Android开发为例,已有本地代码,想把代码开源出去,这时通过Android Studio中版本控制工具中自带的GitHub,把本地库推送到GitHub(前提是,GitHub上没有重名的仓库,因为Android Studio会默认创建和工程名称相同的GitHub仓库)。
第三种:直接在Android Studio创建一个新项目,之后分享到GitHub上。
现在,到底选择哪种情况?
第1种情况,一方面可能会出现多个开发人员生产相同文件或代码等,另一方面,如果上一个移动应用项目,很可能需要一些自动生成的文件,如使用Android Studio创建新工程,会自动产生很多项目文件,因此不推荐使用;第2,3种情况,其实本质上都是:本地git仓库与远程git仓库关联同步。
Tips:下面以我想把当前一个本地的工程托管到GitHub上为例,向你说明其实掌握了Git版本控制的基本原理后,开源自己的项目到GitHub上是很容易的。因为,GitHub告诉我们,可以从仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
HTTP TOOLS
HttpTools,是我的第一个想上传到GitHub上的项目,其实它就是一个测试Http接口的工具App,类似于RESTClient这样的工具,它本身十分简单,我并不是为了方便测试服务器给的接口,因为它不如直接使用RESTClient方便调试接口,之所以想搞出这个东西,最大的想法是为了测试Http网络请求框架是否稳定易拓展,比较这个项目测接口是要写Http请求代码的,而不是一个纯粹的测试工具。
1.创建GitHub仓库
我决定先在GitHub上创建一个仓库,打算后面通过命令行把本地开发好的代码上传到该仓库下进行管理。
2.创建本地项目的Git库
这里,本地项目工程名为:HttpTest
,本仅仅是用了测试Http接口的,后面考虑到本项目可以用了测试网络请求框架,因此准备关联到HttpTools的远程GitHub仓库。
(1)初始化HttpTest项目为git仓库
找到工程路径:
使用命令git init
(2)添加项目文件到本地Git仓库
注意,有些文件是需要进行忽略的,所以执行添加之前,先要忽略特殊文件,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
将项目文件添加到本地Git仓库,操作如下:
(3)github上的项目pull
下来
(4)本地Git库关联远程库HttpTools
远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
(5)本地库的所有内容推送到远程库上
PS:这里push会出错的原因是因为,我在远程库中添加了README.MD
,所以无法成功,需要先执行命令,把远程仓库中的README.MD
等文件通过如下命令合并[注:pull=fetch+merge]到本地Git仓库:
查看是否本地Git仓库中已有远程库的相关文件:
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来, 在以后的推送或者拉取时就可以简化命令。
PS:因为直接在GitHub上创建项目,如果选择了自己生成README.MD
或开源许可证等文件,还会自动生成.gitignore
,在PUSH
本地代码到远程库时一定会报错,请按这篇博客解决即可:如何解决failed to push some refs to git。
【参考】:
1.Getting your project on GitHub
2.如何用命令行在github新建一个项目
3.廖雪峰的官方网站-Git教程