Git

尚硅谷


1.概述

  • 分布式版本控制工具
  • github以,gitee(码云)以及gitlab使用
  • idea集成

2.分布式vs集中式

  • 这里老师没有讲的太清楚,个人理解如下:
  • 集中式只是在中央服务器有完整的版本信息,进行版本控制,每个人想操作要接力(像同步)
  • 分布式是每个人的电脑都有完整的版本信息,可以进行版本控制,再向中央仓库推送(像并行)

3.工作机制

  1. 工作区:写代码,代码磁盘位置
  2. 暂存区:临时存储,代码提交之前放到暂存区
  3. 本地库:储存历史版本
  4. 远程库

4.代码托管中心

  1. 也就是远程库,本地库可以推送远程库
  2. 局域网:gitlab
  3. 互联网:gitee,github

5.安装

  • csdn大把教程,略过

6.Git常用命令

  1. image-20230110150634972

  2. 黑色的是设置用户签名,不是太重要。安装时设置一次即可,否则使用git时会报错。(在博客网站已经设置)

    • 用户签名的作用是区分不同操作者的身份

    • 签名只是在本地和登陆的github客户端没有任何关系

  3. git大多数命令和linux通用。

6.1 初始化本地仓库

  1. 在项目文件夹右键git bash here
  2. 执行git init命令—>会自动创建.git隐藏目录,就算初始化完成

6.2 查看本地库状态

  1. git status,查看本地库状态,输出日志

  2. image-20230110154405995

    • 第一行:告诉你当前所在分支,也在image-20230110154833792这里显示。
    • 第二行:还没有提交过任何东西
    • 第三行:没有任何东西可以用来提交(本地为空)
  3. image-20230110155400559

    当添加过了东西,第二行变为,没有被追踪过的文件:因为没有提交过。第三行:除了没有被追踪过的文件没有可以提交的

6.3 添加文件到暂存区

  1. git add 文件名
  2. image-20230110160429478
  3. 此时可以看到git status有了记录,并且提示git rm --cached <文件名>即可从暂存区删除,但是不会删除本地的。
  4. cat 文件名查看的是工作区中的文件(也就是本地的文件)

6.4 提交本地库

  1. 将文件提交至本地库来形成历史版本

  2. git commit-m "日志信息" 文件名-m的意思就是输入一个日志信息,如果不写的话也会提示你。

  3. image-20230110161251057

  4. image-20230110161338136

    此时git状态如此提示,working tree clean说工作树是干净的,表示此时没有任何东西需要提交。

  5. git reflog:查看版本信息日志,版本号是git log命令的前七位精简版。

    image-20230110161546286

  6. git log:查看详细日志image-20230110161825072

    有提交人和时间。

  7. ctrl+l:可以给git清屏

  8. 修改后状态会改变,需要重新add,commit,并且日志会提示给你修改了啥(但是只能显示和 行 有关的信息)。image-20230110162740122

  9. 查看日志image-20230110162908892

7.版本穿梭

  1. git refloggit log查看版本信息
  2. git reset --hard 精简版本号,会穿越到历史版本(本地的会变)
  3. image-20230110163654019可以在此查看当前的版本号
  4. 不仅可以往前穿越,还可以往后穿越。
  5. 原理:master指针指向存在内存中的谁

8.Git分支操作

  1. 流程:

    image-20230110164602647

  2. 分支:代码开发同时推进多个任务,为每个任务创建一个分支,不会影响主线(开发坏了没事),底层也是指针引用。

  3. 分支更新:

    image-20230110165056656

  4. 优点:

    • 同时并行推进多个功能开发,提高开发效率。
    • 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

8.1 查看&创建&切换

  1. 分支操作:四大步image-20230110205307767

  2. 查看分支并创建分支:

    image-20230110205926924

    • 查看当前分支,创建hot-fix分支,再次查看分支,能看见新增分支
    • checkout命令切换分支,再次查看分支,能看见hot-fix分支名字变绿和蓝色小括号更改,说明切换到了hot-fix分支
    • 在hot-fix分支修改txt文件,查看状态
    • 提交至暂存区然后上传至工作区,cat查看发现是我们改好后的
    • 总结:创建的新分支在旧分支的基础上更改,还不影响旧分支。
    • image-20230110210449904
    • 底层逻辑还是指针

8.2 分支合并(正常合并)

  1. git merge 分支名:指这里的分支名和当前蓝色括号里面的分支进行合并。

  2. 如果原分支没有修改(比如例子这里的master分支没有修改),将修改了的现分支(比如这个hot-fix)合并到原分支上就相当于修改了原分支的内容。

  3. 这叫做正常合并

8.4 分支合并(冲突合并)

  1. 冲突产生的原因:合并分支时,两个分支在同一个文件同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个。必须人为决定新代码内容。查看状态(检测到有文件有两处修改)。

  2. 强行合并:image-20230110212321567

    会说自动合并失败

    • 此时git查看状态蓝括号是合并中

      并且报错说都修改了

    • 此时vim编辑这个文件,git会告诉你哪儿有问题image-20230110212443848

      <<<<<head下的内容是当前分支,>>>>>>>hot-fix上,=====下的内容是要合并的分支。并且了问题所在

    • 删掉报错做最终修改

      image-20230110213038262

    • 然后重新添加,上传image-20230110213243519

    • 再看,就是没事了,当前分支的这个文件就是修改之后的了。

  3. 底层原理也是指针image-20230110213610443

9.Git的团队协作机制

9.1团队内协作

  1. image-20230110214213980
  2. 左边本地库是管理员,需要给右边本地库一定权限,并且右边成员在团队内。

9.2跨团队协作

  1. image-20230110220309486
    • fork:叉子,在这里是作为新分支插在东方不败的远程库。

10.Github

10.1 基本操作

  1. 创建远程仓库image-20230110224153315

  2. 可以把链接地址复制到本地

  3. 常用操作:image-20230110223633997

    • 创建别名:链接太长,创建别名,操作时可以用别名,别名最好和库名保持一致。image-20230110224419527

      为什么有两个别名?->可以推送和拉取,都用这个别名。

      git remote remove 别名可以删除别名

    • 推送代码:git push 别名 分支

    • 拉取代码:git clone 远程地址

      image-20230111120351684

      image-20230111120423531

      拉取之后查看状态,正常。说明拉取之后会自动提交到本地库,然后查看文件内容,和修改之后的一样。

    • 克隆远程库到本地:git-clone 远程链接image-20230111120818170

      克隆代码是不需要账号的。

      image-20230111121414269

      克隆下来的代码会自动取别名

  4. 团队协作:

    • 添加成员,授予权限image-20230111122339892

    • 成员点开邀请函链接然后接受,然后就能成功push了

      image-20230111122452769

    • 团队内的其他人也可以pull成员push好的代码(同一分支),这就是团队协作的大致流程。

  5. 跨团队协作:

    • 点开需要帮忙操作的别人的仓库地址,点击fork,会发现自己的仓库也有这个项目了。

    • 然后修改完毕,需要创建一个pull requestimage-20230111123608595

    • 被pull请求的人可以点击合并申请,然后点击缺定image-20230111123913146

      可以把别人改好的代码合并到自己的这里来

      此时再查看代码就是别人改好了的,团队其他成员也可以看到。

  6. ssh免密登录:

    • 生成ssh:ssh-keygen -t rsa -c 邮箱地址,然后敲三次回车

    • 然后电脑家目录就有.ssh文件,里面有公钥和私钥image-20230111124955016

      上面是私钥下面是公钥,把公钥拿下来

    • github,设置,ssh,新建公钥,复制粘贴,生成成功

    • 此时远程库的这个项目就有ssh地址了,通过这个ssh链接,可以进行pull,push等操作。

  7. github token使用:https://blog.csdn.net/chengwenyang/article/details/120060010

10.2 idea集成git

  1. 配置git忽略掉文件:

    • 忽略掉ide的配置文件或者秘密文件

    • 创建git.ignore,模板:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      # Compiled class file
      *.class

      # Log file
      *.10g

      # 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*

      .classpath
      .project
      .settings
      target
      .idea
      *.iml
    • 在项目的.gitconfig文件下配置一下

      1
      2
      [core]
      excludesfile = C:/Users/asuis/git.ignore 注意要把反斜线改为正斜线(windows默认反斜线)
  2. idea定位Git程序:idea搜索git(或者version control里面找),然后再找到git\bin\git.exe,点一下test,看到git版本信息,就配置成功了。

  3. 项目git初始化:idea上方工具栏vcs,import into version control—>creat git repository,默认会选择该项目的根目录,点击ok,然后发现出现.git目录,idea中也有红色文件(说明未被追踪)。

  4. 如何添加项目到暂存区?:直接在idea右键项目(可以是文件可以是整个项目,若是整个项目有忽略文件,idea会问,选否就好),Git->add,就好,会变绿,说明已经添加到暂存区但是还没提交,此时新加文件idea会提问你是否add。

  5. 如何提交?:右键commit,此时会弹出框框看见暂存区的文件,还可以写提交信息,提交成功后文件就变成以前的颜色(黑色)。注意追踪过一次,idea中就不用再追踪了,直接提交就好(或者看文件颜色行事)。

  6. 如何切换版本?:idea左下角version control->log,可以看到历史版本和当前版本,有黄(当前版本)绿(当前分支)两个指针的图片。右键checkout即可切换版本。右下角还有详细信息。image-20230111144944590

  7. idea分支操作

    • 创建&切换:

      右键项目->git->repository->Branches->new branch。还可以点击右下角这个image-20230111145355130

    也会有new branch

    image-20230111145450969

    点左边第一个勾勾不仅创建还切换过去。右下角可以显示分支名字并且切换分支(点击分支->checkout)。

    • 正常合并:创建分支修改(概念之前有详细讲解),merge into current:合并到当前

      image-20230111150117788

    • 冲突合并:新分支与旧分支修改的不一样了(概念之前有详细讲解)image-20230111153132479

      这样的分支合并过来必定会发生代码冲突,idea也会提示

      image-20230111153242335

      点击手动合并,出现合并工具,分别是:master分支修改后的代码,未修改(要手动合并)的代码,hot-fix分支的代码。image-20230111153414661

      分别点image-20230111153531721就会将代码添加

      image-20230111153601581

      点击apply,手动合并成功。并且显示很清晰:

      image-20230111153639266

10.3 idea集成github

  1. 设置github

    • 设置搜索github,没有的话插件商店安装一下。
    • 设置github账号,可以token登录
  2. 分享项目到github

    • 可以省略创建远程库

    • image-20230111160049588

      有库名(一般和项目名一致),别名(一般和项目名一致),是否私有(一般公有),和项目描述(可填可不填)

      image-20230111160140386

      静待idea自动push即可,idea分享操作相当于:创库+push

  3. 推送代码到github

    • 右键git:

    • add提交到暂存库

    • commit提交到本地库

    • push默认选中别名,建议ssh push(因为默认https上传,和网络关系很大):先复制ssh链接image-20230111161258497

      然后点击别名,点击自定别名,起个别名(前面加个ssh- 就好),然后填入url就好,之后点击push就好。

    • 相当于是把命令图形界面化了

  4. 拉取远程库

    • 注意:push是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push的操作是会被拒绝的。也就是说,要想push成功,一定要保证本地库的版本要比远程库的版本高!因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先pull拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!

    • 注意:pull是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动合并,如果自动合并失败,还会涉及到手动解决冲突的问题。

    • 选一下合并就好(此时的远程库是最新的)

      image-20230111162632224

  5. 克隆代码到本地

    • idea初始化页面就可以选一下

      image-20230111162814330

    • 然后选择image-20230111162935758

      再填入url即可

11.Gitee

  1. 使用和github相似,注册登录使用就完事,还是中文版的

  2. idea也可以整合gitee,操作相似,先安插件。码云推荐https链接,因为是国内的。

  3. 码云复制github项目:

    • 创建仓库时往下找,导入已有仓库。

      image-20230111165609668

    • 选择github的https链接,检测,创建,就能迁移过来。

    • 可以同步代码,点击刷新按钮就好

      image-20230111165841469

12.GitLab

  1. 安装:centos7系统
  2. 关闭防火墙,配置好ip,可以上网
  3. 暂时用不到,看视频配置。