Git使用笔记

1.Git简介

1.1Git概述

Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目

1.1.1版本控制

版本控制工具可以分为两类

  • 集中式版本控制工具:如SVN

集中式版本控制工具都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。缺点是:当服务器宕机后,不能进行提交和协同操作

  • 分布式版本控制工具:如Git

分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份

1.1.2Git工作机制

  • 工作区(代码存放的本地磁盘位置):写代码

  • 暂存区:临时存储 git add,将工作区代码添加到暂存区

  • 本地库:历史版本 git commit,将暂存区提交到本地库,会生成历史版本,删不掉了

1.2Git安装

官网地址:https://git-scm.com/

直接在官网安装,无脑下载即可

右键-git bash:打开命令行,即可输入命令使用,Git里面Linux命令是通用的,可以尽情使用Linux进行文件操作

1.3Git命令

常用命令:

命令名称作用
git config --global user.name 用户名设置用户签名
git config --global user.email 邮箱设置用户签名,可以设置虚拟邮箱
git init初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit -m “日志信息” 文件名提交到本地库
git reflog查看历史记录
git reset --hard 版本号版本穿梭

1.3.1设置用户签名

基本语法:

  • 【git config --global user.name 用户名】
    • 示例:git config --global user.name 陈丹
  • 【git config --global user.email 邮箱】
    • 示例:git config --global user.email chen.dan37@byd.com,邮箱可使用虚拟的,git不会去验证
  • 设置完成后可在【C盘-用户-.gitconfig】文件中看到配置

签名的作用是区分不同操作者身份,用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交者

注意:Git首次安装必须设置一下用户签名,否则无法提交代码。这里设置用户签名和将来登录GitHub(或其他代码托管中心)的账号没有任何关系

1.3.2初始化本地库

基本语法:

  • 【git init】

进入需要管理的目录下,右键-git bash执行上述命令,则会在该目录下生成.git目录,即初始化成功,可被git管理

1.3.3查看本地库状态

基本语法:

  • 【git status】

可使用git status查看状态,下图显示存在有"src/test/"文件未被追踪(即只存在于工作区,未添加到本地库),可通过git add进行追踪
在这里插入图片描述

1.3.4添加暂存区

将工作区的文件添加到暂存区

基本语法:

  • 【git add 文件名】
    • 如git add hello.txt,将hello.txt文件添加到暂存区

操作演示:可查看到新增了一个文件,但此时文件是存放到暂存区的,还可以删除
在这里插入图片描述

【git add】将文件从工作区放到暂存区,可被删除,使用命令

  • 【git restore --staged 文件名】:将文件从暂存区撤销到工作区
    • 示例:git restore --staged hello.txt
  • 【git rm --caches 文件名】:删除暂存区文件
  • 以上两个命令都可以实现删除暂存区文件,但此时磁盘文件还在,又变成未被追踪状态
    在这里插入图片描述

1.3.5提交本地库

将暂存区的文件提交到本地库,提交后会形成历史版本,无法删除,除非删掉本地库,否则永久可查

基本语法:

  • 【git commit -m “日志信息” 文件名】
    • 示例:git commit -m “first commit首次提交” hello.txt

文件修改:

  • 文件修改后,仍然使用【git add 文件名】的命令来将修改的文件再次添加暂存区,然后再通过【git commit】命令来提交到本地库

1.3.6查看历史版本

基本语法:

  • 【git reflog】:查看版本信息
    在这里插入图片描述

  • 【git log】:查看版本详细信息,包括提交用户签名、完整版本号等
    在这里插入图片描述

1.3.7版本穿梭

基本语法:

  • 【git reset --hard 版本号】:可以通过版本号回到以前的版本,可先用【git reflog】获取版本号,再用此命令穿梭到想要的版本

Git切换版本,底层其实是移动的HEAD指针,通过版本穿梭可以改变指针指向

1.4Git分支

1.4.1分支介绍

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。分支可以简单理解成副本,一个分支就是一个单独的副本。(分支底层其实也是指针的作用)

好处:

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

1.4.2分支的操作

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

命令:【git branch -v】,如下可查看到有master和dev两个分支

在这里插入图片描述

1.4.2.2切换分支

命令:【git checkout 分支名】,如下已经切换到dev分支
在这里插入图片描述

1.4.2.3合并分支

命令:【git merge 分支名】

合并时可能出现两种情况,正常合并和冲突合并:

  • 正常合并:当前分支无修改,合并分支有修改,合并后当前分支内容修改为合并分支的内容

  • 冲突合并

    • 冲突原因:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git无法决定我们使用哪一个。必须人为决定新代码内容
    • 合并时发生冲突后,打开文件手动修改文件内容,确定最终保存版本,并将多余的符号去掉
      • <<<<<<HEAD:表示当前分支下修改的代码
      • ==========:当前分支与合并分支代码之间的分隔符
      • 》》》》》:合并分支的修改代码
    • 上述修改后,再重新进行合并:
      • 在当前分支下重新【git add 文件名】添加到暂存区,
      • 然后再【git commit -m " "】提交到本地库,注意提交到本地库的时候不要加文件名,否则会报错

以上合并分支,只会修改当前的分支内容,不会修改被合并的分支内容

master、dev其实都是指向具体版本记录的指针。当前所在的分支,其实是由HEAD决定的,所以创建分支的本质就是多创建一个指针

  • HEAD如果指向master,那么我们现在就在master分支上
  • HEAD如果指向dev,那么我们现在就在dev分支上

所以切换分支的本质就是移动HEAD指针

1.5Git团队协作机制

Git团队写作机制分为两种:

  • 团队内协作:团队成员使用同一个远程库,c成员clone到本地库后进行push、pull操作
  • 跨团队协作:每一个团队一个远程库,通过fork来复制远程库,各团队在本地库进行push、pull操作,如果要更新远程库,则需要发送pull request申请,经远程库审核通过后,merge合并代

1.6IDEA集成Git

1.6.1环境准备

1.6.1.1Git配置忽略文件

配置忽略文件:将项目中其他非必要代码忽略,不需要Git进行管理,如.idea、target文件等。这些文件与项目的实际功能无关,不参与服务器上部署运行,把它们忽略掉能够屏蔽IDE工具之间的差异

配置步骤:

  1. 创建忽略规则文件xxxx.ignore(前缀名可以随便取,建议git.ignore)。这个文件的存放位置原则上哪里都行,但是为了便于让~/.gitconfig文件引用,建议也放在系统用户目录下

  2. git.ignore文件模板内容如下

    #编译文件
    .class
    #日志文件
    .log
    #BlueJ文件
    .ctxt
    #Mobile Tools for Java(J2ME)
    .mtj.tmp/
    #包文件
    .jar
    .war
    .nar
    .ear
    .zip
    .tar.gz
    .rar
    
    .classpath
    .project
    .settings
    target
    .idea
    *.iml
    
  3. 在.gitconfig文件中引用忽略配置文件(此文件在Windows的系统用户目录下)

    • [user]
      	name = chendan
      	email = chen.dan37@byd.com
      	
      [core]
      	excludesfile = C:/Users/chendan/git.ignore
      #注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”
      
1.6.1.2定位Git程序

在IDEA里面要定位到git,需要打开IDEA-File-Settings-Version Control-Git,然后配置Git安装目录
在这里插入图片描述

以上,IDEA中的Git环境则配置完成了

1.6.2初始化&添加&提交

打开IDEA,在上端面板里面点击VCS-Create Git Repository,再选择当前项目,即当前项目可在IDEA中被Git管理,项目目录下生成.git目录,

在这里插入图片描述

上述Git管理后,项目中的文件则会变红,表示被Git追踪到,未添加暂存区

添加暂存区:右键-Git-Add,选中文件会变绿,表示加入到暂存区,但是还未提交到本地库

提交本地库:右键-Git-Commit,会看到暂存区里面的文件,写提交信息,然后commit,提交成功后,文件颜色会变成正常的黑色,表示已经提交到本地库

1.6.3切换版本

蓝色文件:表示被追踪过,但是有修改

  • 可以重新添加暂存区,再提交本地库
  • 但是因为已经追踪过,也可以直接提交本地库,不用再添加到暂存区

重新提交后会生成新版本,这时如何切换版本,在IDEA左下角Git中可以查看到不同版本信息,通过右键-checkout Revison '版本号’即可切换版本
在这里插入图片描述

1.6.4创建&切换分支

选择Git,在下拉框选择Create New Branch,弹出框里面填写分支名称

分支切换:右键点击checkout选项
在这里插入图片描述

1.6.5合并分支

在IDEA窗口的右下角,将dev分支合并到master分支中,右键-Merge into,如果代码没有冲突,分支直接合并成功,分支合并成功之后,代码自动提交,无需手动提交本地库
在这里插入图片描述

冲突合并:

master里面的hello.java修改、commit

dev里面的hello.java也修改,commit

然后进行合并,会弹出conflicts冲突框,然后就需要进行手动合并【左边是master代码,中间是确定合并的代码,右边是dev代码】,可以将中间框代码进行修改合并,修改完成后Apply,即合并成功,并自动提交了本地库

2.GitHub

GitHub网址:https://github.com/

2.1常用命令

远程仓库操作:

命令名称作用
git remote -v查看当前所有远程地址别名
git remote add 别名 远程地址起别名
git push 别名 分支推送本地分支上的内容到远程仓库
git pull 远程库地址别名 远程分支名将远程仓库对于分支最新内容拉取下来后与当前本地分支直接合并
git clone 远程地址将远程仓库的内容克隆到本地

clone克隆时不需要登录账号,直接用远程链接clone即可。clone后会做如下操作:

  1. 拉取代码
  2. 初始化本地仓库,本地目录会出现.git
  3. 创建别名,默认origin

2.2SSH免密登录

远程仓库Code Clone下面有http链接,还有SSH地址,我们也可以使用SSH进行访问,但是需要添加SSH key

具体操作如下:

  1. 进入系统当前用户目录,右键打开Git Bash命令行界面
  2. 运行命令生成.ssh密钥目录【注意:这里-C这个参数是大写C】
    • 命令:【ssh-keygen -t rsa -C chen.dan37@byd.com】
      • ssh-keygen:生成免密登录协议
      • -t:指定用哪种算法来生成
      • rsa:著名的非对称加密协议
      • -C:一个描述,当前针对chen.dan37@byd.com邮箱进行免密登录
    • 运行上述命令后敲三次回车键
  3. 命令运行完成后,可在系统用户文件夹里面看到生成了.ssh文件夹,里面存放了id_rsa私钥和id_rsa.pub公钥
  4. 命令行进入.ssh目录里面,使用【cat id_rsa.pub】查看公钥内容
  5. 复制上面公钥的内容到GitHub里面,点开setting–SSH and GPG keys,添加SSH key,将公钥内容粘贴到里面,添加成功后就可以用【git pull SSH链接】来拉取代码
    在这里插入图片描述

2.6IDEA集成GitHub

打开【IDEA-File-Settings-Version Control-GitHub】,IDEA默认包含GitHub这个插件的,如果在Version Control里面没找到,则在Plugins里面下载GitHub插件

  1. 设置GitHub账号:

    使用Token登录,在【GitHub登录-Settings-Developer settings-Personal access token,在这里生成一个口令,出现一些选框进行权限设置,全部选满就行,然后生成口令,生成后找个txt文件保存起来,不然刷新就没有了,只显示一次。拿到口令后,到IDEA填入口令框,即创建好账号
    在这里插入图片描述

  2. 分享项目到GitHub

    【VCS-Import into Version Control-Share Project on GitHub】,不用在GitHub创建远程库,可以直接在IDEA中分享过去

    在这里插入图片描述
    在这里插入图片描述

  3. push代码到远程库

    git-push,默认push本地库中的commit,但是默认是使用https,https跟网络有关,很有可能push不成功,所以我们建议用SSH,在GitHub中复制SSH地址,然后在commit的时候右键自定义一个远程连接,将SSH地址填入URL,然后选中这个地址push即可

    也可以在Git-Manage Remotes里面添加地址

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

  4. pull远程库代码

    git-pull

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

  5. clone克隆远程库代码到本地

    VCS-Get from Version Control

    在这里插入图片描述

3.Gitee码云

GitHub服务器在国外,使用GitHub作为项目托管网站,如果网速不好,严重影响使用体验,可能登录不上。因此,可以选择使用国内的项目托管网站-码云

码云是开源中国推出的基于Git的代码托管中心,使用方式跟GitHub一样,中文网站

官网:https://gitee.com/

3.1码云创建远程库

在登录界面里面:+新建仓库,填写仓库信息进行创建

因为码云是国内网站,所以https的访问链接是推荐的,同样也可以使用SSH免密登录,配置方法和GitHub一致

3.2IDEA集成Gitee码云

IDEA默认不带码云插件,首先要安装Gitee插件,在Plugins里面搜索安装,安装成功后在Verison Control里面就可以看到Gitee,即可添加Gitee账号

在这里插入图片描述

【很奇怪,我云桌面上没有安装Gitee插件和登录Gitee账号也可以使用,不知道为啥,安装Gitee后登录不上】
在这里插入图片描述

3.3码云连接GitHub进行代码的复制和迁移

在码云上面:+新建仓库,不用填仓库信息,界面拉到最下方有“导入已有仓库”,支持填入GitHub地址进行GitHub项目导入【注意:这里只能选择GitHub的https链接】,然后点击“创建”即可

如果需要更新Gitee上导入的GitHub代码,在项目名称旁边有一个更新按钮,点击后会强制同步GitHub上面的最新代码到Gitee中,感觉比较类似fork子仓库里面强制同步主远程仓库的代码

4.GitLab

GitLab是使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的web服务

官网地址:https://about.gitlab.com/

安装说明:https://about.gitlab.com/installation/

4.1GitLab服务器的搭建和部署

4.1.1服务器准备

准备一个系统为CentOS7以上版本的服务器,要求内存4G,磁盘50G

关闭防火墙,并且配置好主机名和IP,保证服务器可以上网

教程使用虚拟机:主机名:gitlab-server IP地址:192.168.6.200

4.1.2安装包准备

Yum在线安装gitlab-ce时,需要下载几百M的安装文件,非常耗时,所以最好提前把所需RPM包下载到本地,然后使用离线rpm的方式安装

下载地址:

https://package.gitlab.com/gitlab/gitlab-ce/packages/el/gitlab-ce-13.10.2-ce.0.ce17.x86_64.rpm

注:资料里提供了此rpm包,直接将此包上传到服务器/opt/module目录下即可

4.1.3编写安装脚本

安装gitlab步骤比较繁琐,因此我们可以参考官网编写gitlab的安装脚本

【vim gitlab-install.sh】,脚本编写完成后,wq保存

sudo rpm -ivh /opt/module/gitlab-ce-13.10.2-ce.0.ce17.x86_64.rpm

sudo yum install -y curl policycoreutiles-python openssh-server cronie

sudo lokkit -s http -s ssh

sudo yum install -y postfix

sudo service postfix start

sudo chkcontig postfix on

curl https://package.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

sudo EXTERANL_URL=*http://gitlab.example.com* yum -y install gitlab-ce

给脚本增加执行权限,输入下述命令后,再使用ll查看到脚本变绿,即可执行

chmod +x gitlab-install.sh

然后执行该脚本,开始安装gitlab-ce。注意一定要保证服务器可以上网,里面用到了yum安装,必须联网

./gitlab-install.sh

4.1.4GitLab服务初始化及启动

执行以下命令初始化GitLab服务,过程大概需要几分钟,耐心等待

gitlab-ctl reconfigure

执行以下命令启动GitLab服务

gitlab-ctl start
如需停止,执行gitlab-ctl stop

使用浏览器访问GitLab:使用主机名或者IP地址即可访问GitLab服务

在浏览器直接输入192.168.6.200访问,端口号默认80,这里是不用输入的

使用主机名访问:gitlab-server,需要提前配一下windoes的hosts文件

4.1.5GitLab登录

在浏览器登录GitLab

首次登录之前,需要修改下GitLab提供的root账户的密码,要求8位以上,包含大小写字母和特殊符号

然后使用修改后的密码登录GitLab

账号:root

密码:修改后的密码

然后即可开始创建远程库,创建过程与GitHub差不多,根据GitLab界面提示进行创建即可

4.2IDEA集成GitLab

首先,也是要安装GitLab插件,在Plugins里面下载,Apply后即可在Verison Control里面看到GitLab

添加GitLab连接

l reconfigure


执行以下命令启动GitLab服务

gitlab-ctl start
如需停止,执行gitlab-ctl stop


使用浏览器访问GitLab:使用主机名或者IP地址即可访问GitLab服务

在浏览器直接输入192.168.6.200访问,端口号默认80,这里是不用输入的

使用主机名访问:gitlab-server,需要提前配一下windoes的hosts文件

### 4.1.5GitLab登录

在浏览器登录GitLab

首次登录之前,需要修改下GitLab提供的root账户的密码,要求8位以上,包含大小写字母和特殊符号

然后使用修改后的密码登录GitLab

账号:root

密码:修改后的密码

然后即可开始创建远程库,创建过程与GitHub差不多,根据GitLab界面提示进行创建即可

## 4.2IDEA集成GitLab

首先,也是要安装GitLab插件,在Plugins里面下载,Apply后即可在Verison Control里面看到GitLab

添加GitLab连接

只要GitLab的远程库连接定义好以后,对GitLab远程库进行pull和clone的操作和GitHub以及码云一致,不再赘述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值