一、Git引言
在单人开发过程中,需要进行版本管理,以利于开发进度的控制。
再多人开发过程中,不仅需要版本管理,还需要进行多人协同控制。
二、介绍
Git是一个开源的分布式版本控制系统,用于敏捷高效的处理任何或大或小的项目。
Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开源版本控制软件
三、Git安装
#下载地址 https://git-scm.com/download/
#下载安装完后,打开cmd
#如下信息会在提交代码时使用,记录在你的每次提交中,以后就知道每次提交的人是谁,"git log"可以查看
#执行:
git config --global user.name "Your Name" #用户名
git config --global user.email "email@example.com" #邮箱
#查看信息
git config -l
#测试:cmd中执行,查看git版本
git version
四、架构
版本库:工作区中有一个隐藏目录 .git
,这个目录不属于工作区,而是git的版本库
,是git管理的所有内容
暂存区:版本库中包含一个临时区域,保存下一步要提交的文件。
分支:版本库中包含若干分支,提交的文件储存在分支中。
五、仓库
对应的就是一个目录
,这个目录中的所有文件被git管理起来。
以后会将一个项目的根目录
,作为仓库。
仓库中的每一个文件的改动都由git跟踪。
5.1新建一个仓库
选择一个目录,执行指令:
git init
5.2工作区
执行 git init
的目录即为工作区,如F:\HZZQKJ\GitDirectory
目录即为工作区【不包含.git
目录】
所有文件,都首先在工作区新建,然后可以存入仓库(版本库),进行版本控制。
5.3存储区
暂存区也在.git
目录内,工作区的文件进入仓库是,要先进入暂存区。
5.4分支
版本控制,简单说,就是记录文件的诸多版本,分支就是这些版本的最终记录位置。
六、基本操作
6.1查看仓库状态
执行下面代码可以看见工作区中文件的状态
git status
6.2暂存文件
执行 git add
作用是将工作区的文件存入暂存区中,.
的作用是所有的意思
git add .
6.3提交文件
执行 git commit -m "这里写提交的描述信息"
作用是将暂存区的文件存入分支,形成一个版本,m
的意思是message的缩写,"描述"
的作用是为了不混乱以后的提交
git commit -m "add hig.txt"
七、远程仓库
第五章中的仓库,其实是本地仓库
当多人协同开发时,每人都在自己的本地仓库维护版本
当很重要的一点是,多人之间需要共享代码、合并代码,此时就需要一个远程仓库
。
7.1远程仓库工作模式
一个仓库,多个程序员可上传
7.2远程仓库选择
GitHub或码云都不错
7.3基本操作
每个开发人员,在面对远程仓库时,会面临的一些基本操作。
7.3.1注册git服务器账号
去GitHub或者码云上创建账号
7.3.2新建远程仓库(码云为例创建)
点击新建仓库
写入仓库名称,路径是默认仓库名称的,仓库介绍可写可不写。
其他默认,点击创建
看到调转后则表示创建成功
7.3.3本地关联远程仓库
现在这个页面就能看见项目名称以及项目的HTTPS和SSH地址
#输入
git status
#返回clean则都提交了
#FlamingYouth只是我自己取得名字
#https....则是码云上的远程地址
git remote add FlamingYouth https://github.com/FlamingYouth/Test.git
#-v 则是查看刚刚的关联的地址名
git remote -v
7.3.4推送文件到远程仓库
#上传到FlamingYouth项目中master分支中
git push FlamingYouth master
#弹出框输入码云的用户名和密码
#出现GITEE.COM则成功上传
7.3.5克隆远程仓库
如果仓库已经由别人创建完毕,我们需要其中的内容,则可以通过克隆将其复制到本地。
#在克隆文件夹中cmd,使用 git clone + "地址"
git clone https://gitee.com/flamingyouth/Test.git
7.3.6代码共享
#多人协同开发时,写好代码的git push上传到远程仓库
git push FlamingYouth master
#需要代码的git pull拉取代码即可。//记得到另一个文件夹也要关联一下
git pull FlamibgYouth master
7.3.7命令汇总
八、分支
8.1分支简介
分支,是一个个版本最终存储的位置
分支,就是一条时间线,每次git commit
形成一个个版本,一个个版本一次存储在分支的一个个提交点上。
8.2分支基操
8.2.1查看分支
查看当前仓库的分支 git branch
仓库中默认只有master
分支
执行git commit
时,默认是在master
分支上保存版本
#查看分支
git branch
8.2.2创建分支
在项目开发过程中,我们不会轻易的在master
分支上做操作。
我们会新建一个开发专用的分支
,在此分支上做版本的纪录。
当代码确实没问题时,才会将开发分支上成熟的代码版本添加到master分支
上。
即保证开发过程中,可以及时记录版本,又保证master分支上每个提交点都是稳健版本。
#创建分支名为dev
git branch dev
8.23切换分支
默认情况下,当前使用的分支是master分支
可以切换到dev分支
,则后续git commit
便会在`dev分支
上新建版本(提交点)
#切换到dev分支
git checkout dev
8.3新建分支细节
新建分支时,新分支,默认有哪些内容?分支中包含哪些次提交?
8.3.1新分支初始内容
每个分支都有一个指针
,新建一个分支,首先是新建一个指针
而且新分支的指针会和当前分支指向同一个提交点
。
新分支包含的提交点就是从第一个提交点到分支指针指向的提交点。
8.3.2多分支走向
在master分支和新分支,分别进行git add 和 git commit
则主分支与新分支分开,分两条线路走
8.3.3分支提交日志
查看分支的提交日志,进而看到分支中提交点的详细情况
#简单日志
git log --oneline
#完整日志
git log
#走势图
git log --oneline --graph
8.4分支合并
两个分支内容的合并
git merge 分支a 合并分支a
合并的方式有两种:快速合并和三方合并
8.4.1快速合并
如果分支A当前的修改,是完全基于分支B的修改而来,则B分支合并A分支,就是移动指针即可。
#用关键字merge快速合并
git merge dev
#返回Fast-forwar
8.4.2三方合并
在不具备快速合并的条件下,会采用三方合并
#用关键字merge快速合并
git merge dev
#返回recursive strategy
8.4.3合并冲突
两个分支进行合并,但它们含有对同一个文件的修改,则在合并时出现冲突,git无法决断该保留该文件哪个分支的修改。
8.4.3.1冲突演示
git merge dev
#返回CONFLTCT(content):Merge conflict in b.txt
8.4.3.2冲突解决
出现冲突后,如要由两个开发人员当面协商,该如何取舍,为冲突文件定义最终内容。
解决方案:
保留某一方的,删除另一方的
保留双方的
但无论如何,要记得删除
<<<< ==== >>>>
这些本质是两人协商为冲突的内容,定制出合理的内容。
九、Idea管理Git
9.1关联git
#打开idea >>> settings >>> Version Control >>> Git >>>Path to Git executable
9.2创建仓库
#VCS >>> Import into Version Control >>> Create Git Repository...
9.3提交-commit
#VCS >>> commit
9.4创建分支
#在右下角点击Git: master >>> 选择需要的分支如:dev >>> Checkout
9.5上传到远程仓库(push)
#VCS >>> Git >>> push
9.6复制到本地仓库(clone)
#VCS >>> Git from Version Control >>> Git >>> URL仓库的链接
#输入账号和密码
9.7更新到本地仓库
#VCS >>> Git >>> pull
9.8冲突解决
#保留自己 >>> Accept Yours
#保留他人 >>> Accept Theirs
#然后在Terminal终端中输入
git commit -m "fix conflict"
9.9补充说明
#可以在项目中新建一个.gitignore文件来排除不需要上传的文件
十、多人协同开发
10.1开发人员
初始化:在idea中clone远程库,获取项目。会建立本地库。
后续的开发中,都要在dev分支上进行。开发完一个功能并测试通过后就commit 提交到本地的dev分支中,然后上次(push)到远程dev分支中。
需要更新项目内容时,通过pull从远程仓库拉取内容。
注意:多人协同时,每次在push到远程库前,都先做一次pull,一来是把远程最新内容合并到本地,二来是核实本地内容是否和远程内容有冲突
后续的开发,会接到一个个的功能任务,往复操作 2、3、4、而已。
10.2补充说明(如果换了远程账号怎么办)
去Windows凭证管理中删掉原来写好的账号和密码
评论区