概念
软件控制管理SCM
版本控制
分为软件版本和文件版本。
软件版本 很好理解,比如 JDK1.8,17,20,又比如IDEA2021,IDEA2022等。
文件版本 指的是文件的历史副本,例如有一个文件叫 info.txt , 当我们修改了这个文件夹的内容,先生成一个副本info_v1.txt 再进行修改,目的是为了能够在发生错误的时候进行恢复数据。版本控制软件会帮我们自动完成文件版本号的升级。
集中式、分布式管理
VSS,CVS, SVN 属于集中式管理。中央服务器宕机后就不能用了

分布式管理 git
就是在本地也搭建一个仓库,即使中央仓库挂了,本地仓库还在,开发者仍然可以修改和提交代码,只不过提交到的是本地仓库,也就是commit, 那么如果要同步到中央仓库,就需要push操作。通常 一个项目就是一个仓库

安装git
1、git软件
2、git客户端:github desktop 可视化工具

desktop使用
desktop选项

本地仓库
1、克隆一个远程仓库到本地,即在本地搭建一个仓库

2、本地没有仓库,直接在本地创建一个新的仓库

3、本地有仓库,直接把本地的仓库导入到 desktop 工具中

1、创建一个本地仓库
点击首界面中的 create a new repositry on your local dirve


2、文件操作
提交文件
在仓库路径下,新建一个txt文件,并commit 到本地仓库中



删除本地文件
当我们删除本地仓库路径中的文件,git仓库发现文件对应不上,我们也需要提交一次。即删除文件也是一个文件版本


3、分支管理
不同的开发者开发同一个项目中的不同功能 , 项目中有一个 统一的版本库(通常是master) 来管理项目中的所有文档和代码。
假设1: 为了防止文件损坏和丢失,我们把每次的修改提交到统一版本库中,这样提交记录会非常混乱,一会A提交一会B提交,不利于定位提交记录。
假设2:不同的开发人员可能会用到同一份文件,每次都提交到统一版本库,就会容易出现冲突,频繁的冲突影响效率。且频繁的修改会导致统一版本库产生大量的版本信息,仓库的容量也就越来越小。有什么办法解决呢?答案是分支管理

分支管理模型下,只需要在最后进行一次合并即可

案例:
1、从master中创建两个分支,并在各个分支建一个common.txt文件,然后提交到各自的分支

2、合并。选择master分支,点击下方的 merge 操作 ,先合并 order

3、再合并user,这时候因为有都是对相同的文件操作,出现了冲突 conflict

4、点击merge,然后查看冲突的文件内容比对

5、去掉多余的提示内容,此时就不再提示冲突了

继续合并即可。 Abort merge 表示中止合并

4、标签
commit的操作可以添加提示信息,但是合并操作是由系统自动完成的,并不能修改提示信息


为一次操作创建标签tag
选择任意一次操作记录,可以是merge,可以是commit,delete。这里选择merge操作,右键create a tag

这样就能清晰看到每一次操作都做了什么

5、远程仓库 github
1、登录git


2、创建仓库后,直接在git上创建文件,并写入内容,也可以修改内容

3、创建分支

4、本地关联远程仓库
打开desktop, file-->option-->sign in github

然后我们需要把远程仓库的代码拉下来,点击 file-->clone a repositry, 选中github上的仓库,也可以用url方式

在本地仓库新增文件后,commit到本地仓库,还需要一次push操作才能同步到远程仓库


6、远程仓库gitee
gitee俗称码云。与github类似
git-版本号
git的版本号由40位 16进制数组成,前两位定位文件夹,后38位定位文件名。

例如下面这个 1b9bfb4 。前两位是 1b ,也就是文件夹位置

找到1b开头的文件夹

在1b 文件夹中,找到了我们提交的文件版本号9bfb4....

文件操作
前面找到了对应版本号的文件,直接打开是乱码, 我们需要使用git自带的工具 git bash来查看这个文件

1)回到仓库的根路径,右键 git bash here

2)输入命令 git cat-file -p 完整的版本号
解释:
-
cat-file 表示查看文件命令
-
-p 表示友好的查看文件
-
40位长度的版本号

结果解释:
tree 后面的版本号:表示文件的状态版本号
parent: 表示仓库的上一次提交版本号
3)上一步得到的是文件的完整提交信息, tree后面跟着一串也是版本号 ,继续查看这个新的版本号信息
git cat-file -p 新的40位版本号

解释:
100644: 100表示普通文件,644表示文件权限,
blob: 当前文件是普通文件块对象
后面跟着的字符串:表示版本号
README.md、local-test.txt、test.txt 表示对应的文件,即每个提交的文件都有一个最新的版本号
4)继续用git cat-file -p查看第三步得到的版本号信息,得到文件的内容


git删除操作并没有删除文件,只是文件状态不再指向那个被删除的文件

分支操作
HEAD是工作目录,里面记录当前使用的是哪一个分支。通过git checkout命令可以改变指向,也可以直接打开HEAD文件进行修改
publish是第三方图形客户端提供的便捷命令 ,仅限首次推送一个新分支 ,等同于命令
git push -u origin <你的新分支名>


命令
仓库操作
初始化仓库
git init
此时 HEAD文件的内容指向master分支,但是我们并没有master这个文件,因为此时没有任何提交记录。
拉取远程仓库代码
git clone 仓库url
配置操作人信息,在仓库目录下的config文件中可以看到信息
git config user.name hhy git config user.email 1095956904@qq.com git config global user.name hhy
这种操作只会对当前仓库生效,如果要让所有仓库都用同一个操作人 ,增加 -- global参数 ,并且在C盘users用户下的.gitconfig文件可以看到
文件操作
将工作区文件放到暂存区
git add 文件名
将文件从暂存区撤回工作区, 并非磁盘上的移动,只是逻辑上的移动(类似于指针指向)
git rm --cached a.txt
提交暂存区中的文件
git commit -m 描述 //-m表示comment描述提交信息
查看暂存区状态
git status
查看提交的记录
git log git log --oneline //每次提交的记录只显示一行 git log 标签
误删操作
本地误删文件,远程仓库还保存有这个文件的情况下:
git restore 文件名
git revert 版本号 //表示想要回滚到的版本号的上一个版本号
分支操作
删除
git branch -d 分支名
标签
给某个版本号增加标签
git tab 标签内容 版本号
查看所有标签
git tag
删除标签
git tag -d 标签名
创建某个标签的分支
git checkout -b 标签名
日志
git log git log --oneline //每条记录只显示一行 git log 标签
远程仓库
git push origin //推送到远程仓库, "origin"名称可以修改,他表示某个远程仓库url的指代,在config文件中查看
1581

被折叠的 条评论
为什么被折叠?



