git-2.16.2
Git简介
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
Git是分布式版本控制系统,SVN是集中式版本控制系统。布式的版本控制就是每个人都可以创建一个独立的代码仓库用于管理,各种版本控制的操作都可以在本地完成。每个人修改的代码都可以推送合并到另外一个代码仓库中。而SVN只有一个中央控制,所有的开发人员都必须依赖于这个代码仓库。每次版本控制的操作也必须链接到服务器才能完成。
工作区、暂存区、版本库
- 工作区:存储写的代码。就是磁盘上能看到的目录
- 暂存区(stage或index):计划要提交的文件。一般存在.git/index文件中,所有暂存区也叫索引。
- 版本库:(本地库).git目录是GIt的版本库
代码托管中心
代码托管中心的任务就是维护远程库,远程库有如下几种:
局域网环境下一般使用GitLab服务器
外网环境下一般使用GitHub、码云
两种工作方式
团队内部:
团队内部+第三方:
第三方要参与开发,需要先fork
一份代码到远程第三方库,然后clone
到本地,写好代码之后push
到远程第三方库,代码需要由开发团队审核通过后,merge
到远程库上。
工作区、暂存区、本地库演示
1. 准备
进入你想要存放工作空间的目录下,打开Git Bash,创建工作目录、demo文件夹和一个hello.txt文件并用vim
打开写入aaaa
。
2. 创建本地库
2.1 初始化本地仓库
执行git init
命令之后,当前目录成为一个本地库,会生成一个.git目录,该目录包含了资源的所有元数据
2.2 设置签名(必须设置签名)
签名用于标识不同的开发人员身份,形式:
用户名:xxx
Email:xx@qq.com
【注】这里的签名和远程库(代码托管中心GItHub/GitLab)无任何关系
签名的作用范围:
- 项目级别:仅在当前本地库范围有效
git config user.name xxx
git config user.email xx@qq.com
- 系统级别:登录当前操作系统的用户范围
git config --global user.name xxx
git config --global user.email xx@qq.com
3. 工作区上传到本地库
hello.txt文件默认在工作区,先将该文件上传到暂存区,再从暂存区上传到本地库
3.1 相关命令
git status
:显示工作目录和暂存区的状态
git add
:将工作区的文件提交到暂存区
git rm
:用于从工作区中删除文件
git rm --cached 文件名
:用于将暂存区的文件恢复到工作区
git commit 文件名
:将暂存区的文件提交到本地库,将暂存区的当前内容与描述更改的用户和日志信息一起存储在新的提交中
git commit -m 提交日志 文件名
:添加日志并提交
修改hello.txt后再次提交一遍:
4. 查看提交日志
git log
:查看提交日志
git log --pretty=oneline
、git log --oneline
:查看日志简要信息
5. 恢复到某个版本
git reset --hard 跳到指定版本
:将当前HEAD复位到指定版本,一般用于撤销之前的一些操作
6. 文件比较
git diff 文件名
:工作区和暂存区文件的比较
GitHub
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名GitHub。
解决github.com访问过慢问题:
- 进入http://tool.chinaz.com
- 输入github.com,查询
- 选择TTL值最小的ip
- 打开C:\Windows\System32\drivers\etc\hosts文件,设置
ip github.com git
这样就能绕过域名解析,并设置访问TTL值最小的服务器
使用
按照这张图:
1. 在git_work工作空间目录下新建目录demo1
2. 在github上新建仓库
接下来按照这里的命令提示来做
3. 创建本地库并提交代码到本地库
4. 本地库提交到远程库(假设你是项目经理,完成图中的第一步push)
git remote add origin github上提示的地址
git push -u origin master
:origin是后面地址的别名【注意,这个别名下面会用到很多次】,master指master分支。需要github账号名和密码
此时在github就能看到这个项目:
5. 现在,项目经理已经把代码push到远程库,开发人员需要从远程库clone代码到本地(完成第二步clone)
第一种方式是直接在GitHub上下载代码即可
第二种方式通过命令:git clone https://github.com/xxx/demo1.git
git clone
:
- 把远程库的代码下载到本地
- 创建origin远程地址别名
- 初始化本地库
6. 开发人员修改代码,并提交到本地库
7. 开发人员将本地库代码提交到远程库(完成第三步push)
git push
:将本地分支的更新推送到远程主机
由于之前项目经理的角色和现在开发者的角色用的是同一个github账号,因此我这里可以直接提交成功。
一般,需要项目经理将开发人员拉进项目组,做法如下:
点击添加按钮后会生成一个邀请链接,将这个链接发送给开发人员,开发人员访问这个链接确认进入项目组即可。
8. 项目经理将远程库的代码pull到本地(完成第四步push)
git pull origin master
:相当于git fetch
和git merge
组合,用于取回远程主机某个分支的更新,再与本地的指定分支合并
Idea+Git
1. 在Idea中创建一个SpringBoot项目,写一个Controller如下,启动SpringBoot应用程序,测试无误即可:
@RestController
public class HelloController {
@RequestMapping("hello")
public String hello() {
return "hello";
}
}
2. 配置Git版本控制
3. 初始化本地库
4. 提交到本地库
5. 本地库提交到远程库
(1)先创建GitHub远程仓库,这一步骤在上一个例子中已经演示过
(2)在Idea中配置GitHub
(3)找到创建GitHub仓库后给出的地址,然后在Idea中提交项目到远程库
(4)push
(5)查看远程库
6. 开发人员clone项目
7. 切换到demo3-master(demo3-master是从远程库clone本地库后在本地库中的名字)项目中
修改代码并提交到本地库
push到远程库(只有项目经理邀请了该GitHub账号参与项目才能push成功)
查看远程库
8. 项目经理pull项目
现在切换到demo3(项目经理的工作目录),点击pull后,demo3项目内容就和远程库项目内容一致了
9. 开发者通过pull命令更新本地代码