admin管理员组

文章数量:1585691

Git分布式版本控制工具(B站黑马)学习笔记


文章目录

  • Git分布式版本控制工具(B站黑马)学习笔记
  • 前言
  • Git分布式版本控制工具
  • 概述
  • Git工作流程
  • Git安装与环境配置
    • 设置用户信息
    • 为常用指令配置别名
  • 获取本地仓库
  • Git基础操作指令
    • 查看修改的状态(status)
    • 添加工作区到暂存区(add)
    • 提交暂存区到本地仓库(comm it)
    • 查看提交日志(log)
    • 版本回退(reset)
    • 添加文件到忽略列表(.gitignore文件)
  • 分支
    • 查看本地分支
    • 创建本地分支
    • 切换分支(checkout)
    • 合并分支(merge)
    • 删除分支
    • 解决冲突
    • 开发中分支使用原则与流程
  • Git远程仓库
    • 码云的使用
      • 注册码云
      • 创建远程仓库
      • 配置SSH公钥
      • 操作远程仓库
        • 添加远程仓库
        • 解绑远程仓库
        • 查看远程仓库
        • 推送到远程仓库
        • 查询远程仓库
        • 查看本地分支与远程分支的关联关系
        • 从远程仓库克隆
        • 从远程仓库中抓取和拉取
        • 解决合并冲突
  • 在Idea中使用Git
    • 在Idea中配置Git
    • 在Idea中操作Git
      • 创建项目远程仓库(同上)
      • 初始化本地仓库
        • .gitignore自动生成
      • 提交到本地仓库
      • 设置连接远程仓库
      • 推送到远程仓库
      • 克隆远程仓库到本地
      • 解决冲突
      • IDEA分支操作
      • IDEA常用GIT操作入口
  • 附:几条铁令
  • 注:


前言

Git分布式版本控制工具(B站黑马)学习笔记


Git分布式版本控制工具

Git Bash:Git提供的命令行工具 (相当于内置了一个小的Linux)

因为使用Git Bash是Git提供的命令行工具 (相当于内置了一个小的Linux),会用到一些基本的Linux命令,例如:

  • ls/ll 查看当前目录
  • cat 查看文件目录
  • touch 创建文件

概述

Git和GitHub是什么,有什么用

Git是目前最主流的分布式版本控制系统。版本控制系统(VCS)可以帮你保存文件的所有修改记录,并使用版本号进行区分。你可以随时浏览历史版本将改错的文件还原到指定的版本还可以对比不同版本的文件差异起到恢复和保护的作用。例如:备份、代码还原、协同开发、追溯问题代码的编写人和编写时间

GitHub是主流的代码托管平台,可以理解为存放和管理代码的网盘,大家可以把自己的代码传上去进行共享和维护,当然也可以从平台下载代码。

注意不要把两者搞混,Git是工具是抓手,而GitHub是平台,两者没有必然的联系。

那为什么要用Git和GitHub呢,要知道Git最开始就是Linux之父为了更好管理Linux的内核开发而创立的。假设有100个人要共同开发一个大型项目,怎么保证大家的代码不重复又能共享呢?难道把代码都放到u盘里拷来拷去,或者口口相传说什么,哎 今天我李某要改这个文件你们其他同学别跟我抢,都别改。这肯定不行是吧。所以分布式版本控制系统和代码托管平台出现了,大家可以把项目代码放到代码托管平台上每个人都从上面下载代码,然后在自己的电脑改代码,维护自己的版本。最后在发布前在把大家不同版本的代码合到一起上传到平台就可以了,非常的方便和高效。公司为了安全一般都会有自己的代码托管平台。而GitHub是开源的,大家都能共享这上面的代码,免费学习和参与知名项目。这就是我们为什么要用Git和GitHub了。

以上出自 程序员鱼皮:团队开发神器 Git 自学指南,几分钟掌握学习重点 #程序员 #编程

Git

Git工作流程

Git安装与环境配置

git官网:https://git-scm/download

安装完成后在电脑桌面右键,出现如下两个菜单则安装成功

备注:

Git GUI:Git提供的图形界面工具

Git Bash:Git提供的命令行工具 (相当于内置了一个小的Linux)

设置用户信息

注意:记得设置用户名称和email,这很重要,因为每次Git提交都会使用该用户信息

配置用户名及email:

  1. 打开Git Bash
  2. 设置用户信息

git config --global user.name pgw

git config --global user.email 1531573206@qq

查看配置信息

git config --global user.name

git config --global user.email

为常用指令配置别名

有些常用的指令参数非常多,每次都要输入好多参数,我们可以使用别名。

  1. 打开用户目录,创建 .bashrc 文件

部分windows系统不允许用户创建点号开头的文件,可以打开gitBash,执行 touch ~/.bashrc

  1. 在 .bashrc 文件中输入如下内容:
#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录所有文件及基本信息
alias ll='ls -al'
  1. 打开gitBash,执行 source ~/.bashrc

获取本地仓库

要使用Git对我们的代码进行版本控制,首先需要获得本地仓库

1)在电脑的任意位置创建一个空目录(例如test)作为我们的本地Git仓库

2)进入这个目录中,点击右键打开Git bash窗口

3)执行命令git init

4)如果创建成功后可在文件夹下看到隐藏的.git目录。

Git基础操作指令

Git工作目录下(获取本地仓库后除了.git文件,其它都是工作目录)对文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着Git的指令而发生变化。

控制状态之间转换的指令:

  1. git add (工作区 --> 暂存区)
  2. git commit ( 暂存区 --> 本地仓库)

查看修改的状态(status)

  • 查看修改的状态(暂存区、工作区)
  • 命令: git status

添加工作区到暂存区(add)

  • 添加工作区一个或多个文件的修改到暂存区
  • 命令: git add 当文件名|通配符 如:git add file01.txt加入单文件 git add . 将全部加入

提交暂存区到本地仓库(comm it)

  • 提交暂存区内容到本地仓库的当前分支
  • 命令: git commit -m “注释内容” “-m” 后为提交注释

查看提交日志(log)

  • 查看提交记录

  • 命令: git log [option]

    • option
      • –all 显示所有分支
      • –pretty=oneline 将提交信息显示为一行
      • –abbrev-commit 使得输出的commitId更简短
      • –graph 以图的形式显示

通过别名方式查看(设置别名查看上方 为常用指令配置别名

版本回退(reset)

  • 版本切换

  • 命令: git reset --hard commitID 提交id

    • commitID 可以使用 git-log 或 git log 指令查看
  • 查看已经删除的记录(如果版本回退后又clear清除了页面,就看不到回退前的id了,所以要查看已经删除的记录)

    • 命令: git ref5log
    • 这个指令可以看到已经删除的提交记录

添加文件到忽略列表(.gitignore文件)

一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。下面是一个示例:

# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

分支

什么是分支

在多人协作开发项目时,不同成员负责的功能不同,为了不受其他开发人员的影响,我们可以在主分支上建立自己专用的分支。完成工作后,将自己分支的修改合并到主分支。因为每一次提交的历史记录都会被保存,所以当发生问题时,定位和修改造成问题的提交就容易多了,而且这样每个人负责自己的分支从而不受其它分支的影响。

查看本地分支

  • 命令:git branch

创建本地分支

  • 命令:git branch 分支名

HEAD指向的是现在使用中的分支的最后一次更新。通常默认指向master分支的最后一次更新。通过移动HEAD,就可以变更使用的分支。

因为新建了一条分支,所以会有两个提交(相当于你要在这个基础上写别的,新建的分支要有前面的内容)

切换分支(checkout)

  • 命令:git checkout 分支名

我们还可以直接切换到一个不存在的分支(创建并切换)

  • 命令:git checkout -b 分支名

在分支上操作不会影响其它分支,例如下方 master 分支新建了 .gitignore 文件,提交后切换到 dev01 分支后,在此分支时看不到 .gitignore 文件的

查看提交日志 master 提交了 .gitignore 文件(HEAD指向当前使用分支)

合并分支(merge)

  • 一个分支上的提交可以合并到另一个分支
  • 命令:git merge 分支名称

一般都将分支合并到master分支,例如在dev01分支新建 file02.txt 后提交

切换为master分支合并dev01分支,输入git merge dev01会弹出vi编辑器,按Esc健后输入“ :wq ” 退出

分支合并成功

删除分支

不能删除当前分支,只能删除其他分支

  • git branch -d b1 删除分支时,需要做各种检查 (一般使用-d即可)
  • git branch -D b1 不做任何检查,强制删除

解决冲突

冲突

当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突。

解决冲突步骤:

  1. 合并分支
  2. 处理文件中冲突的地方(将文件修改成想要的样子)
  3. 将解决完冲突的文件加入暂存区(add)
  4. 提交到仓库(commit)

当两个分支修改同一个文件,发现修改了同一个地方不同的内容。比如dev01修改为count=2,master修改为count=3,将dev合并到master后就会产生冲突。

解决办法:

合并分支

将dev01合并到master后会出现如下图所示,将文件修改成想要的样子再通过master提交。

合并后file01.txt文件,会出现两个文件相冲突的地方,自动用"===="区分

处理文件中冲突的地方(将文件修改成想要的样子)然后提交

提交可以加-m指定一个注释,也可以不加,它会自动生成

回车后会弹出vi编辑器,按Esc健后输入“ :wq ” 退出

开发中分支使用原则与流程

几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。

在开发中,一般有如下分支使用原则与流程:

  • master (生产) 分支

​ 线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;

  • develop(开发)分支

    是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,

​ 都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。

  • feature/xxxx分支

​ 从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后

​ 合并到develop分支。

  • hotfix/xxxx分支

​ 从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、develop分支

  • 还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支)等等。

master分支是主分支,是线上发布的分支。上线代码必须是从master分支上线,其它分支是不可能上线的。

develop(开发分支),这是开发过程中的主要分支,它可以根据项目功能开发的分出不同的feature分支。feature分支功能开发完成后合并到develop分支,合并后记得删除对应feature分支(因为功能完成不需要了)

Git远程仓库

常用的托管服务【远程仓库】

前面我们已经知道了Git中存在两种类型的仓库,即本地仓库和远程仓库。那么我们如何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等。

gitHub( 地址:https://github/ )是一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托管,故名gitHub

码云(地址: https://gitee/ )是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快

GitLab (地址: https://about.gitlab/ )是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务,一般用于在企业、学校等内部网络搭建git私服。gitHub跟码云都是把代码放到别人的服务器上进行托管,这样无法保障安全。GitLab就是自己搭建的一个代码管理的托管服务,所以一般用于在企业、学校等内部网络搭建git私服。

码云的使用

注册码云

要想使用码云的相关服务,需要注册账号(地址: https://gitee/signup )

创建远程仓库

仓库创建完成后可以看到仓库地址,如下图所示:

配置SSH公钥

在git中clone项目有两种方式:HTTPS和SSH,它们的区别如下:

HTTPS:不管是谁,拿到url随便clone,但是在push的时候需要验证用户名和密码。

SSH:clone的项目你必须是拥有者或者管理员,而且需要在clone前添加SSH Key。SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。

仓库推送,推送仓库不是随意人员就可以的,码云会确认推送着是否为本人,有几种方案:1.输入码云的登录用户名密码——https 2.公私钥对——ssh 一般情况使用第二种公私钥对,所以需要配置公私钥对

  • 生成SSH公钥

    • ssh-keygen -t rsa (Git Bash输入生成身份验证密钥)

    • 全部回车,采用默认值

      • 如果公钥已经存在,则自动覆盖
  • Gitee设置账户公共钥
    • 获取公钥
      • cat ~/.ssh/id_rsa.pub

    • 验证是否配置成功

      • ssh -T git@gitee

输入后会出现提示,第一次访问gitee,?后输入yes即可

这里之所以设置Gitee密钥原因是,通过非对称加密的公钥与私钥来完成加密,公钥放置在Gitee上,私钥放置在自己的电脑里。Gitee要求每次推送代码都是合法用户,所以每次推送都需要输入账号密码验证推送用户是否是合法用户,为了省去每次输入密码的步骤,采用了ssh,当你推送的时候,git就会匹配你的私钥跟Gitee上面的公钥是否是配对的,若是匹配就认为你是合法用户,则允许推送。这样可以保证每次的推送都是正确合法的。

操作远程仓库

添加远程仓库

此操作是先初始化本地库,然后与已创建的远程库进行对接

  • 命令: git remote add <远端名称> <仓库路径>

    • 远端名称,默认是origin,取决于远端服务器设置 (给远程仓库设置本地名称,大多数情况一个本地仓库对应一个远程仓库 所以默认origin)
    • 仓库路径,从远端服务器获取此URL
    • 例如: git remote add origin git@gitee:peng-guangwei/git_test.git

解绑远程仓库
  • 如果添加的时候地址写错了,或者就是想删除远程库,可以用该命令
  • 命令:git remote rm <远端名称>
  • 使用前,可以git remote -v查看远程库信息
查看远程仓库
  • 命令: git remote

推送到远程仓库
  • 命令:git push [-f] [–set-upstream] [远端名称 [本地分支名][:远端分支名] ]

    • 如果远程分支名和本地分支名称相同,则可以只写本地分支

      • git push origin masterv

    • -f 表示强制覆盖(如果本地代码和云端代码修改了同一个东西产生冲突,不让推送,可以使用-f强制覆盖,以提交的为准)

    • –set-upstream 推送到远端的同时并且建立起和远端分支的关联关系。(远端分支与本地分支进行关联)

      • git push --set-upstream origin master:master

    • 如果当前分支已经和远端分支关联,则可以省略分支名和远端名。

      • git push 将master分支推送到已关联的远端分支
查询远程仓库

查看本地分支与远程分支的关联关系
  • 命令:git branch -vv

关联前:

使用–set-upstream关联后:

从远程仓库克隆
  • 命令:git clone <仓库路径> [本地目录]

    • 本地目录可以省略,会自动生成一个目录(远程仓库的名称)

从远程仓库中抓取和拉取

远程分支和本地的分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。

  • 抓取 命令:git fetch [remote name] [branch name]

    • 抓取指令就是将仓库里的更新都抓取到本地,不会进行合并
    • 如果不指定远端名称和分支名,则抓取所有分支。

02Git_demo推送file03.txt

01Git_demo使用fetch抓取命令

远端分支也是分支,执行抓取后还未与本地master合并,所以本地还看不到file03.txt

合并本地和远端分支

  • 拉取 命令:git pull [remote name] [branch name]

    • 拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
    • 如果不指定远端名称和分支名,则抓取所有并更新当前分支。

02Git_demo推送file04.txt

01Git_demo使用pull拉取命令 自动合并本地和远端分支

解决合并冲突

在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突

A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支,如下图所示。

在B用户拉取代码时,因为A、B用户同一段时间修改了同一个文件的相同位置代码,故会发生合并冲突。

远程分支也是分支,所以合并时冲突的解决方式也和解决本地分支冲突相同相同。(冲突的地方会用’==='区分,改成想要的样子提交再推送即可)

在Idea中使用Git

在Idea中配置Git

安装好IntelliJ IDEA后,如果Git安装在默认路径下,那么idea会自动找到git的位置,如果更改了Git的安装位置则需要手动配置下Git的路径。选择File→Settings打开设置窗口,找到Version Control下的git选项:

在Idea中操作Git

创建项目远程仓库(同上)

初始化本地仓库

成功初始化导航栏会出现这个

.gitignore自动生成

安装.ignore插件

自定义.gitignore文件模板

# Created by .ignore support plugin (hsz.mobi)
### Java template
# 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/en/download/help/error_hotspot.xml
hs_err_pid*

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### Maven template
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
# https://github/takari/maven-wrapper#usage-without-binary-jar
.mvn/wrapper/maven-wrapper.jar

提交到本地仓库

idea把工作区和暂存区归一起了,只需全选提交即可

两次弹窗点击提交commit

提交成功

设置连接远程仓库

推送到远程仓库

推送成功

克隆远程仓库到本地

解决冲突

原则:工作第一件事pull

模拟冲突:两个成员修改了同一处的代码,成员1先提交推送了,成员2还没提交。推送解决办法:成员2先提交到本地仓库,进行拉取pull操作。在本地解决完冲突在进行推送

成员1修改后提交推送内容

成员2也在同一处修改内容

解决:

成员2先提交到本地仓库

执行拉取pull操作

手动合并,并重新加入暂存区

冲突解决,成员2进行推送

成员1重新拉取

如果当两个人修改了同一个地方,成员1提交推送了,成员2也提交推送,这是会弹出解决冲突合并的提示,如下图。解决办法同上。

总结:工作前第一件是就是pull

IDEA分支操作

创建分支

常规方式

最强大的方式

切换分支及其它分支相关操作

IDEA常用GIT操作入口

附:几条铁令

  1. 切换分支前先提交本地的修改,否则切换完后未提交内容会丢失
  2. 代码及时提交,提交过了就不会丢
  3. 提交前先执行下拉操作,处理冲突
  4. 工作前的首要操作执行pull下拉操作

注:

该内容是根据B站黑马程序员学习时所记,相关资料可在B站查询:黑马程序员Git全套教程,完整的git项目管理工具教程,一套精通git

本文标签: 分布式黑马学习笔记版本工具