赞
踩
http://www.atguigu.com/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vOmVXfWo-1590408187621)(git的学习.assets/image-20200524135421611.png)]
版本控制工具应该具备的功能
协同修改
多人并行不悖的修改服务器端的同一个文件。
数据备份
不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
版本管理
在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空
间,提高运行效率。这方面SVN 采用的是增量式管理的方式,而Git 采取了文
件系统快照的方式。
权限控制
对团队中参与开发的人员进行权限控制。
对团队外开发者贡献的代码进行审核——Git 独有。
历史记录
分支管理
思想:版本控制
实现:版本控制工具
集中式版本控制工具:CVS、SVN、VSS……
缺点:所有的文件数据都保存在服务器上,本地只保存一部分数据,一旦服务器损坏,所有数据都会丢失,本地仅存的数据也没有任何保存的意义了(单点故障)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kLvVsXo7-1590408187624)(git的学习.assets/image-20200524142649368.png)]
分布式版本控制工具:Git、Mercurial、Bazaar、Darcs……
优点:本地就是一个文件的所有历史版本,为了数据共享,可以将本地仓库上传到远程仓库中,实现数据的共享。这么上传的好处也是数据的多重备份。(解决单点故障问题)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-41lKCXjU-1590408187626)(git的学习.assets/image-20200524143025518.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wpJRWGxR-1590408187628)(git的学习.assets/image-20200524143321530.png)]
官网地址:https://git-scm.com/
大部分操作在本地完成,不需要联网
完整性保证
尽可能添加数据而不是删除或修改数据
分支操作非常快捷流畅
与Linux 命令全面兼容
一致下一步就行了,网上一大堆,这里就不说了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ShcfYcs9-1590408187629)(git的学习.assets/image-20200524144655284.png)]
代码托管中心的任务:维护远程库。简单来说就是数据的共享多重已经备份
我们安装了git,使用git init 就会创建出一个本地库,这个本地库包含当前目录下面的所有变化。远程库就是GitHub和码云,我们可以将本地库上传到远程库实现数据的多重备份。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wuzlH8Et-1590408187630)(git的学习.assets/image-20200524145451859.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wABIYZCB-1590408187631)(git的学习.assets/image-20200524145948654.png)]
场景:1号需要添加业务功能,但是自己不会,需要请求别人帮忙开发。
# 命令脚本
(base) MBP:GitStudy haitao$ mkdir ~/Desktop/GitStudy/demo1
(base) MBP:GitStudy haitao$ cd ~/Desktop/GitStudy/demo1/
(base) MBP:demo1 haitao$ pwd
/Users/haitao/Desktop/GitStudy/demo1
(base) MBP:demo1 haitao$ ls -la
(base) MBP:demo1 haitao$ git init
已初始化空的 Git 仓库于 /Users/haitao/Desktop/GitStudy/demo1/.git/
(base) MBP:demo1 haitao$ ls -al
(base) MBP:demo1 haitao$ cd .git/
(base) MBP:.git haitao$ ls -al
# 特别注意:.git 里面的文件,别瞎搞,什么都不动即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AG3WznKI-1590408187632)(git的学习.assets/image-20200524154334350.png)]
格式
作用
注意:
命令
通常情况下,都是安装了git之后设置一下全局的用户信息。这东西没人会一天改一次。
项目级别/仓库级别:仅在当前本地库范围内有效(就是git init 所在的目录访问内有效)。
git config user.name tom_pro
git config user.email goodMorning_pro@atguigu.com
系统用户级别:登录当前操作系统的用户范围。
git config --global user.name tom_glb
git config --global goodMorning_pro@atguigu.com
级别优先级:
实操
# 创建项目级别的签名
(base) MBP:demo1 haitao$ git config user.name test1 user.email
(base) MBP:demo1 haitao$ git config user.email test1@qq.com
(base) MBP:demo1 haitao$ cat .git/config
# 可以看到 当前本地仓库里面的.git/config 里面能看到我们设置的签名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OtOjRpkE-1590408187632)(git的学习.assets/image-20200524155638102.png)]
# 创建系统用户界别的签名
(base) MBP:demo1 haitao$ git config --global user.name test2
(base) MBP:demo1 haitao$ git config --global user.email test2@qq.com
(base) MBP:demo1 haitao$ cat .git/config
# 查看当前本地仓库里面的.git/config 并没有发现我们设置的签名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u0ZP10qC-1590408187633)(git的学习.assets/image-20200524160007360.png)]
# 系统用户级别的签名信息保存位置
(base) MBP:demo1 haitao$ cat ~/.gitconfig
# 可以看到系统用户界别的签名信息保存的位置是,当前用户家目录下的 .gitconfig 文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jLqXIgte-1590408187634)(git的学习.assets/image-20200524160317262.png)]
git status
查看工作区、暂存区状态
添加
git add [file name]
将工作区的“新建/修改”添加到暂存区
提交
git commit -m “commit message” [file name]
将暂存区的内容提交到本地库
查看历史记录操作
git reflog 最常用的
# 查看日志 # 多屏显示控制方式: # 空格向下翻页 # b 向上翻页 # q 退出 git log # 一条提交只显示一行 git log --pretty=oneline # 一条提交只显示一行,hash值简写 git log --oneline # 一条提交只显示一行,hash值简写,显示状态 git reflog
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XAmMB4Z3-1590408187635)(git的学习.assets/image-20200524173301512.png)]
# 查看工作区,暂存区的状态
(base) MBP:demo1 haitao$ git status
# git add 大白话就是让git 管理这个文件。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gsAV3Fpv-1590408187636)(git的学习.assets/image-20200524160727400.png)]
创建一个文件,在执行git status 命令
(base) MBP:demo1 haitao$ cat>>good.txt<<EOF
> 1111
> 222
> 333
> EOF
(base) MBP:demo1 haitao$ git status
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VFz9yiv2-1590408187636)(git的学习.assets/image-20200524161616635.png)]
将文件添加到暂存区, git add xx
(base) MBP:demo1 haitao$ git add good.txt
(base) MBP:demo1 haitao$ git status
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1D3uVxO3-1590408187637)(git的学习.assets/image-20200524161841865.png)]
将文件从暂存区中移除, git rm --cached xx
(base) MBP:demo1 haitao$ git rm -caceh good.txt
(base) MBP:demo1 haitao$ git status
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x5swHKLB-1590408187638)(git的学习.assets/image-20200524162441251.png)]
将文件添加到暂存处,然后提交暂存区的文件到本地库(只有暂存区有东西才能提交)
# git 支持正则表达式,实现对多个文件执行操作
(base) MBP:demo1 haitao$ git add *.txt
(base) MBP:demo1 haitao$ git commit
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TsV8nleA-1590408187638)(git的学习.assets/image-20200524162810107.png)]
# 第二种commit 的方式,这样子就不需要进入vim编辑器输入我们的备注信息
(base) MBP:demo1 haitao$ git commit -m "xxx"
# 如果你只想提交暂存区的一部分内容到本地库中
(base) MBP:demo1 haitao$ git commit good.txt # 只将暂存区里面的good.txt 提交到本地库中
(base) MBP:demo1 haitao$ git commit -m "xxx" good.txt
对我们的good.txt 进行修改(随便添加点东西),在查看当前工作区的状态
(base) MBP:demo1 haitao$ vim good.txt
(base) MBP:demo1 haitao$ git status
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w0DlMlQy-1590408187639)(git的学习.assets/image-20200524164448843.png)]
(base) MBP:demo1 haitao$ git add good.txt
(base) MBP:demo1 haitao$ git commit -m "second commit,modify good.txt"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9woq6an5-1590408187641)(git的学习.assets/image-20200524164540044.png)]
我们先随便提交几次,在查看提交日志,使用 git reflog
(base) MBP:demo1 haitao$ git reflog
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iVES3XmD-1590408187642)(git的学习.assets/image-20200524173551996.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q0X9ObdP-1590408187643)(git的学习.assets/image-20200524174258677.png)]
–soft :仅仅在本地库移动HEAD 指针。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IdLJjq00-1590408187644)(git的学习.assets/image-20200524180819478.png)]
–mixed :在本地库移动HEAD 指针,重置暂存区。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a4wJDWK5-1590408187644)(git的学习.assets/image-20200524180854174.png)]
–hard:在本地库移动HEAD 指针,重置暂存区,重置工作区。(最常用的)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ku5PM8c-1590408187645)(git的学习.assets/image-20200524180919089.png)]
其实git reset 还有很多参数,但是最常用的还是–hard
# 查看 git reset 的使用文档
(base) MBP:demo1 haitao$ git reset --help
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XxdxDbTp-1590408187646)(git的学习.assets/image-20200524174956564.png)]
# 可以看到除了--hard 之后,还有--soft,--mixed,--merge,--keep
-- soft
# 如果我们切换的两个版本里面的文件发生了变化,变化内容直接存入暂存区。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tIAKCct8-1590408187647)(git的学习.assets/image-20200524175432443.png)]
-- mixed
# 如果我们切换的两个版本里面的文件发生了变化,变化的内容存在工作区中,并未添加到暂存区。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hAun9dDc-1590408187647)(git的学习.assets/image-20200524175634634.png)]
# 创建文件,然后提交 (base) MBP:demo1 haitao$ touch test.txt (base) MBP:demo1 haitao$ git add test.txt (base) MBP:demo1 haitao$ git commit -m "touch test.txt" # 删除文件,然后提交 (base) MBP:demo1 haitao$ rm test.txt (base) MBP:demo1 haitao$ git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add/rm <文件>..." 更新要提交的内容) (使用 "git restore <文件>..." 丢弃工作区的改动) 删除: test.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a") (base) MBP:demo1 haitao$ git commit -a -m "删除 test.txt" # 查看当面目录,发现文件已经不存在了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KKetG9DK-1590408187648)(git的学习.assets/image-20200524181809468.png)]
# 回推到上一个版本(我们在上一个版本创建了刚才被删除的文件)
(base) MBP:demo1 haitao$ git reset --hard HEAD^
# 可以发现文件又回来了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q0PRrx69-1590408187649)(git的学习.assets/image-20200524181909133.png)]
直接给文件添加内容
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yi5Qj38x-1590408187649)(git的学习.assets/image-20200524182404953.png)]
提交至暂存处再次比较
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bEadjo0X-1590408187650)(git的学习.assets/image-20200524182503245.png)]
修改本地文件,在diff 查看一下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FSlqHyHV-1590408187651)(git的学习.assets/image-20200524182645330.png)]
和历史版本进行比较
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6eHRiC4z-1590408187651)(git的学习.assets/image-20200524182724547.png)]
不指定文件名,就会比较全部文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NnkDz2NE-1590408187652)(git的学习.assets/image-20200524182843632.png)]
在版本控制过程中,使用多条线同时推进多个任务。(开发的时候不想污染主分支)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bYu4E8Rl-1590408187652)(git的学习.assets/image-20200524200622250.png)]
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任
何影响。失败的分支删除重新开始即可。
# 查看所有的分支
(base) MBP:demo1 haitao$ git branch -a
# 创建分支
(base) MBP:demo1 haitao$ git branch hot_fix
# 删除分支
(base) MBP:demo1 haitao$ git branch -D hot_fix2
# 切换分支
(base) MBP:demo1 haitao$ git checkout hot_fix
# 切换分支,如果没有创建并切换分支
(base) MBP:demo1 haitao$ git checkout -b hot_fix1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2op4hmpU-1590408187653)(git的学习.assets/image-20200524200851509.png)]
第一步:切换到接受修改的分支(被合并,增加新内容)上
git checkout [被合并分支名]
第二步:执行merge 命令
git merge [有新内容分支名]
# 创建并切换分支,增加内容,然后提交
(base) MBP:demo1 haitao$ git checkout -b hot_fix
(base) MBP:demo1 haitao$ vim test.txt
(base) MBP:demo1 haitao$ git add .
(base) MBP:demo1 haitao$ git commit -m "修复bug"
# 切换到master分支(给master增加hot_fix 增加的内容)
(base) MBP:demo1 haitao$ git checkout master
(base) MBP:demo1 haitao$ git merge hot_fix
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9WbVKR4R-1590408187654)(git的学习.assets/image-20200524202233202.png)]
冲突的表现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZTcS3YXL-1590408187654)(git的学习.assets/image-20200524203627083.png)]
冲突的解决
第一步:编辑文件,删除特殊符号
第二步:把文件修改到满意的程度,保存退出
第三步:git add [文件名]
第四步:git commit -m “日志信息”
注意:此时commit 一定不能带具体文件名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5uENLyIu-1590408187655)(git的学习.assets/image-20200524203109250.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RkqBjTMO-1590408187657)(git的学习.assets/image-20200524203225303.png)]
合并冲突
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-50bEz5tG-1590408187657)(git的学习.assets/image-20200524203612052.png)]
解决冲突
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g722aBed-1590408187658)(git的学习.assets/image-20200524204123233.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0tiyD1nm-1590408187659)(git的学习.assets/image-20200524204536806.png)]
几个共同点:
①不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。
②哈希算法确定,输入数据确定,输出数据能够保证不变
③哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大
④哈希算法不可逆
Git 底层采用的是SHA-1 算法。
哈希算法可以被用来验证文件。原理如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YVQ8WM1L-1590408187659)(git的学习.assets/image-20200524204911961.png)]
Git 就是靠这种机制来从根本上保证数据完整性的。
集中式版本控制工具的文件管理机制
以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0sg6lu99-1590408187660)(git的学习.assets/image-20200524205204902.png)]
Git 的文件管理机制(其实就是链条)
Git 把数据看作是小型文件系统的一组快照。每次提交更新时Git 都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以Git 的工作方式可以称之为快照流。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sqvn2h1O-1590408187661)(git的学习.assets/image-20200524205604337.png)]
Git 文件管理机制细节
Git 的 “提交对象”
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bvqIfA8o-1590408187661)(git的学习.assets/image-20200524205910858.png)]
提交对象及其父对象形成的链条
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AYlMkQkV-1590408187662)(git的学习.assets/image-20200524205950748.png)]
各个提交对象通过parent属性建立的紧密的连接。
只是新创建了一个指针指向同一个对象。不是拷贝一份文件,效率极高(SVN 是拷贝一份)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TLNFbxAZ-1590408187663)(git的学习.assets/image-20200524210437274.png)]
只是简单的移动HEAD 指针,效率极高。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pbbiOFd7-1590408187664)(git的学习.assets/image-20200524210512003.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sifacHmr-1590408187664)(git的学习.assets/image-20200524210647803.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-skt56TaY-1590408187665)(git的学习.assets/image-20200524210732268.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1P4G0y71-1590408187665)(git的学习.assets/image-20200524210828340.png)]
访问github,创建一个账号,登录到github上。
为了方便演示最少需要创建两个github的账户。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Edt9H6QV-1590408187667)(git的学习.assets/image-20200524145451859.png)]
(base) MBP:GitStudy haitao$ mkdir demo2
(base) MBP:GitStudy haitao$ cd demo2
(base) MBP:demo2 haitao$ pwd
(base) MBP:demo2 haitao$ git init
(base) MBP:demo2 haitao$ vim a.txt
(base) MBP:demo2 haitao$ git add .
(base) MBP:demo2 haitao$ git commit -m "test github"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YwKZ95yX-1590408187668)(git的学习.assets/image-20200524211652843.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nqEEXFFT-1590408187668)(git的学习.assets/image-20200524212113342.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vm7ptMsk-1590408187669)(git的学习.assets/image-20200524212349284.png)]
# 由于地址很长,我们每次输入都很费劲。git 也提供了记录地址的机制
# 注意 git remote 里面存储的数据是本地仓库的,不是全局的。
(base) MBP:demo2 haitao$ git remote -v # 查看本地记录了哪些地址
(base) MBP:demo2 haitao$ git remote add oringin https://github.com/haitaoss/demo2.git # 创建一个记录,oringin是key 后面的是value。以后使用oringin 就是地址
(base) MBP:demo2 haitao$ git remote -v
oringin https://github.com/haitaoss/demo2.git (fetch) # 从远程提取代码
oringin https://github.com/haitaoss/demo2.git (push) # 推送到远程仓库
# 推送代码都远程仓库
(base) MBP:demo2 haitao$ git push oringin master
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VDRHA0E0-1590408187669)(git的学习.assets/image-20200524213047502.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eSZtOnja-1590408187670)(git的学习.assets/image-20200524213208637.png)]
# 创建空目录,clone 远程仓库到本地
(base) MBP:demo2 haitao$ pwd
/Users/haitao/Desktop/GitStudy/demo2
(base) MBP:demo2 haitao$ mkdir ../demo03
(base) MBP:demo2 haitao$ cd ../demo03
(base) MBP:demo03 haitao$ git clone https://github.com/haitaoss/demo2.git
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g3HAzZwT-1590408187670)(git的学习.assets/image-20200524213410900.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wZxwAIJt-1590408187671)(git的学习.assets/image-20200524213458624.png)]
# git很智能,clone 下来会自动帮我们添加一个remote 的key
(base) MBP:demo03 haitao$ git remote -v
origin https://github.com/zsh-users/zsh-syntax-highlighting.git (fetch)
origin https://github.com/zsh-users/zsh-syntax-highlighting.git (push)
# 删除电脑保存的密码,就是你输入了一次github的账号密码之后,电脑就帮你记住了。为了测试重新登录一个账号,我们需要删除电脑上保存的密码信息。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2AZYBth4-1590408187672)(git的学习.assets/image-20200525114740922.png)]
# clone 仓库到本地,做一次提交,然后push 推送到远程仓库
(base) MBP:demo03 haitao$ git clone https://github.com/haitaoss/demo2.git
(base) MBP:demo2 haitao$ vim a.txt
(base) MBP:demo2 haitao$ git add *
(base) MBP:demo2 haitao$ git commit -m "测试邀请团队"
(base) MBP:demo2 haitao$ git remote -v
(base) MBP:demo2 haitao$ git push origin master
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qpj7bomD-1590408187672)(git的学习.assets/image-20200525113826282.png)]
如果出现没有权限,我们应该邀请成员一起开发我们的项目。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-on0iP9fe-1590408187673)(git的学习.assets/image-20200524215007166.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GbQFSEyF-1590408187674)(git的学习.assets/image-20200525114133015.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-10jgXsgn-1590408187674)(git的学习.assets/image-20200525114331022.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gt21xaHI-1590408187675)(git的学习.assets/image-20200525114548149.png)]
# 再次测试push 代码
(base) MBP:demo2 haitao$ git push origin master
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ysT4BEhB-1590408187675)(git的学习.assets/image-20200525114700544.png)]
pull 拉取
实操
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PkhaQOEo-1590408187676)(git的学习.assets/image-20200524215823290.png)]
# 查看本地库文件
# 使用fetch 抓取远程分支到本地
(base) MBP:demo2 haitao$ git remote -v
oringin https://github.com/haitaoss/demo2.git (fetch)
oringin https://github.com/haitaoss/demo2.git (push)
(base) MBP:demo2 haitao$ git fetch oringin master
(base) MBP:demo2 haitao$ git checkout oringin/master
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IC86nwTi-1590408187676)(git的学习.assets/image-20200524220124751.png)]
# 切换回本地的master 分支,执行merge操作
(base) MBP:demo2 haitao$ git checkout master
已经位于 'master'
(base) MBP:demo2 haitao$ git branch -v
* master 9ac6153 test github
(base) MBP:demo2 haitao$ git merge oringin/master
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nK64Rczd-1590408187677)(git的学习.assets/image-20200524220413942.png)]
# 直接使用pull
(base) MBP:demo2 haitao$ git pull oringin master
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uSkiMoea-1590408187678)(git的学习.assets/image-20200524220758925.png)]
实际情况:A,B都从远程仓库,clone 代码到本地。A对文件进行了修改,并成功push到远程。然后B 添加完功能后也想push 到远程仓库,发现被拒绝。这是远程仓库的合并冲突问题。解决办法只能是B 现在远程代码 fetch 下来,然后在本地merge,在将merge的结果push 到远程仓库。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EGJtKNXN-1590408187678)(git的学习.assets/image-20200525115906369.png)]
解决冲突
# 我们先fetch,在merge,merge出现冲突就手动解决冲突在commit,最后push代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QtnyuRQy-1590408187679)(git的学习.assets/image-20200525120520683.png)]
要点
类比
债权人:老王
债务人:小刘
老王说:10 天后归还。小刘接受,双方达成一致。
老王媳妇说:5 天后归还。小刘不能接受。老王媳妇需要找老王确认后再执行。
场景:岳不群(haitaoss)的公司想增加功能但是不会,另外一家公司的东方不败(haitaoss2)可以帮忙增加功能,但是不能跳槽到岳不群的公司。所以东方不败想帮忙开发功能,就得先fork 复制岳不群的远程仓库为自己的,这样子她就能随心所欲的操作了。她先把仓库clone到本地,修改代码码commit之后push到远程仓库。然后东方不败在执行pull request操作。东方不败成功执行pull request之后,岳不群就能在远程仓库看到一个pull request。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hWZUHAu2-1590408187680)(git的学习.assets/image-20200525120836762.png)]
由于我们这里只有两个账户,所以只能先把之前的haitaoss2,移除团队,你在注册一个账号也是可以的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kg3nNygD-1590408187680)(git的学习.assets/image-20200525121406658.png)]
登录haitaoss2 的github,然后访问haitaoss的仓库,fork haitaoss 的仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d1wRONx8-1590408187681)(git的学习.assets/image-20200525124154129.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FtPisbNY-1590408187681)(git的学习.assets/image-20200525124319612.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JT3506Ic-1590408187682)(git的学习.assets/image-20200525124440988.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Shf55hYf-1590408187683)(git的学习.assets/image-20200525124553185.png)]
haitaoss2 clone项目到本地,添加功能,然后commit,然后push到远程仓库[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sCs709nP-1590408187683)(git的学习.assets/image-20200525125011706.png)]
来到haitaoss2 的远程仓库首页,点击 pull request 按钮。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xRqobVv0-1590408187684)(git的学习.assets/image-20200525125115085.png)]
校验我们的修改后,点击Create pull request
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CypCIqDC-1590408187685)(git的学习.assets/image-20200525125256950.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IfJtFPS1-1590408187686)(git的学习.assets/image-20200525125434638.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xq3SOxJ3-1590408187686)(git的学习.assets/image-20200525125725856.png)]
haitaoss登录github查看haitaoss2给他创建的pull request
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kn3UwqvH-1590408187687)(git的学习.assets/image-20200525125835009.png)]
haitaoss 审核代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qO4YHhph-1590408187688)(git的学习.assets/image-20200525131010533.png)]
合并pull request
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dlG8Fcof-1590408187689)(git的学习.assets/image-20200525131000299.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0l7pXrIA-1590408187691)(git的学习.assets/image-20200525131137484.png)]
haitaoss 更新仓库代码,查看是否真的合并了haitaoss2 新加的功能
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hWLbPYYT-1590408187691)(git的学习.assets/image-20200525131513522.png)]
(base) MBP:~ haitao$ ssh-keygen -t rsa -C xxx
(base) MBP:~ haitao$ cat ~/.ssh/id_rsa.pub
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bcTbN3YF-1590408187692)(git的学习.assets/image-20200525143655069.png)]
# 因为-C 参数只是设置备注,不想要备注就不加即可
(base) MBP:~ haitao$ ssh-keygen -t rsa
(base) MBP:~ haitao$ cat ~/.ssh/id_rsa.pub
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wJmKz6nX-1590408187693)(git的学习.assets/image-20200525144757215.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pedkplcq-1590408187693)(git的学习.assets/image-20200525143839846.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ccU8nVWL-1590408187694)(git的学习.assets/image-20200525143859109.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4hnV6nti-1590408187694)(git的学习.assets/image-20200525143957459.png)]
复制仓库的ssh 地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-owBQsEM5-1590408187695)(git的学习.assets/image-20200525144213258.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XqWye67n-1590408187695)(git的学习.assets/image-20200525144451168.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sIGOnm6U-1590408187696)(git的学习.assets/image-20200525144623420.png)]
GitHub 官网样例文件
https://github.com/github/gitignore
https://github.com/github/gitignore/blob/master/Java.gitignore
编辑本地忽略配置文件,文件名任意
# 根据官网提供的配置,再添加一下自己的配置
(base) MBP:demo2 haitao$ vim /Users/haitao/.gitignore_global
(base) MBP:demo2 haitao$ vim ~/.gitconfig
/Users/haitao/.gitignore_global 文件内容
# Compiled class file *.class # Log file *.log # BlueJ files *.ctxt # Mobile Tools for Java (J2ME) .mtj.tmp/ # Package Files # *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* # idea 的编译文件 .idea target
.gitconfig 添加的内容
[core]
excludesfile = /Users/haitao/.gitignore_global
autocrlf = input
集中式工作流
像SVN 一样,集中式工作流以中央仓库作为项目所有修改的单点实体。所有修改都提交到Master 这个分支上。这种方式与SVN 的主要区别就是开发人员有本地库。Git 很多特性并没有用到。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZvMmseRC-1590408187697)(git的学习.assets/image-20200525151840393.png)]
GitFlow 工作流(用的最多)
Gitflow 工作流通过为功能开发、发布准备和维护设立了独立的分支,让发布迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8yeI5vrY-1590408187697)(git的学习.assets/image-20200525151828035.png)]
Forking 工作流
Forking 工作流是在GitFlow 基础上,充分利用了Git 的Fork 和pull request 的功能以达到代码审核的目的。更适合安全可靠地管理大团队的开发者,而且能接受不信任贡献者的提交。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qNzaRgLi-1590408187698)(git的学习.assets/image-20200525151815224.png)]
主干分支master
主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境完全一致。
开发分支develop
主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。
bug 修理分支hotfix
主要负责管理生产环境下出现的紧急修复的代码。从主干分支分出,修理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。
准生产分支(预发布分支) release
较大的版本上线前,会从开发分支中分出准生产分支,进行最后阶段的集成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后可以视情况删除。
功能分支feature
为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支中独立出来。开发完成后会合并到开发分支。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-58N3IpHa-1590408187698)(git的学习.assets/image-20200525152118376.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QiCdrZl8-1590408187699)(git的学习.assets/image-20200525152201071.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XDqynoE1-1590408187699)(git的学习.assets/image-20200525161802047.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ldp3N13c-1590408187700)(git的学习.assets/image-20200525161944071.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G2D5Iq80-1590408187700)(git的学习.assets/image-20200525191057306.png)]
# 拉取gitlab 镜像 (base) MBP:~ haitao$ docker pull gitlab/gitlab-ce # 查看虚拟机的ip (base) MBP:~ haitao$ ip addr 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:50:56:28:03:7e brd ff:ff:ff:ff:ff:ff inet 192.168.4.100/24 brd 192.168.4.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::250:56ff:fe28:37e/64 scope link valid_lft forever preferred_lft forever # 运行容器 (base) MBP:~ haitao$ docker run --detach \ --hostname 192.169.4.100 \ # 这个是你的linux的ip,很重要,不设置到时候没办法定位到你的仓库 --publish 443:443 --publish 80:80 --publish 222:22 \ --name gitlab \ --restart always \ --volume /opt/docker/gitlab/config:/etc/gitlab \ --volume /opt/docker/gitlab/logs:/var/log/gitlab \ --volume /opt/docker/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ACV4jX2t-1590408187701)(git的学习.assets/image-20200525185641066.png)]
设置了12345678
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MnFUrJrJ-1590408187702)(git的学习.assets/image-20200525185746421.png)]
默认的登录账号是root
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zsxQLl4n-1590408187702)(git的学习.assets/image-20200525185842900.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wnmk0kYn-1590408187703)(git的学习.assets/image-20200525185903926.png)]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。