因为小组工程须要使用git&github的版本控制来协做,但我对其使用并不熟悉,特此写篇一页的笔记放在手边,备随时查阅。git
相信这种一页的简明笔记,对你们也是有帮助的。个人笔记总结自廖雪峰的Git教程(这是个连接,点进去就好^_^)。github
请不怎么了解Git的同窗先去看廖雪峰的教程,好好学习,由于我这里并不会陈列知识上的细节。ssh
使用方法:经常使用命令供随时查阅,其他内容供新手了解。工具
0. 经常使用命令一览学习
# 配置仓库命令(项目名:play,项目发起者的名字:icedream61,URL=git@github.com:icedream61/play.git) git clone URL # 第一次克隆远程仓库,并关联:远程仓库 -> 本地仓库 git remote add origin URL # 第一次推送本地仓库,并关联:本地仓库 -> 远程仓库(远程仓库名习惯起为origin,请入乡随俗) # 配置分支命令(分支名:dev,远程仓库名:origin) git checkout -b dev origin/dev # 第一次克隆远程分支,并关联:远程分支 -> 本地分支 git push -u origin dev # 第一次推送本地分支,并关联:本地分支 -> 远程分支 # 调试命令 git remote # 查看远程仓库名(如origin) git remote -v # 查看远程仓库库的名字、URL地址以及本身拥有的权限(fetch & push,即 克隆 & 推送) git branch # 查看本地全部分支,以及本身当前所处的分支(前面有星号) git status # 查看本地工做区、暂存区状态 git tag # 查看本地全部标签 git show <tag> # 查看对应标签详细信息 git log # 查看全部历史版本(详细信息) git log --pretty=oneline # 查看全部历史版本(一个版本一行信息) git reflog # 查看全部历史操做(一样能够加单行参数,不过貌似没区别) # 协同开发命令 git pull # 克隆所有远程分支:远程仓库 -> 本地仓库 git push origin <branchs> # 推送本地分支:本地仓库 -> 远程仓库(分支名以空格分割) git push origin <tags> # 推送本地标签:本地标签 -> 远程标签(标签名以空格分割) git push origin --tags # 推送所有本地标签:本地标签 -> 远程标签 # 单机开发命令 git add <files> # 添加文件:工做区 -> 暂存区(文件名以空格分割) git add -A # 添加全部文件:工做区 -> 暂存区(参数-A也能够写成--all) git commit -m ".." # 提交全部文件:暂存区 -> 本地仓库(""中的注释必定写清楚~) git checkout -- <files> # 撤销文件在工做区的修改:暂存区 -> 工做区 git reset HEAD <files> # 撤销文件的提交:本地仓库 -> 暂存区(就是回退到当前版本^_^) git reset HEAD # 撤销全部文件的提交:本地仓库 -> 暂存区 rm <files> # 删除工做区的文件(这个按说不算git命令=_=) git rm <files> # 删除暂存区的文件 git reset --hard commit_id # 切换到指定版本(commit_id能够改为HEAD、HEAD^、HEAD^^、……,即当前版本、上一版本、……) # 单机分支管理命令 git branch dev # 建立dev分支 git checkout dev # 切换至dev分支 git checkout -b dev # 建立并切换至dev分支 git merge my_dev # 将my_dev分支合并到当前所处分支中(经过git branch命令查看当前所处分支) git branch -d my_dev # 删除my_dev分支 # 单机标签管理命令 git tag <tagname> # 为当前版本(HEAD指向的版本)打一个标签 git tag <tagname> commit_id # 为指定版本(commit_id对应版本)打一个标签 git tag -a <tagname> -m ".." # 为当前版本打一个标签,加上备注信息 git tag -d <tagnames> # 删除本地标签(标签名以空格分割)
1. 安装Gitfetch
检查是否安装:命令行下输入git,能找到命令便可。ui
Mac OS X | 已预置 |
Ubuntu | sudo apt-get install git |
较老的Ubuntu 或 其他Linux系统 | 从Git官网源码安装,详见廖雪峰的Git教程 |
Windows | 详见廖雪峰的Git教程 |
Git安装以后,须要在命令行写三条命令设置下:spa
git config --global user.name "icedream61" # 建议和github保持一致 git config --global user.email "icedream@sjtu.edu.cn" # 建议和github保持一致 git config --global color.ui auto
2. 熟悉Github命令行
首先要去Github上面注册一个帐号,具体细节见官网。版本控制
登录进去Github,随时点左上角的小猫头像即可以回到主页。主页上方搜索框能够搜索开源项目,四张醒目的图片是Github的官方使用教程(显然是英文),下面左侧是你所参与项目的近期动态,右侧则是你所参与的项目列表。在这里,你能够看到 +New repository 按钮,用来建立新项目的按钮。
在Github中,建立项目又叫建立项目“仓库”(repository)。由于Github一个项目就是一个存放代码的仓库,你们均可以来看代码、下载代码……
Github是容许你在线改代码的,但每每在线修改并不容易(如Android代码,显然下载到本地用IDE才是正道),所以每每你们都下载代码在本地修改,改好了传上去。下载上传代码有两种方式,一种是点按钮的,一种是命令行的,这里只介绍命令行的。
Github是基于一个叫Git的命令行工具的,这东西的历史详见廖雪峰教程开篇的Git简介。平常使用中,Github是须要和Git协同工做的,通常流程都是这样:
新建项目 | 上Github,新建一个项目仓库,作好基本设置,写好简介 这样,你和别人便均可以看到这个项目了 |
下载代码 | 上Github,找到项目,在页面右侧下方找到clone URL,选择传输方式(SSH最快),点击按钮复制网址 进入本地某目录(如workspace),输入命令:git clone URL(刚才的网址),选择yes 假如刚才的项目叫play,你如今本地便会多个目录workspace/play/,里面是项目的所有代码 |
3. 设置SSH KEY
本地Git和远程Github通讯是采用ssh协议的,所以须要设置ssh密钥。
若是目录~/没有.ssh目录,则须要建立ssh密钥,命令:ssh-keygen -t rsa -C "youremail@example.com"(换成你的邮箱)
上Github,右上角点你本身的头像,选settings;左侧,选择SSH keys进入;选Add SSH key,写个Title,把~/.ssh/id_rsa.pub内容复制到文本框Key,点Add key。
搞定。
对了,给Github设置ssh密钥,你的邮箱应该会收到邮件提醒的~
4. 仓库(又称版本库)与远程仓库、版本控制、分支、标签
这几个概念必须清晰,这里只作简述,详见廖雪峰教程。
在Git中,有仓库和工做区之分。以刚才的play项目为例,你项目根目录workspace/play/即是你的工做区,而仓库则是workspace/play/.git/目录(隐藏的)。你平时工做就在工做区工做,文件随便改;想保存了,就利用Git的命令存入仓库;想恢复了,就利用Git的命令从仓库恢复,这样工做区便成了你以前保存的样子。
远程仓库,就是像Github这样的地方。本地的修改,上传到远程仓库,能够省得本地代码丢失,以及方便你们协同工做、方便发布代码。
Git会把每一个版本都存一份,而HEAD指针指向当前版本。你用git clone下载的就是HEAD指针所指的版本,而你能够查看全部版本信息,能够用HEAD指向任何以前的版本,便退回去了。
Git有飞快的分支管理(比别的类git软件分支管理快得多),好比play这个项目上线了,你们开始用稳定版。而大家团队打算继续开发,有开发UI界面的、游戏内核的等等,那么大家便须要各自建立本身的分支去开发,此时大家便依旧能够正常从Github上传和下载代码,而因为所处分支不一样,大家各自的开发进度、大家的开发和上线的版本都不会互相影响。等各自开发完了,再把各个分支合并起来,造成新的版本继续开发和发行。
Git有标签管理,你能够给某个版本打上独特的标签,这样之后即可以轻松定位到了。例如发行什么1.0版、2.0版,开发1.1版、1.1.3版之类的,随你喜欢。
熟练使用这些功能,能够极大提升开发效率。
5. 如何本地开发
想要本地开发,这个你们先要理解了Git的几个文件存储区:(依旧以workspace/play/目录为例)
(1)工做区:就是这个workspace/play/目录,除了里面的.git文件夹以外,都算作工做区。就是本地一个文件目录,该怎么开发怎么开发就好。
(2)暂存区:在.git中的一个地方,若是这里没有和本地仓库的当前版本彻底同步,工做区就被称为是“不干净的”。
(我没看错的话,廖雪峰教程中给的暂存区实际目录应该已通过时,你们请去自行查阅资料,找到真正的暂存区所在+_+)
(3)本地仓库:也在.git中的一个地方……这里面存着全部版本和全部信息,全都不会删,能够从这里随时找到任何一个版本。
(4)远程仓库:在Github上,这里不具体讲解。
而后,本身灵活使用命令就好。并且不一样小组开发状况不一样,也没法一律而论,就不赘述了,只说下三个区。
6. 小组协做方式
咱们假设状况很简单:有一个master是发行版,一个dev是开发版,而后每一个人有本身的一个分支。
首先是A同窗建立好项目:
(1)在Github上建立一个项目仓库,写好使用方法。
(2)找个目录,输入:git clone URL,把仓库内容clone下来。
(2+)在工做区输入:git remote -v,确认远程库的名字、地址以及本身拥有的权限(fetch&push)。
(2+)在工做区输入:git branch,确认当前只有master分支,而且master前面有个星号(*表示当前正处于此分支下)。
(3)写好master分支(发行版),写入本地仓库,在工做区输入:git push origin master,推送分支。
(4)在工做区输入:git checkout -b dev,建立并切换到dev分支。固然,依旧能够用git branch确认。
(5)写好dev分支(开发版),写入本地仓库,在工做区输入:git push -u origin dev,推送分支。
而后去通知全部同窗来参与项目,而参与项目的B同窗则要这样:
(1)在Github上找A同窗要到push代码的权限(不然只能clone下来,不能push修改)。
(2)找个目录,输入:git clone URL,把仓库内容clone下来。
(3)在工做区输入:git checkout -b dev origin/dev,建立一个dev分支并和远程dev分支关联起来。
这样一来,全部同窗便均可以在本地开发并协同工做了,具体流程就像这样:
(1)在工做区输入:git checkout -b <name>,建立本身的分支。
(2)使用:git push -u origin <name>,首次提交,在远程仓库建立此分支。
(3)开发
(3+)随时使用:git push origin <name>,提交代码。
(3+)随时使用:git pull,取得最新dev代码。
当本身的开发成果能够合并到dev分支时,先保证本地dev代码是最新的,而后:
(1)使用:git checkout dev,切换到dev分支
(2)使用:git merge <name>,将本身的分支合并到dev中
(3)使用:git push origin dev,将dev分支推送到远程仓库
一旦要在另外一个电脑(或目录)中创建开发环境,则只须要:
(1)使用:git clone URL,把仓库内容clone下来。
(2)在工做区输入:git checkout -b dev origin/dev,建立一个dev分支并和远程dev分支关联起来。
(3)在工做区输入:git checkout -b lq origin/lq,建立本身的lq分支并和远程那个本身以前写着一半的分支关联起来。
一旦要在两个电脑(或目录)中切换着开发,则只须要:
(1)切换目录,使用:git pull,获得最新代码。
(2)开发
(3)使用:git push origin <name>,把本身的工做进度提交到远程仓库。
7. 结语
再次重申,这些命令每一个的含义和使用方法,不懂的请去看廖雪峰的Git教程,我这是个一页手册,不是教程^_^