为什么要学习
常用功能:仓库管理、文件管理、分支管理、标签管理、远程操作
进阶功能:使用开发工具来集成Git软件和访问GitHub,Gitee这样的第三方代码托管平台
软件配置管理(SCM)是指通过执行版本控制、变更控制的规程,以及使用合适的配置管理软件,来保证所有配置项的完整性和可跟踪性。配置管理是对工作成果的一种有效保护。
概念
版本控制、集中式版本控制、分布式版本控制、多人协作开发
版本:软件版本、文件版本(保存重要历史记录、恢复数据)
版本控制软件的基础功能
- 保存和管理文件
- 提供客户端工具进行访问
- 提供不同版本文件的比对功能
集中式、分布式版本控制软件
集中式版本控制系统:将所有资源放在一个中央服务器,每个开发人员都能对服务器进行访问和交互。
集中式版本控制:一个中央服务器(资源库)供开发人员通过客户端进行上传和下载文件。容易出问题每个人都下载文件,然后修改上传文件到中央服务器就会出现文件冲突问题,不同软件有不同的处理方式。一旦服务器发生问题,项目就会丢失和损坏。
文件冲突解决,例如:SVN将文件每行做标记,然后进行比对操作,但是要是对同一行做操作那么文件冲突问题依然存在
分布式版本控制: 一个中央服务器,在本地有一个仓库,开发人员访问本地仓库,一些操作在本地仓库进行。会造成的问题:占用本地内存、如果网速慢的话同步速度就会变慢
仓库的文件操作:
show in Explorer打开所在文件管理器位置
不能识别仓库外的文件操作,只能识别创建的仓库里面的文件操作,在文件夹中新创建一个文件,会在软件中显示。
本地仓库是在.git下的,无法对仓库进行操作。 .git路径和仓库路径不一样,这是两个不同的概念。为什么软件会显示修改记录,因为文件有一个比对功能。
增加、修改或者删除都需要进行提交。
提交之后然后就没有记录,是因为现在仓库里面也有相应的改变的文件,经过软件比对两者完全相同。
文件操作历史
40个16进制的数字组成的版本号,提交码。
分支操作
张三、李四、王五分别开发不同的功能,三个人在中央服务器拷贝下相应的文件到本地仓库,在本地仓库进行操作,在本地仓库进行操作是为了减少文件冲突,而且频繁在中央服务器进行操作会产生大量的版本信息。最后合并到一个仓库。
创建分支操作
合并分支
选择要合并的分支
冲突文件的合并
如果在两个分支分别创建两个相同的文件,分别与主文件进行合并时会产生文件冲突。根据需要选择留下哪一个。
如果要合并删除方框里面的内容。
给文件增加标记,这个标记叫做标签
然后就会出现相应的标签
如果想删除
远程仓库
GitHub远程仓库如何操作
创建一个仓库
创建一个新的分支
删除仓库,点击settings
点击options登录github账号,操作远程仓库。克隆远程仓库到本地。
对本地仓库进行修改之后,远程仓库没有变化。因为没有推送
Gitee远程仓库操作
选择url将gitee里面的地址复制到里面
操作和GitHub相同
README
创建一个新的仓库建议勾选创建readme文件,readme文件的创建是为了介绍所写代码的一些详细信息,为了之后更好的维护。
git本质上是对代码进行文件控制,无法对图片进行比对,git针对的是文本文件,因为git是代码托管平台。
文件修改添加副本a.txt.bak没必要显示出来,可以选择ignore file操作进行忽略。(忽略单个后缀为.bak的文件)
忽略所有后缀为.bak的文件,开发中可以忽略掉一些不必要的本地开发文件
文件图标和对比功能
软件对多个文件增删改进行操作:
@@ -0,0 +1 @@
-0表示旧文件
-0,0表示旧文件是空屋内按
+1表示增加了一条信息
@@ -1 +1,2 @@
旧的文件第一行,新的文件第一二行
IDEA集成GitHub
创建一个文件,然后添加一个a.txt文件里面填写一段文字用于测试。
将本地文件推送到本地仓库中,然后就可以通过开发工具进行修改了。
Commit File将本地文件提交到仓库。
Commit将文件提交到本地仓库 ,Commit and push将文件提交到本地仓库再把文件上传到gitHub中。
如果提交后,在远程仓库对文件进行操作,本地文件不会跟着更改。所以还需要将远程仓库同步到本地仓库。
Fetch抓取数据,Pull合并数据。所以点击Pull,然后会出现
然后点击Pull,然后将远程仓库的文件下载到本地与本地文件进行合并就可以了。(如果看到没有更新可以选择先关掉当前文件,等待一会)
clone将远程仓库进行克隆
IDEA集成Gitee
操作和之前一样,在vcs里面没有看到gitee是因为没有安装特定的插件。
选择settings
然后点击Plugins ,在里面搜索Gitee
Git版本号
Git版本号—介绍
af6a988是版本号,Git中的版本号是根据SHA-1加密算法算出来的。而且长度为40位所以重复的可能性很小
Git可以对多个相同的库进行合并
但是合并时会出现问题:合并后的文件版本号是什么?
Git中的版本号是用来定位用的:2+38前两位为文件夹,后面38位是文件名。
综上所述文件的版本号有两个作用:
- 定位文件的位置
- 避免文件冲突
Git版本号—文件操作
查看文件内容,在软件中无法看到想要的内容需要通过git去查看。
查看文件,-p的意思是友好的查看,版本号要到文件中去复制
$git cat-file -p 版本号
tree后面也是一个版本号,然后查看该版本号
100表示普通文件,644表示文件的权限,blob表示当前表示的是一个普通的文件块对象,dee0开头的一串字符也是版本号,然后查看改版本号然后就出现了文件的内容。所以说文件在一次提交会创建多个版本号。
文件查看的顺序依次是:
- 查看提交信息
- 查看文件状态(tree)
- 查看文件内容
parent 版本号,的意思是上一次提交的版本号,说明这两次提交之间是有关系的。
增加文件,红色文件是新增加的文件,白色是旧文件。
文件删除
所谓的删除就是文件状态不指向所存储的文件了。
Git版本号—分支操作
.git 文件里面有一个HEAD 文件,指向一个路径。这里的分支指向的就是用户创建的分支,每个分支实际上指向的是不同版本的提交信息。
文件存在工作目录、比对区域和存储区域。在工作区域内进行一些操作。然后在比对区域对工作区域和存储区域进行一些对比。
Git命令
介绍
远程仓库 =》 clone克隆 =》 存储区域(存储)、暂存区域(比对)、工作区域(操作)
存储区域(存储)、暂存区域(比对)、工作区域(操作)=》 publish =》 远程仓库
工作区通过 git add 添加到暂存区然后通过 git commit 提交到存储区域。
Git命令-仓库操作
使用当前目录作为 Git 仓库,我们只需使它初始化。
git init
克隆仓库的命令格式为:
git clone <repo>
如果我们需要克隆到指定的目录,可以使用以下命令格式:
git clone <repo> <directory>
参数说明:
- repo:Git仓库
- directory:本地目录
比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:
$ git clone git://github.com/schacon/grit.git
配置:
显示当前的 git 配置信息:
$ git config --list
credential.helper=osxkeychain
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true
编辑 git 配置文件:
$ git config -e # 针对当前仓库
或者:
$ git config -e --global # 针对系统上所有仓库
设置提交代码时的用户信息:
$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com
去掉 --global 参数只对当前仓库有效。user.name、user.email 是固定格式。
文件操作
查看仓库当前的状态,显示有变更的文件。
$ git status
git add 命令可将该文件的修改添加到暂存区。
添加一个或多个文件到暂存区:
git add [file1] [file2] ...
添加指定目录到暂存区,包括子目录:
git add [dir]
添加当前目录下的所有文件到暂存区:
git add .