admin管理员组文章数量:1026989
【Git】Git概述、Git安装和使用、工作区,暂存区和版本库
文章目录
- 一 Git概述
- 1 Git简介
- 2 GIt的职责
- 3 Git的架构
- (1)集中式版本控制系统
- (2)分布式版本控制系统
- 4 下载安装
- 二 Git使用
- 1 创建版本库
- 2 配置签名
- (1)方法一
- (2)方法二
- 3 提交项目
- 4 修改版本
- 5 撤销修改内容
- 6 删除
- 三 工作区、暂存区、版本库
一 Git概述
1 Git简介
Git是目前世界上最先进的分布式版本控制系统。
Git创始人 – 林纳斯·托瓦兹。
破解:国外一般称为逆向工程,有产品,没有其需要的技术与设计图纸,可以通过观察产品、运行状态等,将我们所需要的东西倒退出来,做一份自己的产品。
在Linus Torvalds开发出了Git分布式版本控制系统11年后,BitKeeper宣布在Apache 2.0许可证下开源。Linus 是在BitKeeper停止向开源社区提供免费版本后开发了Git,今天Git和其它自由软件版本控制系统已经统治了编程社区,BitKeeper变得无关紧要了。
BitKeeper由BitMover公司开发,该公司CEO Larry McVoy与Linus曾是好友, Larry说服Linus在内核开发中使用BitKeeper。而BitKeeper在免费使用的许可证中加入很多限制条件,惹恼了内核开发者,最终促使Linus开发出了毁灭BitMover的Git。
Git致力于开源组织的使用,用户比较分散,相对于其他的版本管理系统,其优点为分布式和审查机制。
2 GIt的职责
协同开发:类似于目前的共享文档。
冲突解决:一份文件多人修改,可以防止一人的代码被另一人覆盖,或者合并的过程中出现问题。
版本记录:想恢复之前写的代码,类似于虚拟机中的快照功能。
历史追查:每一次代码的更新,都被记录下来,由谁更新,出现问题可以追查到具体的人。
代码申请:自己手里保存一份,服务器上保存一份,甚至云上也有一份。
版本还原:基于版本记录,如果程序上线以后不理想,可以恢复到之前的版本,之后在有问题的版本上进行修改,测试等。
权限管理:谁可以看,谁可以写等问题。
代码审查:如果是背靠背式的开发,此功能可以不要。加入某人发现Spark中的源码写的不好,想要修改,修改后想要贡献给其他适用Spark的用户,这时需要审查提交的代码,审查通过后可以发布。用于互相不信任的人或者团队之间代码的提交。
3 Git的架构
(1)集中式版本控制系统
优点
- SVN是集中式版本控制系统(CVS,SVN,VSS),版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。
缺点
- 必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就非常麻烦了。
存在的问题
-
版本管理的服务器一旦崩溃,硬盘损坏,代码如何恢复?
一般写一个脚本,从中央服务器每日全量备份,但全量备份量比较大,一般是在晚上备份,但如果在备份前丢失,就十分麻烦。
-
程序员上传到服务器的代码要求是完整版本,但是程序员开发过程中想做小版本的管理,怎么解决?
客户端不提供版本管理,自己手里想有一个小版本管理,需要在本地安装一个服务器端(Server),一个Server只对应一个客户端,所以需要准备两个客户端,一个上传到中央服务器,一个上传到自己的服务器,两台客户端之间的同步还需要自己管理。
-
系统正在上线运行,时不时还要修改bug,要增加好几个功能要几个月,如何管理几个版本?
分支管理,加入一个游戏内部的金币可以无限复制,不能等下一版本发布,需要立刻发布一个紧急版本,修复这个bug,这里的修复也不是真的去修改,修改完之后打成jar包,上线。
这就带来一个问题,修改完成后的功能是否完备,所以需要分支管理,修bug走修bug的路线,开发新功能走新功能的路线。
-
如何管理一个分布在世界各地、互不相识的大型开发团队?
平台审查机制和分享机制。
Git解决了以上问题,代价就是,学习成本的上升,Git结构也更复杂一些。
(2)分布式版本控制系统
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
即使GitHub等网站因为某些原因不能登录了,代码也不会丢失,将自己本地的库向另一个网站上传一份,换一个网站即可,国内有Gitee,也有的公司在自己内部搭建一个Gitlab,与GitHub十分相似。对于中心服务器,对其依赖是非常弱的。
优点
- 容灾能力强
- 本地版本管理
- 异地协作
- 灵活分支
4 下载安装
下载地址:Git-2.23.0-64-bit.exe
下载地址:Git-2.23.0-64-bit.exe
安装时需要注意以下配置
选择Git命令的执行环境:推荐选择第一个,就是单独用户Git自己的命令行窗口。不推荐和windows的命令行窗口混用。
在”Configuring the line ending conversions”选项中,
- 第一个选项:如果是跨平台项目,在windows系统安装
- 第二个选项:如果是跨平台项目,在Unix系统安装
- 第三个选项:非跨平台项目
苹果系统选择后面两个。
在“terminal emulator”选项中,
- 第一个选项:使用专用的Git窗口(推荐)
- 第二个选项:使用windows的cmd命令行窗口。
在”Configuring extra”选项中,默认开启文件缓存即可(推荐)
以上没有截图的选项,全部默认配置即可。
安装完之后,在桌面点击右键就会出现【Git Bash Here】
二 Git使用
1 创建版本库
创建如下目录结构
在git – java_pro 下右键 Git Bash Here
此时的命令全部都是linux中的命令
vim src/java_test.java
# 随便添加一些内容
# 初始化,生成一个空库,表现为隐藏文件.git,这个文件就是整个项目的库,存放如历史记录等
git init
# 查看状态
git status
# 显示如下内容
On branch master
No commits yet
Untracked files:(use "git add <file>..." to include in what will be committed)src/
nothing added to commit but untracked files present (use "git add" to track)
# 其中会发现src/标红,表示src目录下的所有文件都处于Untracked状态,说明下面的所有代码都没有进入库中
2 配置签名
(1)方法一
以后向库中提交代码,使用的就是接下来配置的签名
git config user.name "hzy"
git config user.email "hzy@hike"
代码未来会上传到一个平台,如github,gitee,gitlab,邮箱可以和这几个平台进行关联
以上配置的信息,可以在.git隐藏文件中的config中查看,后续想要修改也可以在这个文件中修改
(2)方法二
git config --global user.email "hzy@hike"
# --global 表示全局属性,所有的git项目都会共用属性
添加global的作用:一台电脑一般一个windows账户,会将设置的那个邮箱挂在windows账户上,也就是说,一般情况下,windows里面的账号,不管是参加到哪个公司的项目,还是自己创建的项目,都会用一个公用的签名,不用每个项目都单独注册
设置完成之后可以在 C盘 – 用户 – windows账户 – .gitconfig 文件中查看
如果项目的本地签名配置了,全局的签名也配置了,针对这个项目会使用本地的签名,就近原则
3 提交项目
建议一个一个文件的提交,防止提交上去一些无用的文件
git add src/java_test.javagit status
此时代码并没有入库,查看状态会发现,原来标红的位置变绿了,进入到一个名为“暂存区”的位置,可以理解为一个缓冲区。如kafka的producer,message交给producer,producer不会直接交给broker,积累到一定程度,会一次性提交。暂存区相当于producer的缓冲区。
git commit
正式提交,提交所有暂存区的内容,执行完成之后会弹出一个页面,为这次变更做一个说明,这时所有提交都需要做的事情。窗口为vim窗口,想要编辑先点击一下“i”键,输入“create 01”
git status
# 输出内容
On branch master
nothing to commit, working tree clean
# 查看提交的日志
git log
# 在文件中追加一些内容vim src/java_test.java
# 新建一个文件
vim pom.xmlgit status
此时会发现两个标红的文件,一个文件的状态为“modified:”,另一个文件的转态为“ pom.xml”
# 提交文件
git add src/java_test.java
git add pom.xml
git status
# 不进入界面,直接加注释
git commit -m "create/update02"
git log
# 再修改一次
vim src/java_test.java
git add src/java_test.java
git commit -m "update03"
# 查看简略日志信息
git log --pretty=oneline
# 显示信息
38f4c39cbf0eef05f300fc0e9d8c31303b2ea568 (HEAD -> master) update03
d2ec266c3ea20a5876e580ee704b2e6fa6583418 create/update02
dd4d823aa2bcde9c8e69e14b55ec3f263568bc5e create 01
前面的数字字母表示版本的唯一标识,master是一条分支,一般作为所有分支最核心、最重要的主分支,HEAD是一个指针,(HEAD -> master) update03表示目前最新的代码指向update03,如果别人下载此段代码,会下载03
4 修改版本
假如最新代码不稳定,需要提供上一个版本的代码,这时就需要将HEAD指针撤回一级
一次回退一个版本,一个^代表一个版本数量
git reset --hard HEAD^
回退n次操作 :git reset --hard HEAD~n
git reset --hard HEAD~1
恢复到最新版本
# 查看历史操作
git reflog
# 可以看到各个版本的唯一标识,通过唯一标识可以回到特定的版本
git reset --hard 38f4c39
留痕,所有的文件不会被删除,文件全部放在.git隐藏文件夹中
5 撤销修改内容
如果对原代码进行修改,出现了错误,可以进行撤销操作
git checkout src/java_test.java
6 删除
将不必要的文件上传到了仓库中,可以进行删除操作,此处的删除并不是物理删除,只是在这一版本之上新建一个不含有这个文件的变更的版本,也是可以恢复的,处处留痕
vim src/java_test.java.bak
git add src
git commit -m "update04"rm src/java_test.java.bak
git status
git add src/java_test.java.bak
git commit -m "bug fix"
三 工作区、暂存区、版本库
工作区(Working Directory):就是电脑本地硬盘目录
版本库(Repository):工作区有个隐藏目录.git,它就是Git的本地版本库
暂存区(stage) :一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
暂存区会保留最后一次上传的版本。
checkout针对某一个文件进行还原,reset针对整个版本进行还原
我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用“git add”把文件纳入Git管理,实际是把本地文件修改添加到暂存区;
第二步是用“git commit”提交更改,实际上就是把暂存区的所有内容提交到当前分支 。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以commit就是往master分支上提交更改。
可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。一旦提交完后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的。即:nothing to commit (working directory clean)。
用“git diff HEAD – filename”命令可以查看工作区和暂存区里面最新版本的区别。
新建过撤销未add: git checkout – 文件名
撤销已add未commit:先git reset HEAD 文件名 再 git checkout – 文件名
撤销已add已commit:git reset --hard HEAD^
【Git】Git概述、Git安装和使用、工作区,暂存区和版本库
文章目录
- 一 Git概述
- 1 Git简介
- 2 GIt的职责
- 3 Git的架构
- (1)集中式版本控制系统
- (2)分布式版本控制系统
- 4 下载安装
- 二 Git使用
- 1 创建版本库
- 2 配置签名
- (1)方法一
- (2)方法二
- 3 提交项目
- 4 修改版本
- 5 撤销修改内容
- 6 删除
- 三 工作区、暂存区、版本库
一 Git概述
1 Git简介
Git是目前世界上最先进的分布式版本控制系统。
Git创始人 – 林纳斯·托瓦兹。
破解:国外一般称为逆向工程,有产品,没有其需要的技术与设计图纸,可以通过观察产品、运行状态等,将我们所需要的东西倒退出来,做一份自己的产品。
在Linus Torvalds开发出了Git分布式版本控制系统11年后,BitKeeper宣布在Apache 2.0许可证下开源。Linus 是在BitKeeper停止向开源社区提供免费版本后开发了Git,今天Git和其它自由软件版本控制系统已经统治了编程社区,BitKeeper变得无关紧要了。
BitKeeper由BitMover公司开发,该公司CEO Larry McVoy与Linus曾是好友, Larry说服Linus在内核开发中使用BitKeeper。而BitKeeper在免费使用的许可证中加入很多限制条件,惹恼了内核开发者,最终促使Linus开发出了毁灭BitMover的Git。
Git致力于开源组织的使用,用户比较分散,相对于其他的版本管理系统,其优点为分布式和审查机制。
2 GIt的职责
协同开发:类似于目前的共享文档。
冲突解决:一份文件多人修改,可以防止一人的代码被另一人覆盖,或者合并的过程中出现问题。
版本记录:想恢复之前写的代码,类似于虚拟机中的快照功能。
历史追查:每一次代码的更新,都被记录下来,由谁更新,出现问题可以追查到具体的人。
代码申请:自己手里保存一份,服务器上保存一份,甚至云上也有一份。
版本还原:基于版本记录,如果程序上线以后不理想,可以恢复到之前的版本,之后在有问题的版本上进行修改,测试等。
权限管理:谁可以看,谁可以写等问题。
代码审查:如果是背靠背式的开发,此功能可以不要。加入某人发现Spark中的源码写的不好,想要修改,修改后想要贡献给其他适用Spark的用户,这时需要审查提交的代码,审查通过后可以发布。用于互相不信任的人或者团队之间代码的提交。
3 Git的架构
(1)集中式版本控制系统
优点
- SVN是集中式版本控制系统(CVS,SVN,VSS),版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。
缺点
- 必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就非常麻烦了。
存在的问题
-
版本管理的服务器一旦崩溃,硬盘损坏,代码如何恢复?
一般写一个脚本,从中央服务器每日全量备份,但全量备份量比较大,一般是在晚上备份,但如果在备份前丢失,就十分麻烦。
-
程序员上传到服务器的代码要求是完整版本,但是程序员开发过程中想做小版本的管理,怎么解决?
客户端不提供版本管理,自己手里想有一个小版本管理,需要在本地安装一个服务器端(Server),一个Server只对应一个客户端,所以需要准备两个客户端,一个上传到中央服务器,一个上传到自己的服务器,两台客户端之间的同步还需要自己管理。
-
系统正在上线运行,时不时还要修改bug,要增加好几个功能要几个月,如何管理几个版本?
分支管理,加入一个游戏内部的金币可以无限复制,不能等下一版本发布,需要立刻发布一个紧急版本,修复这个bug,这里的修复也不是真的去修改,修改完之后打成jar包,上线。
这就带来一个问题,修改完成后的功能是否完备,所以需要分支管理,修bug走修bug的路线,开发新功能走新功能的路线。
-
如何管理一个分布在世界各地、互不相识的大型开发团队?
平台审查机制和分享机制。
Git解决了以上问题,代价就是,学习成本的上升,Git结构也更复杂一些。
(2)分布式版本控制系统
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
即使GitHub等网站因为某些原因不能登录了,代码也不会丢失,将自己本地的库向另一个网站上传一份,换一个网站即可,国内有Gitee,也有的公司在自己内部搭建一个Gitlab,与GitHub十分相似。对于中心服务器,对其依赖是非常弱的。
优点
- 容灾能力强
- 本地版本管理
- 异地协作
- 灵活分支
4 下载安装
下载地址:Git-2.23.0-64-bit.exe
下载地址:Git-2.23.0-64-bit.exe
安装时需要注意以下配置
选择Git命令的执行环境:推荐选择第一个,就是单独用户Git自己的命令行窗口。不推荐和windows的命令行窗口混用。
在”Configuring the line ending conversions”选项中,
- 第一个选项:如果是跨平台项目,在windows系统安装
- 第二个选项:如果是跨平台项目,在Unix系统安装
- 第三个选项:非跨平台项目
苹果系统选择后面两个。
在“terminal emulator”选项中,
- 第一个选项:使用专用的Git窗口(推荐)
- 第二个选项:使用windows的cmd命令行窗口。
在”Configuring extra”选项中,默认开启文件缓存即可(推荐)
以上没有截图的选项,全部默认配置即可。
安装完之后,在桌面点击右键就会出现【Git Bash Here】
二 Git使用
1 创建版本库
创建如下目录结构
在git – java_pro 下右键 Git Bash Here
此时的命令全部都是linux中的命令
vim src/java_test.java
# 随便添加一些内容
# 初始化,生成一个空库,表现为隐藏文件.git,这个文件就是整个项目的库,存放如历史记录等
git init
# 查看状态
git status
# 显示如下内容
On branch master
No commits yet
Untracked files:(use "git add <file>..." to include in what will be committed)src/
nothing added to commit but untracked files present (use "git add" to track)
# 其中会发现src/标红,表示src目录下的所有文件都处于Untracked状态,说明下面的所有代码都没有进入库中
2 配置签名
(1)方法一
以后向库中提交代码,使用的就是接下来配置的签名
git config user.name "hzy"
git config user.email "hzy@hike"
代码未来会上传到一个平台,如github,gitee,gitlab,邮箱可以和这几个平台进行关联
以上配置的信息,可以在.git隐藏文件中的config中查看,后续想要修改也可以在这个文件中修改
(2)方法二
git config --global user.email "hzy@hike"
# --global 表示全局属性,所有的git项目都会共用属性
添加global的作用:一台电脑一般一个windows账户,会将设置的那个邮箱挂在windows账户上,也就是说,一般情况下,windows里面的账号,不管是参加到哪个公司的项目,还是自己创建的项目,都会用一个公用的签名,不用每个项目都单独注册
设置完成之后可以在 C盘 – 用户 – windows账户 – .gitconfig 文件中查看
如果项目的本地签名配置了,全局的签名也配置了,针对这个项目会使用本地的签名,就近原则
3 提交项目
建议一个一个文件的提交,防止提交上去一些无用的文件
git add src/java_test.javagit status
此时代码并没有入库,查看状态会发现,原来标红的位置变绿了,进入到一个名为“暂存区”的位置,可以理解为一个缓冲区。如kafka的producer,message交给producer,producer不会直接交给broker,积累到一定程度,会一次性提交。暂存区相当于producer的缓冲区。
git commit
正式提交,提交所有暂存区的内容,执行完成之后会弹出一个页面,为这次变更做一个说明,这时所有提交都需要做的事情。窗口为vim窗口,想要编辑先点击一下“i”键,输入“create 01”
git status
# 输出内容
On branch master
nothing to commit, working tree clean
# 查看提交的日志
git log
# 在文件中追加一些内容vim src/java_test.java
# 新建一个文件
vim pom.xmlgit status
此时会发现两个标红的文件,一个文件的状态为“modified:”,另一个文件的转态为“ pom.xml”
# 提交文件
git add src/java_test.java
git add pom.xml
git status
# 不进入界面,直接加注释
git commit -m "create/update02"
git log
# 再修改一次
vim src/java_test.java
git add src/java_test.java
git commit -m "update03"
# 查看简略日志信息
git log --pretty=oneline
# 显示信息
38f4c39cbf0eef05f300fc0e9d8c31303b2ea568 (HEAD -> master) update03
d2ec266c3ea20a5876e580ee704b2e6fa6583418 create/update02
dd4d823aa2bcde9c8e69e14b55ec3f263568bc5e create 01
前面的数字字母表示版本的唯一标识,master是一条分支,一般作为所有分支最核心、最重要的主分支,HEAD是一个指针,(HEAD -> master) update03表示目前最新的代码指向update03,如果别人下载此段代码,会下载03
4 修改版本
假如最新代码不稳定,需要提供上一个版本的代码,这时就需要将HEAD指针撤回一级
一次回退一个版本,一个^代表一个版本数量
git reset --hard HEAD^
回退n次操作 :git reset --hard HEAD~n
git reset --hard HEAD~1
恢复到最新版本
# 查看历史操作
git reflog
# 可以看到各个版本的唯一标识,通过唯一标识可以回到特定的版本
git reset --hard 38f4c39
留痕,所有的文件不会被删除,文件全部放在.git隐藏文件夹中
5 撤销修改内容
如果对原代码进行修改,出现了错误,可以进行撤销操作
git checkout src/java_test.java
6 删除
将不必要的文件上传到了仓库中,可以进行删除操作,此处的删除并不是物理删除,只是在这一版本之上新建一个不含有这个文件的变更的版本,也是可以恢复的,处处留痕
vim src/java_test.java.bak
git add src
git commit -m "update04"rm src/java_test.java.bak
git status
git add src/java_test.java.bak
git commit -m "bug fix"
三 工作区、暂存区、版本库
工作区(Working Directory):就是电脑本地硬盘目录
版本库(Repository):工作区有个隐藏目录.git,它就是Git的本地版本库
暂存区(stage) :一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
暂存区会保留最后一次上传的版本。
checkout针对某一个文件进行还原,reset针对整个版本进行还原
我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用“git add”把文件纳入Git管理,实际是把本地文件修改添加到暂存区;
第二步是用“git commit”提交更改,实际上就是把暂存区的所有内容提交到当前分支 。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以commit就是往master分支上提交更改。
可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。一旦提交完后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的。即:nothing to commit (working directory clean)。
用“git diff HEAD – filename”命令可以查看工作区和暂存区里面最新版本的区别。
新建过撤销未add: git checkout – 文件名
撤销已add未commit:先git reset HEAD 文件名 再 git checkout – 文件名
撤销已add已commit:git reset --hard HEAD^
本文标签: GitGit概述Git安装和使用工作区,暂存区和版本库
版权声明:本文标题:【Git】Git概述、Git安装和使用、工作区,暂存区和版本库 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/IT/1694662899a254724.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论