内容:html
1.Git介绍与安装与原理git
2.Git基本操做github
3.分支管理bash
4.远程仓库app
5.多人协做ssh
6.github使用 - 开源项目测试
参考: fetch
http://www.cnblogs.com/alex3714/articles/5930846.html网站
http://www.javashuo.com/article/p-wmvyyqjp-co.html加密
注:本节主要以git命令操做为主
1.Git介绍与安装
(1)关于Git
git是一个用于帮助用户实现版本控制的软件
git的做用: 版本控制
(2)Git安装
最先Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑。不过,慢慢地有人把它移植到了Windows上。如今,Git能够在Linux、Unix、Mac和Windows这几大平台上正常运行
Linux上安装:
1 sudo apt-get install git
Windows or Mac:
下载安装包本身安装:https://git-scm.com/downloads
后面的例子以Windows系统为例,Windows系统成功安装Git后,右键点击文件夹或桌面选项中将会出现两个Git开头的选项。选择Git Bash Here,打开的窗口就是写Git命令的地方,以下所示:
(3)Git原理
Git把管理的文件分为了两个区域四个状态:
工做区:当前开发程序所在目录称为工做区,即:工做开发都是在该目录,该区域的文件会有状态的变化且状态由git自动检测,若是程序中文件作任何操做(增、删、改),文件状态均会被检测到,可使用 【git status】命令查看
版本库:工做区检测到有文件发生变化,那么意味着较上一个版本以后对程序进行了修改,修改完成以后,能够当作下一版本进行提交,那么就是执行 【git add .】 将全部文件提交到暂存区,而后再执行【git commit -m '又一个版本'】提交到版本库的分支便可,以后可使用【git log】命令查看版本记录
上述图片中经常使用命令:
2.Git基本操做
(1)建立仓库 -> git init
什么是版本库呢?版本库又名仓库,英文名repository,你能够简单理解成一个目录,这个目录里面的全部文件均可以被Git管理起来,每一个文件的修改、删除,Git都能跟踪,以便任什么时候刻均可以追踪历史,或者在未来某个时刻能够“还原”
因此,建立一个版本库很是简单,首先,选择一个合适的地方,建立一个空目录,建了空目录而后在此目录下执行git init 目录便可建立仓库:
如上所示瞬间Git就把仓库建好了,并且告诉你是一个空的仓库(empty Git repository)
(2)添加文件 -> git add
在文件夹中新建一个文件后经过git add 添加到仓库中:
注:git add . -> 一次性添加全部文件
(3)提交代码 -> git commit
接着使用git commit命令将文件提交到仓库中:
(4)代码修改并提交 -> git add 和 git commit
修改文件中的内容,运行git status命令查看以下:
虽然Git告诉咱们test.txt被修改了,但若是能看看具体修改了什么内容,天然是很好的。查看具体修改内容可使用git diff命令:
输出中+号绿色显示的就是修改或新增的内容,-号红色显示的就是去掉或被修改的内容
知道了对源文件做了什么修改后,再把它提交到仓库就放心多了,再次提交到仓库先使用git add再使用git commit:
(5)代码回滚 -> git log 和 git reflog 和 git reset
在实际工做中Git仓库中的历史记录,能够用git log
命令查看:
git log
命令依次显示从最近到最远的提交日志,上面那一大串数字和字符的混合体是版本号,是一个SHA1计算出来的一个很是大的数字,用十六进制表示
接下来咱们要开始回滚要把第二次提交回滚到第一次提交,使用git reset命令,后面带上--hard参数以及要回退到的版本号:
回滚却是完成了,若是想要在回到第二次提交的版本怎么办呢?不能像以往经过【git log】来查看记录再回滚了,再回去须要这么搞:
(6)撤销修改 -> git checkout 和 git reset
人都是犯错的,有时候在文件中可能写错了一些东西须要咱们去撤销修改,Git中撤销修改的命令是git checkout -- file(固然没添加的时候通常都是手动撤销修改)
git checkout -- file
命令中的--
很重要,没有--
,就变成了“切换到另外一个分支”的命令,咱们在后面的分支管理中会再次遇到git checkout
命令
加入你git add文件到了暂存区,庆幸的是,在commit
以前,你发现了这个问题。用git status
查看一下,修改只是添加到了暂存区,尚未提交
此时能够用命令git reset HEAD file
把暂存区的修改撤销掉,从新放回工做区:
git reset
命令既能够回退版本,也能够把暂存区的修改回退到工做区。当咱们用HEAD
时,表示最新的版本
(7)删除操做 -> git rm 和 git checkout
在Git中,删除也是一个修改操做,假如在文件夹中删除了一个文件,这个时候,Git知道你删除了文件
所以,工做区和版本库就不一致了,git status
命令会马上告诉你哪些文件被删除:
此时有两种选择:
git rm
删掉,而且git commit提交删除
第一种选择(删除版本库中的):
第二种选择(撤销工做区中的删除):
git checkout本质上
是用版本库里的版本替换工做区的版本,不管工做区是修改仍是删除,均可以“一键还原”
3.分支管理
(1)什么是分支
branch称为分支,默认仅有一个名为master的分支。通常开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支
(2)分支操做
branch相关经常使用命令:
注:git merge 时也可能会出现冲突,解决冲突的方式上述stash相同,即:找到冲突文件,手动修改冲突并提交,此处再也不敖述
实例:
依然使用上述的库,新建一个文件test.txt(在前面删除了):
新建dev分支并切换到dev分支:
在dev分支上修改文本内容修改完后提交到dev分支上而后切换到主分支上:
切换到主分支后查看文件内容:
接着在把dev分支合并到主分支上:
主分支上的文件内容:
(3)补充 - stash
stash用于将工做区发生变化的全部文件获取临时存储在“某个地方”,将工做区还原当前版本未操做前的状态;stash还能够将临时存储在“某个地方”的文件再次拿回到工做区
stash相关经常使用命令:
注:执行 git stash pop 命令时,可能会遇到冲突,由于在紧急修复bug的代码和经过stash存储在“某个地方”的代码会有重合部分,因此执行 git stash pop 时候就会出现冲突,有冲突解决冲突便可
4.远程仓库
基于GitHub实现代码托管,须要如下步骤:
(1)自行注册github,并进行相关设置
因为你的本地Git仓库和GitHub仓库之间的传输是经过SSH加密的,因此,须要一点设置:
第1步:建立SSH Key
在用户主目录下,看看有没有.ssh目录,若是有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,若是已经有了,可直接跳到下一步
若是没有,随便哪一个位置打开Shell(Windows下打开Git Bash),建立SSH Key:
1
|
$
ssh
-keygen -t rsa -C
"youremail@example.com"
|
把邮件地址换成你本身的邮件地址,而后一路回车,使用默认值便可,因为这个Key也不是用于军事目的,因此也无需设置密码
一切顺利的话可在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,能够放心地告诉任何人
第2步:登录GitHub 添加ssh key
打开“Account settings”,“SSH Keys”页面
而后,点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容:
点“Add Key”,而后就能够添加成功了
(2)完成上述操做后,点击new repository建立新仓库
(3)在上面点击create repository以后显示以下
详细解释以下:
(4)把本地文件提交到github网站上的仓库
push完了以后就能够去github上查看,固然也能够从github中的仓库上把某个分支pull下来继续开发,使用git pull origin 分支名
注:push和pull以前必须配置了ssh不然不能使用!
(5)克隆远程仓库
使用git clone命令能够克隆远程仓库(随便克隆),也就是下载远程仓库中的代码,步骤以下:
先随便进入一个仓库而后点击右上角的clone or download,而后复制连接
复制连接以后,使用git clone 连接 便可克隆该仓库
上述内容可整理成以下一张图:
久而久之,将Git和GitHub结合使用作到避免电脑损坏形成数据丢失以及多地开发的问题,上文执行过程当中执行 【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】,而且在执行过程当中可能会出现冲突,缘由是因为本地代码和获取的最新代码有重合部分,那么就须要本身手动解决冲忽然后再继续开发
另外,git rebase能够保持提交记录的整洁
5.多人协做
1 (1)容许他人操做程序 2 - 合做者(在github上容许别人) 3 - 在github上建立组织 4 5 (2)分支 6 - master 7 - dev 8 - xdb 9 - zhh 10 11 (3)规则 12 - 一块儿合并 13 - 合并时间:1/2 14 15 大概总结:我的在本身的分支上开发,功能开发完了把github上的dev拉下来而后把本身的分支合并到dev分支上,测试没问题合并到master分支上 16 合并的时候一块儿合并,小功能完结以后就合并(大概一两天) 17 18 19 问题: 20 $ git push origin dev 21 To https://github.com/WuPeiqi/dbhot.git 22 ! [rejected] dev -> dev (fetch first) 23 error: failed to push some refs to 'https://github.com/WuPeiqi/dbhot.git' 24 hint: Updates were rejected because the remote contains work that you do 25 hint: not have locally. This is usually caused by another repository pushing 26 hint: to the same ref. You may want to first integrate the remote changes 27 hint: (e.g., 'git pull ...') before pushing again. 28 hint: See the 'Note about fast-forwards' in 'git push --help' for details. 29 30 (4)作代码review 31 如何作代码review? 32 - 建立review分支(在上面的合并到dev以前进行) 33 谁来锁代码review? 34 - 组长 35 - 带你的人
6.github使用 - 开源项目
(1)关于开源项目
咱们一直用GitHub做为免费的远程仓库,若是是我的的开源项目,放到GitHub上是彻底没有问题的
其实GitHub仍是一个开源协做社区,经过GitHub,既可让别人参与你的开源项目,也能够参与别人的开源项目
可是在GitHub上,利用Git极其强大的克隆和分支功能,咱们能够自由的参加各类开源项目
(2)如何参与开源项目
访问项目主页点fork克隆项目仓库(必定要从本身的帐号下clone仓库,这样你才能推送修改)
若是你想修复项目的一个bug,或者新增一个功能,马上就能够开始干,干完后,往本身的仓库推送
若是你但愿别人能接受你的修改,你就能够在GitHub上发起一个pull request(对方是否接受你的pull request就不必定了。)
小结
在GitHub上,能够任意Fork开源仓库
本身拥有Fork后的仓库的读写权限
能够推送pull request给官方仓库来贡献代码(别人能够赞成也能够不一样意)