Git的使用
一、概述 - git和svn区别
所需软件私信我邮箱。
VCS(version control system)版本控制系统。分为两种,分布式版本控制系统(以git为代表)和集中式版本控制系统(SVN为代表)。
1.1 SVN工作流程
集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。下面举例说明:
开始新一天的工作:
1、从服务器下载项目组最新代码。
2、进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。
3、下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。
这就是经典的svn工作流程,从流程上看,有不少缺点,但也有优点。
优点:
1、管理方便,逻辑明确,符合一般人思维习惯。
2、易于管理,集中式服务器更能保证安全性。
3、代码一致性非常高。
4、适合开发人数不多的项目开发。
缺点:
1、服务器压力大。
2、特别依赖服务器,脱离了服务器,无法开展工作。
1.2 git工作流程
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
Git的功能特性:
从一般开发者的角度来看,git有以下功能:
1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
3、在单机上自己创建的分支上提交代码。
4、在单机上合并分支。
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6、生成补丁(patch),把补丁发送给主开发者。
7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:
1、查看邮件或者通过其它方式查看一般开发者的提交状态。
2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
3、向公共服务器提交结果,然后通知所有开发人员。
优点:
l 适合分布式开发,强调个体。
l 公共服务器压力和数据量都不会太大。
l 速度快、灵活。
l 任意两个开发者之间可以很容易的解决冲突。
l 离线工作。
缺点:
l 资料少(起码中文资料很少)。
l 学习周期相对而言比较长。
l 不符合常规思维。
l 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
二、git的使用
git不是github,git的远端托管仓库有github、gitlab、gitee。
2.1 git下载及安装
下载地址:https://git-scm.com/download/
双击安装,无脑下一步。
安装完成。此时是安装了三个东西,git GUI、git Bash、gitk。在桌面上右键:
2.1.1 git GUI
用户可视化界面。
2.1.2 git Bash
命令行工具。
2.1.3 gitk
分支可视化工具。可查看diff。
2.1.4 Git bash命令讲解
GIT bash里面是纯Linux命令。
pwd 查看当前所在目录
cd 切换文件夹
mkdir aaa 创建文件夹
touch 1.js 创建文件
mv 1.js ./2.js 改名
rm -rf ./2.js 强制删除
ls -all 列出当前目录的文件
2.2 git全局配置
使用git之前一定要全局配置,告诉git你是谁。
git config --global user.name "huoqingchi"
git config --global user.email "123203557@qq.com"
此时,在C:\Users\Administrator(家目录)文件夹下生成了一个.gitconfig隐藏文件,用来记录你的用户名和密码。
如果你看不到这个文件,打开工具-文件夹选项-查看-显示隐藏的文件、文件夹:
2.3 新建项目-建git仓库
新建文件git_project文件夹,执行
git init
此时文件夹中生成.git隐藏文件夹,这个文件夹千万不能删除,它是用来记录版本信息的。
2.4 提交代码
新建了index.html文件和index.css文件。
git add .
git commit -m "项目开荒"
git add . :添加当前文件夹下(包括里面的子文件夹)所有的有变动的文件到“待提交区域”
git commit : 提交文件到git版本库,真正的提交。
-m :注释
此时查看gitk:
2.5 拉取代码
如果手误把你文件删除了,但是保证没把.git文件删除,可以把你最新提交的代码拉取回来:
git checkout .
git checkout .:拉取所有的文件
git checkout 文件名字:拉取单个文件
2.6 版本回退
每次版本提交,会生成一个SHA id码,用来区分每次的版本,可以用这个码来实现版本回退。
要回到哪次版本,在gitk中查看此次版本的SHA码,复制下来。
git Bash中执行:
git reset --hard 08a96f3b0dc354aebc7ac471546681c433b050a40
此时gitk,发现后续版本都没有了,我如果想去后续版本,找不到SHA码
此时执行:
git reflog
此时会显示出来版本提交的列表以及每次提交的ID,咱们使用ID实现去后续版本。
执行:
git reset --hard 66a2cca
就能回到第五次版本。
三、Github
gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub。也有付费版的,供企业使用。
3.1 注册
注册只需要邮箱,这里不做演示。我直接登录。
3.2 建库
3.3 跟github联通
现在git项目好了,github上库也建好了,你托管git项目的时候github不知道你把你的项目托管到哪,所以咱们需要一个SSH码来让github知道你是谁。
生成SSH码:
ssh-keygen -t rsa -C "你注册github的邮箱"
ssh-keygen:生成一个密匙;
-t rsa:密匙的类型是rsa;
-C:注释
输入命令后按三下回车。
然后生成的密匙保存在 c/Users/Administrator/.ssh/id_rsa.pub,复制密匙。
用编辑器打开(注意,不要使用windows自带的记事本,因为windows自带的记事本的换行符有bug)。
打开id_rsa.pub文件,复制里面的所有内容
打开github中的setting:
此时测试一下你的电脑和远端github库有没有联通:
ssh -T git@github.com
能出现Hi 你的github的名字就说明联通成功了。
3.4 托管git项目
3.4.1 托管项目之前先新建README.md文件
md文件是markdown文件的后缀,类似与html,README.md文件显示在你项目的首页,用来介绍整个项目。
touch README.md
添加图片:
得到图片绝对地址可以把需要的图片上传到github上面然后获得github分配给你的绝对地址:
之后在改变README.me文件:
![图片alt](图片地址 ''图片title'') ![blockchain](https://ss0.bdstatic.com/0.jpg "区块链") 图片alt就是显示在图片下面的文字,相当于对图片内容的解释。 图片title是图片的标题,当鼠标移到图片上时显示的内容。title可加可不加
3.4.2 托管项目
git add . git commit -m “项目托管” git remote add origin https://github.com/RopeHuo/images.git//这个地址是你自己的仓库地址 git push -u origin master
3.5 克隆库
Github库的地址:
git clone https://github.com/RopeHuo/images.git
3.6 项目开发
项目的开发一定不能在主分支上,一定是在自己的分支上。主分支一定要是稳定的,是用来发布版本的。
创建分支:
git branch huo1
切换分支:
git checkout huo1
删除分支:
git branch -D huo2
在自己分支上修改后,上传到远端giuhub库:
git add . git commit -m “huo的提交” git push origin huo1
合并分支,把huo1合并到主分支:
git merge huo //切换到另一个分支进行跟huo合并
如果进入到这种状态可以取消这次合并,使用“git merge --abort”命令:
如果合并时进入到这个页面输入冒号加wq ":wq", 按回车键,即可关闭该页面:
解决合并时产生的冲突,比如我给两个开发者在各自分支上开发的时候给同一个元素设置了不同的样式就会报错:
遇到冲突需要手动解决冲突,然后重新add/commit/push
四、可视化工具(Github Desktop)
五、Visual Studio Code
编辑器能够自动感应.git文件夹。
可以查看改变:
文章都是本人学习时的笔记整理,希望看完后能对您有所帮助,欢迎大家提意见,多多交流。
也有些文章是转载的,如果存在转载文章且没有标注转载地址的,请与我联系,马上处理。
自由转载-非商用-非衍生-保持署名。