xfyyds

导航

git学习笔记

Git学习笔记

 

文章目录

 

一、版本控制

1.什么是版本控制

版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统

版本控制最重要的是可以记录文件修改历史纪录,从而让用户能够查看历史版本,方便版本切换

2.为什么需要版本控制

从个人开发过渡到团队

img

3.版本控制工具

  • 集中式版本控制(CVS、SVN)

    有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

    优点:管理员可以轻松掌控每个人的权限

    缺点:如果服务器宕 机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作

  • 分布式版本控制(Git)

    客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)

分布式版本控制相对于集中式版本控制的优点:

  1. 服务器断网的情况况下页可以进行开发
  2. 每个客户端保存的是完整的项目(包括历史记录)

二、Git工作机制

Git是一个免费的、开源的**分布式版本控制系统**(SVN是集中式的)

可以管理代码

易于学习,占地面积小,性能快。具有廉价的本地库

img

  • Git代码托管中心

    代码托管中心是基于网络服务器的远程代码仓库,一般称为**远程库**

  • 代码托管中心的种类

    局域网:GitLab

    互联网:GitHub、Gitee

1.Git安装

  1. 下载gitGit - Downloads (git-scm.com)

  2. 打开安装包,安装到非中文,没有空格的目录下

2.Git命令

命令名称作用
git config --global user.name 用户名 设置用户签名
git config --global user.name 邮箱 设置用户签名
git init 初始化本地库
git status 查看本地库状态
git add 文件名 添加暂存区(追踪文件)
git rm --cache 文件名 将文件从暂存区删掉(工作区还保留)
git commit -m “日志信息” 文件名 提交本地库
git reflog 查看版本信息
git log 查看版本详细信息
git reset --hard 版本号 切换版本【或者取消暂存区文件】
git clone 仓库地址 克隆远程仓库【重要】
git remote -v 查看当前仓库的远程仓库地址
git remote add <远程仓库别名> 地址 本地仓库关联远程仓库【这样就可以推送、拉取】
git push 远程仓库别名 分支名 本地仓库代码提交到关联的远程仓库
git pull 远程仓库别名 分支名 拉取远程仓库到本地
git merge 分支名 把指定的分支合并到当前分支
git brach 分支名 创建分支

说明:

  • 设置用户签名
  1. 设置用户签名的作用是用来区分不同的操作者身份。Git首次安装时必须设置

  2. 这里用命令设置的Git用户签名和将来登录代码托管中心(Git)的账号没有任何关系


  • 初始化本地库
  1. 在电脑上创建一个文件夹,进入里面,然后在文件夹中使用git-init命令——初始化本地库
  • 查看本地库状态
  1. 使用git status 会出现三行命令

    第一行:显示分支数(master 分支)

    第二行:是否提交过

    第三行:是否需要提交(如果创建了文件,就会显示untracker files 未被追踪)

  • 添加暂存区
  1. 当添加到暂存区后,再使用git status,创建的文件就会由红色变为绿色
  • 删除暂存区
  1. git rm --cache 文件名:会把文件从暂存区中删除,但是文件依旧保留到原来的文件夹中
  2. 使用后的效果:文件的状态会变为未被追踪(文件名由看绿色变为红色)
  • 提交本地库
  1. git commit -m “日志信息” 文件名:日志信息就是版本名字
  • 查看版本信息
  1. 作用:可以查看版本号和提交的版本名字

    image-20230428105238064

  2. 可以使用的命令(两个):

    git reflog

    git log

  • 修改文件
  1. 先修改工作区中的文件(也就是我们通过vim在git库中创建的)
  2. 然后添加到暂存区(git add)
  3. 然后提交到本地库(git commit -m ”版本名” 文件名)
  • 切换版本
  1. 提交新版本后,指针会自动指向新版本,如果我们需要切换到旧版本,就可以使用版本穿梭
  2. 先查看版本号:git reflog
  3. git reset --hard 精简版本号
  4. 再打开文件的话,就是切换后版本的内容

3.Git分支

  • 什么是分支

    在版本控制过程中,同时推进多个任务,我们可以为每个任务创建单独的分支。(初学者可以理解为一个单独的副本)

    人话就是:我们不可能动用户正在使用的项目,但是我们可以复制用户的项目作为分支,在这个分支上开发。开发完之后,合并到用户的项目上

  • 分支的优点

    可以并行推进多个功能,提高开发效率

    如果某一分支开发失败,不会对其他分支有任何影响。失败的分支删除即可

命令名称作用
git branch 分支名 创建分支
git branch -v 查看分支
git checkout 分支名 切换分支
git merge 分支名 把指定的分支合并到当前分支上

3.1 查看分支

使用命令:git branch -v

3.2 创建分支

使用命令:git branch 分支名

image-20230428113558143

3.3 切换分支

使用命令:git checkout 分支名

3.4 修改分支

  1. 切换分支后,修改文件
  2. 然后使用 git add 文件名 提交到暂存区
  3. 然后使用 git commit -m “版本名” 文件名 提交到本地库

3.5 合并分支

  • 正常合并

    image-20230428121142214

    把hot-fix合并到master分支上(也就是用hot-fix的代码覆盖master的代码)(只有一个分支做了修改

  • 冲突合并

    冲突合并产生的原因:

    ​ 合并分支的时候,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git无法决定使用哪一个,需要我们人为决定新代码内容(两个分支都修改且提交后修改

    image-20230428122929779

    1. 合并后需要手动修改

    2. 进入文件,把不需要的东西删除,把需要的东西留下来

    3. 然后提交暂存区

    4. 提交执行(注意:这个时候提交不能带文件名

      image-20230428123424858

    5. 说明:提交后,修改的是合并的分支

4.Git团队协作机制

4.1 团队内协作

image-20230428124846694

4.2 跨团队协作

image-20230428125655887

5.IDEA集成Git

5.1 配置Git忽略文件

  1. 为什么要忽略他们?

    因为他们与项目实际功能无关,不参与服务器上的部署运行。

创建忽略文件xxx.ignore(前缀民随便起,建议是git.ignore)

要忽略什么文件,就把什么文件写入里面

放在哪里都可以,为了方便~/.gitconfig文件引用,建议放在用户家目录下

# 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*
.classpath
.project
.settings
target
.idea
*.iml
  • 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

image-20230429111037860

5.2 在.gitconfg中引用忽略文件

此文件在用户家目录下

image-20230429111322353

[core]
	excludesfile=c:/users/用户名/忽略文件名
  • 1
  • 2

5.3 定位Git程序

  1. 打开idea的setting设置

  2. 找到Version Control中的Git

  3. 配置Git的安装程序(git.exe)

  4. 然后点击测试没问题就配置成功

    image-20230429112226358

5.4 初始化库

  1. 点击IDEA最上面一栏的VCS,按下图选择,创建本地库

    image-20230429112516884

  2. 本地库默认是在工程目录下的

  3. 初始化完成之后,可以发现工程中的文件都是红色的也就是git的未提交状态

5.5 添加暂存区、提交

  1. 找到爆红的文件,右键点击,选择Git,有一个add,文件就会添加到暂存区

    如果项目中的所有文件都允许添加,可以直接右键项目进行上面的操作(会提示包含忽略的文件,是否强制添加,点击no)

    image-20230429112832464

  2. 右键需要提交的项目/文件,点击Git,点击commit Direcotry

    image-20230429113453984

  3. 然后输入提交的版本名字即可

    image-20230429113610647

5.6 版本切换

  1. 找到IEAD左下角的Git

  2. 点击里面的Log(黄色的标签是当前的版本,绿色的是master版本

    image-20230429114529011

  3. 如果需要切换版本,只需要右键对应的版本,选择checkout

    image-20230429114625959

5.7 分支操作

5.7.1 创建分支
  1. 右键项目Git—》Repostory–》Branch

    image-20230429114904138

  2. 选择new Branch(或者点击IDEA右下角的版本号)

    image-20230429115055347

5.7.2 切换分支

点击右下角的分支,点击需要切换的分支,然后点击checkout即可

image-20230429120652837

5.7.3 合并分支
  • 正常合并

    修改一个分支,然后点击右下角的分支,选择哪个分支需要合并到当前的分支上,点击Merge

    image-20230429121138890

  • 冲突合并

    两个都修改了,再合并会弹出这个框

    image-20230429124036351

点击Merge手动对代码进行修改

image-20230429124337967

三、GitHub的使用

1.创建远程库

  1. 登录账号,点击下面的按钮

    image-20230428130323782

  2. 创建远程库

    image-20230428130704682

  3. 查看远程库的连接

    image-20230428130829099

  4. 本地创建远程库别名

    因为远程库的连接太长了,所以我们可以在本地创建别名,通过别名连接远程库

    1. 查看当前电脑配置的所有远程库别名

      git remote -v
      • 1
    2. 添加远程库别名

      git remote add 远程库别名 远程库链接
      • 1
    3. 查看是否配置成功

      git remote add 远程库别名 远程库链接
      • 1

2.代码推送

基本语法:git push 别名 分支名

  1. 切换到需要推送的分支

  2. 使用推送语法:git push 别名 分支名

    image-20230428133116338

  3. 推送成功界面image-20230428133204500

  4. 然后刷新浏览器,就可以看到代码

3.代码拉取

将本地库落后的代码和远程库新的代码同步,会自动提交本地库

基本语法:git pull 远程库名 需要拉取的分支

image-20230428133832302

4.代码克隆

不需要初始化本地库

不需要登录账号

基本语法:git clone 仓库地址

clone会做如下操作:

  1. 拉取代码
  2. 初始化本地仓库
  3. 创建别名(给拉取的远程仓库创建别名)

5.GitHub团队协作

5.1 团队内协作

  1. 浏览器登录github,然后进入仓库,选择settings

    image-20230428135757000

  2. 点击左侧的Collaborators

  3. 选择下面的Manage access,邀请伙伴

    image-20230428135922445

  4. 输入好友的名字,点击添加

    image-20230428140217668

  5. 添加成功的人就可以拉取、推送等操作

5.2 跨团队协作

  1. 找到另一个团队的仓库

  2. 点击右上角的fork(叉到自己的仓库)

    image-20230428140945008

  3. 然后自己的仓库中就有对应的代码了

  4. 然后进行修改

  5. 修改完成之后,点击**pull requests**

    image-20230428141351599

  6. 然后点击 new pull request

  7. 审核方在仓库中的pull request中就会看到记录

  8. 审核方点进去,可以点击**merge pull request**

6.SSH免密登录

  1. 进入本机的下面这个路径:C:\Users\用户名

  2. 使用git的bash命令框输入:

    ssh-keygen -t rsa -C 账号的邮箱
    • 1
  3. 按三次回车

  4. 然后进入.ssh文件夹,里面生成了两个文件:

    rsa结尾的是私钥,pub结尾的是公钥

  5. 使用cat命令,打开公钥文件,复制里面的内容

  6. 进入github,点击头像,选择settings

    image-20230428144123596

  7. 选择左侧的 SSH ,将复制的东西添加进去

    image-20230428144212052

    image-20230428144236100

  8. 然后使用pull测试拉取功能

    git pull ssh连接 分支

7.IDEA集成GitHub

7.1 设置GitHub账号(两种方式)

  • 账号密码登录方式
    1. 查看settings中Version Control是否有GitHub(如果没有自己再Plugins中下载)
    2. 点击右边的+号,输入账号密码,登录

image-20230429124640155

  • Token登录方式
  1. 点击Token登录

    image-20230429125317875

  2. 登录Github,点击头像找到Settings

  3. 进去之后,点击左下角的Developer settings

    image-20230429125738963

  4. 选择Person access tokens

    image-20230429125804859

  5. 给一个名字,权限全部拉满

    image-20230429130027360

  6. 点击创建之后,就会生成一个口令

    image-20230429130146427

  7. 复制到IDEA中即可

7.2 分享项目到GitHub

  1. 因为有GitHub插件,所以不需要我们手动创建远程库

  2. 点击VCS—》Impoet into Version Control–》share

    image-20230429130511099

  3. 会弹出一个框,第一个是远程库名(一般和项目名【也就是本地库名一样】),第二个是别名(一般和本地库名一样)

    image-20230429130718318

  4. 点击share即可

7.3 推送代码到远程库

代码修改了,需要推送到远程库,让本地库和远程库的版本一致

如果本地库和远程库的代码版本一致,push的操作会被拒绝

  1. 修改完代码之后,先提交本地库,然后点击IDEA最上面的VCS–》Git–》Push

    image-20230429131302422

  2. 里面默认的是https连接,很慢,所以推荐使用SSH连接

    先找到远程库,点击进去,点击code,复制远程库的SSH连接

    点击 库名,选择自定义一个

    image-20230429131705312

  3. 添加成功之后,就可以选用SSH

    image-20230429131740363

  4. 直接点至push即可

7.4 拉取远程库到本地

如果本地的代码版本落后于远程库的代码,一定要先pull拉取一下远程库代码 ,将本地库代码更新到最新版本,然后再修改

  1. 点击IDEA最上面的VCS–》Git–》Pull
  2. 选择拉取连接、需要合并的分支

7.5 克隆远程库到本地

  1. 打开IDEA的最开始界面

    image-20230429134434887

  2. 选择Get from Version Control

  3. 将项目的SSH链接复制进去

    image-20230429134706117

四、Gitee的使用

1.码云创建远程库

  1. 点击右上角+号,选择新建仓库

    image-20230429141203076

  2. 然后输入库名创建即可

  3. 使用码云的时候直接使用https即可

2.IDEA集成Gitee

2.1 登录账号

  1. 在plugins中下载gitee插件,然后重启

  2. 然后打开settings–》Version Control–》Gitee

  3. 使用邮箱登录账号

    image-20230429141651727

2.2 分享项目

跟GitHub一样,看图即可

image-20230429141852077

2.3 推送项目

前提是已经创建好一个库了

  1. 选择push

    image-20230429142035871

  2. 选择链接,如果没有需要自己创建(复制仓库的https链接)

    image-20230429142129254

    image-20230429142247630

2.4 拉取代码

当本地库中的代码版本落后于远程库的时候,可以拉取代码,把本地库的代码更新到最新版本

image-20230429143010765

2.5 克隆代码

克隆的方式和GitHub一样

3.Gitee导入GitHub项目

3.1导入GitHub项目

把码云的代码导入GitHub上

  1. 进入码云,点击右上角的+号,创建新仓库

  2. 进入页面,可以什么都不填,滑到最下方,点击导入已有仓库(最新版本是在最上面)

    image-20230429143754686

  3. 进入GitHub,复制仓库的Https链接(一定要是Https

  4. 然后直接点击创建按钮

    image-20230429144102075

3.2 更新Gitee项目

如果GitHub的项目跟新了,码云上的版本不会自动更新,需要手动更新

点击仓库的圈即可刷新

image-20230429144311101

五、GitLab的使用

是一个需要自己搭建的代码管理仓库

官网地址: GitLab

下载地址:Download and install GitLab

1.GitLab服务器的搭建和部署

1.1 服务器准备

需要一个系统为Centos7的服务器,保证能够上网

需要知道服务器的ip地址、主机名(/etc/hostname里面的)

需要关闭服务器防火墙

1.2 修改本机host文件

文件目录:C:\Windows\System32\drivers\etc\hosts

  1. 使用记事本打开host文件,在文件最后加上服务器的ip地址和服务器的hostname

    image-20230429151039559

1.3 提前下载离线安装包

下载好,使用xftp传过去,就可以离线安装

上传到服务器的/opt/module目录下

下载地址:https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm

1.4 编写脚本

  1. 在module目录下使用命令

    vim gitlab-install.sh
    • 1
  2. 将下面的内容粘贴进去,然后保存

    sudo rpm -ivh /opt/module/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm
    
    sudo yum install -y curl policycoreutils-python openssh-server cronie
    
    sudo lokkit -s http -s ssh
    
    sudo yum install -y postfix
    
    sudo service postfix start
    
    sudo chkconfig postfix on
    
    curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
    
    sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ce
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  3. 给文件加权限

    chmod +x gitlab-install.sh
    • 1
  4. 执行脚本

    ./gitlab-install.sh
    • 1

1.5 初始化GitLab服务

gitlab-ctl reconfigure
  • 1

1.6 启动GitLab服务

如果要关闭,使用stop命令

gitlab-ctl start
  • 1

1.7 访问GitLab

浏览器输入服务器的ip地址即可(或者浏览器输入服务器的主机名(前面已经配置过了))

  1. 修改root账号的代码

    image-20230429154755307

  2. 使用root和密码登录

  3. 然后点击创建项目等等

2.IDEA集成GitLab

2.1 安装GitLab插件

2.2 登录账号

输入gitlab的地址,然后协议选择HTTPS

image-20230429155224051

2.3 使用说明

  1. 使用方式和其他两个一样

  2. 但是注意:从网站获取仓库的https链接的时候,网站给的是一个例子的链接,需要我们手动改成实际的

    image-20230429155516234

六、Git在实际项目中的使用

方式1:公用一个仓库,但是使用不同分支

  1. 进到公司会给一个Gitee账号,告诉负责的项目

  2. 在本地的Git命令行中将项目clone下来

    git clone 项目地址
    • 1
  3. 然后查看clone下来的项目有哪些分支

    git branch
    • 1
  4. 然后通过命令创建并且切换到自己的分支

    git checkout -b 随便起一个分支名
    • 1
  5. 然后编写项目

  6. 写完之后查看是否有文件修改了

    git status
    • 1
  7. 如果有文件是红色的说明没有提交到暂存区

    git add .
    • 1
  8. 提交到暂存区之后提交到本地仓库

    git commit -m "修改的描述"
    • 1
  9. 先在远程仓库创建一个和我们使用的分支一个名字的分支(不然push不上去)

  10. 然后推送到响应的分支

    git push origin 远端分支名
    • 1
  11. 项目开发完了之后需要合并分支,因此需要先切换到主分支

    git checkout master
    • 1
  12. 然后我们pull以下master分支,防止master分支有更改

    git pull
    • 1
  13. 然后合并我们开发的分支

    git merge 我们的分支
    • 1
  14. 主分支合并完了之后就可以往线上push了

    git push
    • 1

方式2:把仓库fork到自己仓库下,然后开发合并

  1. 先把主仓库的项目fork到自己账号下面

  2. 将自己仓库中的项目clone下来

    git clone 项目地址
    • 1
  3. 然后就可以修改本地的代码

  4. 然后查看是否有修改但未提交的代码

    git status
    • 1
  5. 然后将修改提交到暂存区

    git add ,
    • 1
  6. 然后提交到本地仓库

    git commit -m "本次修改的描述"
    • 1
  7. 然后直接推送到自己的仓库(因为没有新建分支,所以直接push不用加分支)

    git push
    • 1
  8. 项目开发完了之后,我们自己的仓库需要和主仓库的代码合并,所以点击主仓库的pull request 申请合并

  9. 审核人员完成之后会由他们合并

特殊情况:提交的时候我的版本落后,提交不上去

  1. 我们提交之前,线上版本已经发生了改变,以至于我们自己的版本和线上仓库有版本差距,就会提交不上去

  2. 所以我们push之前只需要pull一下,然后处理一下代码冲突即可

    git pull
    • 1
  3. 然后再push到远程仓库

    git push
    • 1
 
文章已被收录至官方知识档案
CS入门技能树Git入门Git简介39537 人正在系统学习中

posted on 2024-04-05 21:09  嘻嘻a~  阅读(12)  评论(0编辑  收藏  举报