Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper
版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理多人协同开发项目的技术。
没有进行版本控制或者版本控制本身就缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。无论是工作还是学习,或者是自己做笔记,都经历过这样一个阶段!我们就迫切需要一个版本控制工具。(多人开发就必须要使用版本控制)
使用版本控制之后可以给你带来的一些便利:
1.集中版本控制 SVN
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。
所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS。
2.分布式版本控制 Git
Git的优势就是:每个人都拥有全部的代码,可以避免一些安全隐患。不会因为服务器孙环或者网络问题,造成不能工作的情况。
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
1.4 Git和SVN的主要区别
1.Git官网
地址:https://git-scm.com/
2.下载后一步一步
安装完成后,在桌面点击右键,选择Git Bash Here,点击后出现下面的界面就是安装成功了。
Git是一个开源的分布式版本控制系统。本地结构如下图。
我们已经有了本地库,本地库可以帮我们进行版本控制,为什么还需要代码托管中心呢?
4.1 代码托管中心的作用
4.1.1 团队内部协作
4.1.2 跨团队协作
4.2 托管中心的类别
5.1 创建一个文件夹
5.2 打开Git终端
1.打开Git Bash Here,可以设置先关的参数。在Git中命令和Linux是一样的。
2.查看git安装版本号
git --version
3.清屏命令
clear
4.设置签名和邮箱
git config --global user.name "luyh"
git config --global user.email "[email protected]"
5.本地仓库初始化
git init
.git 目录是隐藏的,可以设置显示隐藏的文件夹
查看.git下文件
注意:.git目录下的文件和目录等内容不能删除,否则会出现问题
git add firstClass.txt
git commit -m "这是提交的第一个文件 firstClass.txt" firstClass.txt
注意事项:
1不在本地仓库的文件,git无法管理;
2放在本地仓库中,必须进行git add和git commit操作后才能提交到本地库。
git status查看暂存区和工作区的状态。
git status
查看状态
查看状态
查看状态
查看状态
git log查看日期从近至远的日志信息。
当历史记录过多的时候,查看日志的时候,有分页分屏效果,分多页展示
上一页和下一页的操作命令如下:
下一页:空格
上一页:B
退出: Q
结尾显示:END
1.日志展示方式一
git log
2.日志展示方式二
git log --pretty=oneline
3. 日志展示方式三
git log --oneline
4. 日志展示方式四
git reflog
注意:
1. 多了HEAD@{数字},数字的含义是指针回到当前这个版本需要走的步数。
git reset 命令用于回退版本,可以指定退回某一次提交的版本。
git reset [--soft | --mixed | --hard] [HEAD]
提示:在窗口中,复制: 选中,粘贴: 右键点击paste。
9.4 --hard|--mixed | --soft 的区别
10.1 找回本地库删除的文件
1. 新建一个文件test2.txt;
2. 将test2.txt文件add到暂存区;
3. 将test2.txt文件commit到本地库;
4. 删除工作区的test2.txt文件;
5. 将删除操作同步到暂存区;
6. 将删除操作同步到本地库;
7. 查看日志;
8. 找回本地库删除的文件。
其实就是,将版本回退到新增文件的那个历史版本即可。
1. 删除工作区文件test2.txt;
2. 将删除操作同步到暂存区;
3. 删除不想做了,找回暂存区删除的文件。
git diff 命令比较文件的不同,即比较文件在暂存区和工作区的差异。
$ git diff [file]
1. 新建一个文件,先添加到暂存区,再提交到本地库
2. 更改工作区文件test3.txt的文件内容,现在工作区和暂存区的内容不一致了。
3. 比较工作区和暂存区中文件的差异(git diff [file])
4. 比较工作区和暂存区中所有文件的差异(git diff)
5.比较暂存区和工作区的文件差异
git diff [历史版本][文件名]
或者
git diff HEAD [文件名]
6.比较「暂存区」与「给定提交 ID」的差异
git diff --cached [索引]
7.比较两次提交的差异
git diff [索引1]...[索引2]
几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。
使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
Git 分支实际上是指向更改快照的指针。
有人把 Git 的分支模型称为必杀技特性,而正是因为它,将 Git 从版本控制系统家族里区分出来。
●分支管理示意图:
●分支管理的优点:
1.在工作区创建一个文件test4.txt,然后添加到缓存区,再提交到本地库
2.查看分支
git branch -v
3.创建分支
git branch [branch名称]
4.切换分支
git checkout [branch名称]
13.2 分支冲突
1. 进入dev分支,增加内容
2. 进入master分支,增加内容
3. 切换到dev分支查看
4.切换到master分支,进行合并操作
git merge [branch名称]
注意事项:什么时候出现冲突呢?在同一文件的同一位置有修改。
解决方法:公司内部协商解决,人为决定,留下最合适的内容。
通过git add 和git commit解决冲突。
git branch -d (branchname)
14.1 注册GitHub账号
GitHub官网地址如下:(https://github.com/)
点击右上角sign up按钮,按照提示一步步注册,注册完成后如下图所示。
14.2 进行本地库和远程库的交互
1.回顾之前介绍的本地库和远程库的交互图
2. 创建本地库
3. 创建GitHub远程仓库
创建成功后,如下图所示:
4. 本地创建远程库的别名
如何找到远程库的地址?点击下图的仓库名
进入后,就可以看到仓库的地址
远程库的地址如下:
https://github.com/lous1981/GitRespR.git,名字非常长,不方便操作。因此,在Git本地将地址保存,通过别名访问。
git remote -v
git remote add [别名] [远程库地址]
5.推送本地库到远程库 git push操作
git push [远程库别名] [推送的代码分支]
查看远程库的内容
注意:如果GitHub时因为网络等等原因push不成功,可以试一下执行下面的操作,然后再push,可以试多次。
6.远程库的克隆操作 git clone
git clone [远程仓库地址]
克隆操作完成的事情:
1.初始化本地库;
2.将远程库内容完整克隆到本地;
3.创建远程库别名。
1. 普通程序员新增文件,添加到暂存区,提交到本地库,然后push到远程库
问题:我没有录入账户信息,怎么提交成功了呢?也没有提示错误。
原因:git在本地有缓存,默认使用的是缓存的账号。
解决办法:删除缓存
WIN 11 操作按照下图所示:
选择Windows凭证,查看git的凭证。
2. 重新push,发现权限不足,需要申请权限。
3. 加入团队
登录项目经理的账号,邀请普通程序员。
邀请成员:
输入成员账号:
发起邀请,复制邀请链接:
登录被邀请人的GitHub账号,接受邀请(将刚复制的链接,在浏览器地址栏输入)
或者在通知栏有邀请通知,点击进入接受邀请。
再次提交
git fetch [远程库别名] [远程库分支]
在fetch操作执行之后,只是将远程库的内容下载到本地,工作区的内容并没有更新,还是原来的内容。
如果发现所有内容都已经正确更新,则接下来就可以合并了。
合并前先将分支切换回来。
git merge [远程库别名]/[远程库分支]
git pull 操作相当于git fetch和git merge
git pull [远程库别名] [远程库分支]
操作对比:
fetch+merge:起保险和慎重作用;
pull:代码简单,省事使用
添加暂存区,提交到本地库,然后push到远程库,发现冲突。
问题:发现冲突了怎么办呢?
解决办法:先拉取,然后修改冲突,最后在push到远程库
18.1 回顾跨团队合作方式
1. 得到远程库的地址:GitHub - lous1981/GitRespR: 创建一个远程仓库,名称GitRespR
2. 进入要fork仓库的账号,复制远程库地址到浏览器的地址栏,然后点击进入
3. 执行下面的fork操作。
4. git clone克隆到本地进行修改
5. 新增文件后提交,push到远程库
6. 进行pull request操作
创建新的pull request请求
进入新页面,创建新的pull request请求
输入pull request请求的相关信息:
创建pull request请求成功:
7. 项目管理员进行合并
管理员进入仓库,查看pull request请求信息:
在进入请求详情页查看,可以进行相互交流确认。
审核通过之前,查看具体提交的内容是否正确。
如果确认审核通过,点击下面的按钮确认。
确认合并后的代码是否同步。
19.1 进入用户主目录
cd ~
19.2 执行命令,生成一个.ssh的目录
ssh-keygen -t ed25519 -C [GitHub注册账号对应的邮箱]
输入命令,三次回车确认默认值。
.ssh目录下有两个文件
19.3 打开文件id_ed25519,复制里面的内容
19.4 进入GitHub管理后台
选择Settings,点击进入
选择下面的菜单
进入如下菜单:
增加一个sshkey,名字可以自己定义,内容为之前复制的内容。
19.5 测试SSH秘钥
ssh -T [email protected]
The authenticity of host 'github.com (IP ADDRESS)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.
19.6生成SSH秘钥后,就可以正常使用
给ssh的远程地址起别名。
获取ssh远程地址,如下图:
给远程ssh地址起别名
git remote add origin_ssh [远程ssh地址]
测试是否能正确使用。
使用SSH:
优点:方便,不用每次都进行身份验证;
缺点:只能针对一个账号
本地库初始化完成,生成了.git目录。
添加新文件时,会提示,是否add
进行add和commit操作
提交完成后的信息
再次修改文件时,文件前面的内容会显示绿色颜色块。
21.1 合并不相干的分支
通过下面的命令,把两段不相干的 分支进行强行合并。
git pull origin master --allow-unrelated-histories
21.2 进行push推送操作
通过下面的命令,进行push推送。
git push -u origin master -f
到这里远程库和本地库就同步了。
21.3 修改文件,然后push
确认提交信息。
可以在commit同时push到远程库。
注:开发时,先pull操作,再push操作,不要直接push操作。
既是本地仓库,又是工作空间。
确认结果:
修改文件
修改后push
push失败
进行Merge操作解决冲突。
避免冲突:
- 团队开发避免修改同一个文件,团队内部协商好。
- 在修改一个文件前,先进行pull操作,再进行push操作。