git介绍
Git是目前开源软件使用最多的版本管理软件,是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。然后将更新提交到远程仓库。
安装配置git
下载地址:https://git-scm.com/downloads
远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置。
1、设置Git的user name和email:
git config --global user.name "zhizhi"
git config --global user.email "zhizhi@gmail.com"
2、生成SSH密钥过程:
ssh-keygen -t rsa -C "username" //可以输入计算机名或邮箱地址或其他你想要设置的用户名
图1 生成密钥过程示意图
切换到 ~/.ssh文件夹,会发现两个文件:id_rsa和id_rsa.pub,用记事本打开id_rsa.pub文件,复制 id_rsa.pub文件内容到 github->settings->SSH and GPG key->new ssh->key
图2 将密钥添加到github
3、测试ssh设置是否成功
图3 连接成功
建仓管理代码基本操作命令
开始之前,先理解以下几个名词:
工作区(Wroking Directory)
就是你在电脑里能看到的目录,比如我的demo
文件夹就是一个工作区:
版本库(Repository)
本地文件夹在初始化之后会生成一个隐藏文件夹.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
图4 git管理代码的工作示意图
1、在github上新建仓库,用来存放项目
2、在本地新建项目,上传到github仓库
① 选择本地项目文件夹目录,初始化代码仓库,并关联到远程仓库
git init // 初始化代码仓库 把这个目录变成Git可以管理的仓库 // 1、https关联 git remote add origin https://github.com/<github用户名>/<仓库名>.git // 2、ssh关联 git remote add origin git@github.com:<github用户名>/<仓库名>.git
② 添加文件到仓库
git status // 将显示出做了什么改动,例如modify、add和remove git diff // 查看文件修改了哪些内容 git add // 将文件的改动情况提交到暂存区 git commit -m "log" // 将暂存区中的内容提交到本地仓库的master分支 git commit -m <message> // 提交添加的文件 mssage为描述信息
③ 将代码提交到远程仓库
git push origin master // 将代码提交到远程仓库
④ 将远程代码更新到本地
git fetch // 拉取远程仓库的修改 git pull origin master = git fetch && git merge // 将远程仓库的修改更新到本地 并将本地修改提交到远程仓库 git log // 查看提交记录 git log --pretty=oneline // 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline 参数
3、从远程仓库clone项目,在本地修改提交,协作完成任务
① clone远程项目
// 两种方式进行克隆 // 使用https git clone https://github.com/<github用户名>/<仓库名>.git // 使用ssh git clone git@github.com:<github用户名>/<仓库名>.git
其余操作同在本地新建项目。
4、修改回退
① 只修改了代码,没有add到暂存区
git checkout --filename // 回退工作区文件的修改,回退待版本库该文件的状态
② 已经将修改add到暂存区
git checkout --filename // 回退工作区文件的修改,回退待暂存区中该文件的状态 git reset HEAD <file> // 把暂存区的修改撤销掉
③ 已经将修改从暂存区commit到本地仓库
git reset --hard HEAD^ // 回退到上一个版本
在git中HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,如果版本过多,搞不清到底时第几个版本,也可以直接添加版本号入参,回退到指定的版本号
git reset --hard commit_id // commit_id为版本号 git long // 查看提交历史,确定版本号
入果回退到之前的版本之后,又想回到较新的版本,可以通过git reflog查看历史命令,确定回到较新的那个版本号
图5 版本回退示意图
5、分支管理
火影里,鸣人利用影分身来进行不同的修行,最后不同的影分身合并的本体之后,他们所进行的修行也都合并到了本体,提高了修行效率。git在协同开发的时候,也有同样的分支管理的功能。
Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
git checkout -b dev // 创建一个新的分支并切换到新的分支
git checkout master // 切回到master分支
git merge dev // 把dev分支的工作成果合并的master分支上
git branch -d dev // 删除dev分支
6、遇到的问题
① 更新远程仓库失败
图6 更新报错
好像时ssh连接出现了问题,在测试连接是否成功的时候,成功提示信息有一句话“but git doesn't provide a shell access”,所以我们更改github的连接方式,从之前的ssh方法转为https方法。具体操作如下:
git config --local -e // 编辑本地git配置
图7 修改配置文件
将url = git@github.com:你的用户名/仓库名.git
改为
url = https://github.com/你的用户名/仓库名.git,再次提交到远程仓库就会成功
图8 提交成功