Github在程序界的应用已蔚然成风,讲解如何使用Github的博客和书籍也都很多,但大多讲的很复杂,看了似懂非懂。使用Github的流程总结起来如下:
1. Objective(目的),为什么我们要使用Github,总结起来有如下几个重要的原因:(1)大牛们都在用,而且几乎所有优秀的开源项目如今都转用Github进行托管,为了获取资源,学习使用Github具有必需性。(2)可以协同合作一个项目,Github可以支持多人远程协同开发,且支持离线修改,只是这种修改是先暂存在本地,等连接到网络时,我们便可以提交我们所作出的所有修改。这是Github胜过之前所有版本控制软件的优势。
2. 基本概念:Git有三个状态,modified(已修改),staged(已暂存),committed(已递交)。已修改表示修改了文件,但还没保存到本地仓库中。已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照(snapshot)中。以提交表示数据已经安全地保存在了本地仓存中。
Github的stage(暂存区)是一个很新颖却又让很多人迷惑的概念。对它的讨论也很多。总结起来引入暂存区有这么几个优点:1.分批,分阶段提交,降低commit颗粒度 2.进行快照,便于回退到之前的各个中间版本状态 3. 有点类似于缓存区的概念,有利于提醒用户在commit之前,再做进一步的确认。
3. Procedure(Git使用流程):
基于你已经在PC端安装好git工作环境,并配置好用户名和邮箱的前提下,我们该如何将我们的项目文件托管到Github服务器端呢?
1). 先选一个地方创建一个新的项目文件夹(repository),再在这个文件夹中初始化一个git本地仓库。命令如下:
$mkdir foldername //创建一个新的项目文件夹
$git init //初始化git本地仓库
或者直接从Github上克隆一个我们喜欢的项目到本地,再做进一步的修改。命令如下:
$git clone https://github.com/username/foldername.git
这时可以不需要初始化本地仓库,因为克隆下来的项目文件中,已经包含了git仓库信息,都在.git隐藏文件夹吧,一般不要修改该文件夹中的文件内容
2) . 将需要跟踪变化状态的文件加入暂存区(stage)中,不需要跟踪的文件,可以不用添加。命令如下:
$git add/stage filename1 filename2......
或者git add . 可以将当前目录下的所有文件加入到暂存区中
关于此处的git add 和git stage,这两个命令其实是等价的,一般的书本和教程上都是使用git add,这里推荐使用git stage,因为更好理解,将文件加入暂存区(stage)嘛
3). 如果我们操作失误,或者后悔了,不想将某些文件加入到暂存区中,则可以将其撤回到工作区,命令如下:
$git reset HEAD filename
4). 接下来将本次的修改递交(commit)到本地仓库中。命令如下:
$git commit -m ”modification“ //-m 参数代表了message(信息),后面的参数modification,用此次修改的详细内容替换之。
5). 如果我们能够连接到网络,就需要将我们本地仓存中所有的修改,上传到github的仓存中。命令如下:
$git remote add origin https://github.com/username/foldername.git //连接到github服务器端想要上传的文件夹,并赋予一个origin的别名
$git pull origin master //先将云端文件夹中的变动同步下来(第一次上传的时候,必须要有这一步,不然不能进行下一步的上传工作)
$git push -u origin master //这里的-u值得是 upstream(上传流),将本地仓库中的所有commit推送到github云端。
截止目前,如果一切顺利,那么我们便成功的将我们的项目文件夹托管到了github服务器上,之后每次修改,stage一下被修改的文件,再commit并同步到云端即可
别的一些有用的小指令:
6). $git log 查看所有的历史commit。
7). $git status 查看文件夹中的文件状态(unstaged,staged but not commited, commited)
8). $git diff 查看工作区和stage区文件的不同
9). $git diff HEAD/--staged 查看stage区和commited状态的文件的不同
10). $git config username 可以查看本地git的用户名
11). $git config useremail 可以查看本地git的用户邮箱
12). 使用git diff命令后,git bash一直显示比较文件的页面,怎么退出来呢? 输入 q 就可以退出了。
********************branch(分支)**********************
branch在github中是一个很重要的概念,我们可以创建一个新的分支,在这个新的分支上,实现我们的新功能或者debug,又可以保证不会影响到主枝干,如果功能实现或者debug成功,我们就将新分支合并到主分支上,如果开发失败或者这个分支失去了存在的意义,我们便可以删除该分支,这样保证主枝干的整洁。
1). $git branch test_branch //创建一个新的分支,其名为test_branch
2). $git checkout test_branch //切换到test_branch
3). $git branch -m renamed_branch //重命名为renamed_branch
4). $git branch -D/-d test_branch //删除test_branch
为了将新分支合并到主分支上,我们可以进行下面的操作:
5). $git checkout master //切换到主分支
6). $git merge new_feature //合并
********************分割线*****************************
写累了,对branch和HEAD头指针已经pull request等功能的更深入的讨论,下次再继续写