程序员的资源宝库

网站首页 > gitee 正文

Git、GitLab、 GitHub 、Gitee 的使用

sanyeah 2024-03-29 14:41:00 gitee 5 ℃ 0 评论

Git

Git 介绍

?     Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种
项目。(在公司里面就是管理代码的!)

?     Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作
流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。

Git保存的不是文件的变化或者差异,而是不同时刻的文件快照

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

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

2、为什么需要版本控制

? 答:个人开发过渡到团队协作 。

3、版本控制工具

  • 集中式版本控制工具

    CVS、SVN(Subversion)、VSS......

    	集中化的版本控制系统诸如 CVS、SVN 等,都有一个单一的集中管理的服务器,保存
    所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或
    者提交更新。多年以来,这已成为版本控制系统的标准做法。
    	这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什
    么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要
    远比在各个客户端上维护本地数据库来得轻松容易。
            
    	事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕
    机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
    
    image-20220425181550588
  • 分布式版本控制工具

    image-20220425181629981

    解决了 集中式版本控制工具的缺点

    	像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码
    仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用
    其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次
    对整个文件仓库的完整备份。
            
    分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
    // 1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
    // 2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
    
    
    

4、Git 简史

image-20220425183738238

5、工作机制

image-20220425190227305

用语:添加到暂存区、提交到本地库、push 到远程库。

6、Git 和 代码托管中心

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

代码托管中心 ---远程库

? 局域网
? GitLab
? 互联网
? GitHub(外网)
? Gitee 码云(国内网站)

Git 安装

官网地址: https://git-scm.com/
查看 GNU 协议,可以直接点击下一步。

next,next,next 一路默认就好了!

Finish 后, 右键,Git Bash 在 终端里输入git --version查看git版本,如图所示,说明 Git 安装成功。

Git 常用命令

基于开发案例,详细讲解 git 的常用命令

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

1、设置用户签名和邮箱

设置完后可以在 .gitconfig 中查看

语法:

git config --global user.name 用户名
git config --global user.email 邮箱

查看:

image-20220430135203395

说明:
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看
到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。

※注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任
何关系。


2、初始化本地库

语法:

? git init

操作 及 查看:

image-20220430141941843 image-20220430142003532

3、查看本地库状态

语法:

git status

操作:

image-20220430143017192

新增文件:hello.txt

image-20220430144707321 image-20220430144532839

就是添加 到暂存区


4、添加到暂存区

语法:

git add 文件名

操作:

image-20220430145845989

查看:

? 此时我们再来看,git 的状态,添加到暂存区,文件由红转绿,这时候是可以删掉的,删也只是从暂存区里面删了,工作区的还是好好的!

image-20220430150444312

5、提交到本地库

将暂存区的文件提交到本地库,形成自己的一个历史版本

基本语法:

git commit -m "日志信息" 文件名

image-20220430152227912

**create mode 100644 ** 是啥?

100代表regular file,644代表文件权限

6、查看历史

语法:

git reflog 查看版本信息
git log 查看版本详细信息

操作:

image-20220430153343274

7、修改文件(hello.txt)

  • 修改 hello.txt 之后,查看 git 状态(git status ),文件变红了,说明文件没有被追踪,(添加,提交)

? image-20220501143303816

  • 所以再来一次,(git add) 添加到暂存区,文件变绿,说明已经添加到暂存区

    image-20220501143435262
  • git commit) 文件绿色就可以提交到本地库,查看git 状态(git status) ,这时它就又干净了

    image-20220501143527785
  • 此时查看 历史记录

    image-20220501143641509


8、版本穿梭

语法:

git reset --hard 版本号

原理:

? 底层就是移动的 head 指针

image-20220501150509629
  • 先查看它的 历史记录,复制所需要的版本 (在这里演示的是第二次提交的版本)

    image-20220501150712839
  • 版本穿梭到第二个版本

    image-20220501150859000
  • 此时查看历史记录,发现指针已经指向 第二个版本了

    image-20220501150950838

具体的说就是在 .git 目录下,有个 HEAD 的文件

image-20220501151200426

指向了第三个版本,这里是我又转到了第三个版本

image-20220501151336550

Git 分支

1、概述和优点

image-20220501151925175

?

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

image-20220501153013074

分支的好处:

(1)同时并行推进多个功能开发,提高开发效率

(2)各个分支在开发过程中,如果某一个分支开发失败,不会对其它分支有任何影响,失败的分支删除,重新开始即可。


2、分支操作

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

语法:

git branch -v

操作:

image-20220501154902969

(2)创建分支

语法:

git branch 分支名

操作:

比如说,我要给我的代码创建一个热修分支

image-20220501155303502
(3) 切换分支&修改分支

master 分支 作为用户用的,所以我们在 master 分支上,引出了其它分支(快照,走向了不同的路径)

切换分支语法:git checkout hot-fix

  • OK,切换一下分支(hot-fix

    image-20220501162146828
  • 在 hot-fix 分支上,修改一下代码

    image-20220501163718629
  • 追踪 hello.txt

    add

    image-20220501163806402

    commit

    image-20220501163834437
  • 查看历史记录

    image-20220501163928732
(4)合并分支
1、正常合并

正常合并:master 没有修改,hot-fix 在 master 基础之上增加了两行东西,和 master 并不冲突。

注意:】如果想把 hot-fix 分支 合并在 master 分支上,必须站在 master 分支上合并。

image-20220501164721996

结果:

image-20220501164753612
2、冲突合并

什么是冲突合并?

?     合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替
我们决定使用哪一个。必须人为决定新代码内容。

演示一下冲突合并!

  1. 刚才正常合并了 hot-fix ,所以此时 hot-fix 和 master 两个分支内容是一样的,所以在 master 上首先修改。

    合并分支】只会修改主动合并的分支,不会修改要合并的分支。很容易理解!

hello.txt 倒数第二行,添加 master test

? image-20220501172633423

  1. 切到 hot-fix 分支上,在 hello.txt 最后一行添加,hot-fix test

    image-20220501172753224
  2. 切回 master 分支,合并 hot-fix 分支

    image-20220501173238324 image-20220501173501552

解决冲突

  1. 查看 git 状态

    image-20220501174032744

    自动合并,代码冲突了,需要我们自己手动合并。OK ! 打开 hello.txt

    image-20220501173931133
  2. 手动,把想要的留下,不想要的去掉!

    image-20220501174746311

  3. 添加到暂存区,提交到本地库,形成历史版本注意】这里不能带文件名,否则会报错

    image-20220501175502505
  4. 再次查看

    image-20220501175530372

? 【最后注意:合并分支只会修改主动合并的分支,不会修改要合并的分支。

master、hot-fix 其实都是指向具体版本记录的指针。

当前所在的分支,其实是由 HEAD 决定的。所以创建分支的本质就是多创建一个指针。
HEAD 如果指向 master,那么我们现在就在 master 分支上。
HEAD 如果执行 hotfix,那么我们现在就在 hotfix 分支上。


3、Git 团队协作机制

1、团队内协作
image-20220501182124141
2、跨团队协作

image-20220501184413112


GitHub

GitHub 操作

1、创建远程库 & 创建别名

  • 创建远程库

    略~ 登录 GitHub ---> new repository

  • 创建别名

    git remote -v 作用:查看当前所有远程地址别名

    git remote add 别名 远程地址

    例子:git remote add git-demo https://github.com/w-y-k/git-demo.git

    image-20220502210730251

2、推送本地库到远程库 push

语法:git push 别名 分支

实例:

推送

image-20220502212043763

成功:

image-20220502212720766

3、拉取远程库到本地库 pull

语法:

git pull 别名 分支名

实例:

git pull git-demo master

image-20220502213308993

此时我们查看 git 状态

image-20220502213403574

工作树是干净的,说明 pull 这个动作是会自动,提交本地库的!

查看代码:发现已经拉取下了(本地库和远程库的代码已经同步了

image-20220502213508164

4、克隆远程库到本地 clone

clone 代码是不需要登录账号的 !

语法:git clone 项目地址

实例:

git clone https://github.com/w-y-k/git-demo.git

总结:clone 会做如下操作。 1、拉取代码 2、初始化本地库 3、创建别名


团队内协作

团队成员必须加入到 GitHub 项目团队里面去,才能进行 pull ,push 操作。

项目管理员,添加团队成员

image-20220503120142594

image-20220503120205536

复制一下邀请函(其实也是一个连接地址),然后通过 钉钉,微信,发送给团队成员。

    团队成员,在自己的GitHub 里面的地址栏,复制管理员发来的邀请函。

image-20220503120538926

然后就出现了,邀请函!接受,就称为项目团队的一员!可以,push 代码了。

image-20220503120620437

跨团队协作

另一个团队先要根据,本团队发来的链接,点击fork 叉 到 他 的远程库

image-20220503160300528

image-20220503160333814

另一个团队,修改代码,之后,发送一个 Pull request ,

image-20220503145951223

本团队,刷新之后, Pull request 会出现一个请求,

image-20220503145918888

本团队审核通过之后,可以

image-20220503150204001

GitHub_SSH 免密登录

ssh-keygen:生成 ssh 免密登录的协议

-t :指定哪种加密算法来生成

rsa: 著名的非对象加密协议

-C:描述

运行命令生成 .ssh 公钥秘钥目录

? 全: ssh-keygen -t rsa -C wykwork2022@163.com

复制公钥,然后在GitHub settings 中添加SSH 公钥。

如下:

【注意】这里没有.ssh 目录,连敲三次回车

image-20220503152105290

image-20220503152302464

测试 ssh 代码拉取,和推送

拉取:

image-20220503153900896 image-20220503153930014

ssh push 操作

image-20220503154134997

IDEA 集成 Git

1、环境准备

配置 Git 忽略文件

image-20220503154903657

maven 项目的 target 目录

问题 1: 为什么要忽略它们?

? 答:与项目实际功能无关,不参与服务器上的部署运行,消除 IDE 之间的差别。

问题 2:怎么忽略?

(1)配置一个文件(忽略文件) xxx.ignore (前缀不重要,随便起,建议是 git.ignore)

这个文件存放位置,原则上哪里都可以,但是为了便于让 ~/.gitconfig 文件引用,建议也放在用户家目录下。

git.ignore文件模板如下

Compiled class file
.class

定位 Git 程序

image-20220503162637087

2、初始化 & 添加 & 提交

用 idea 初始化本地库

image-20220503163220832

next

image-20220503163356937

image-20220503164004698

说明 这个项目被 Git 接管了!

添加 add 到暂存区

image-20220503165013811

都变绿了!

image-20220503165054801

提交 commit 到本地库

image-20220503165122843

变白了,说明已经提交到本地库!

image-20220503165220997

3、切换版本

蓝色的文件表示,这个文件被追踪过,但是被修改了,没有add,和 commit 。

image-20220503165746439

那们我们添加暂存区,提交本地库,(在 idea 里面,这个文件已经被追踪了,所以可以直接提交,不用添加暂存区了!)

查看版本:

image-20220503170819242

切换会 first 版本 ,发现代码发生了变化

image-20220503170851843

4、创建分支 & 切换分支

法1:

image-20220503172859895

法2:

image-20220503172915026 image-20220503173039829

也可以在这里切换分支

image-20220503173154927

5、合并分支

正常合并

image-20220503173746962

合并成功!

image-20220503173914348

冲突合并

在同一位置,有两套不同的代码修改,由我们手动选择,需要的代码,或者说去掉哪些代码。

idea 非常的智能,如下!

image-20220503175701659

手动合并成功!

image-20220503175757099

IDEA 集成 GitHub

1、设置 GitHub 账号

idea 使用 GitHub 要先登录 GitHub 的账号 ,用 账号密码登录非常慢,可能登录 100来次成功一次! 如下

image-20220507195113411

所以我们使用 Token 登录!

【注意】在 GitHub 中生成Token ,注意只能生成一次,刷新网页就找不到了,如果下次再用忘了的话只能重新申请了!

image-20220507195613692

image-20220507195559478

2、分享项目到 GitHub

不用在 GitHub 创建远程库,直接从idea 中把项目分享到 GitHub 上。

image-20220507200655877

next

image-20220507200838274

3、推送代码到远程库

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

image-20220507205803592

image-20220507205832028

image-20220507205840801

4、拉取远程库代码合并到本地库

image-20220507204425828

image-20220507204439682

5、克隆代码到本地

image-20220507210118283

image-20220507210135759

Gitee 码云

创建远程库

和 GitHub 是一样的。

IDEA 集成 Gitee

  1. 先在 idea 装一下 Gitee 插件,然后重启一下 idea。

  2. 在 Gitee 中添加自己的Gitee 账号。

导入 GitHub 项目

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

码云提供了直接复制 GitHub 项目的功能,方便我们做项目的迁移和下载。
具体操作如下:

image-20220508000612009

image-20220508000624112

image-20220508000639113

如果 GitHub 项目更新了以后,在码云项目端可以手动重新同步,进行更新!

image-20220508000703809

image-20220508000755249

局域网代码托管平台-GitLab

1、简介和安装环境准备

简介:

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

? GitLab 由乌克兰程序员 DmitriyZaporozhets 和 ValerySizov 开发,它使用 Ruby 语言写
成。后来,一些部分用 Go 语言重写。截止 2018 年 5 月,该公司约有 290 名团队成员,以
及 2000 多名开源贡献者。GitLab 被 IBM,Sony,JülichResearchCenter,NASA,Alibaba,
Invincea,O’ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX 等组织使用。

GitLab 官网地址

官网地址:https://about.gitlab.com/
安装说明:https://about.gitlab.com/installation/

2、安装 & 初始化服务 & 启动服务

服务器准备
    准备一个系统为 CentOS7 以上版本的服务器,要求内存 4G,磁盘 50G。
    关闭防火墙,并且配置好主机名和 IP,保证服务器可以上网。
    此教程使用虚拟机:主机名:gitlab-server IP 地址:192.168.6.200
安装包准备
Yum 在线安装 gitlab- ce 时,需要下载几百 M 的安装文件,非常耗时,所以最好提前把
所需 RPM 包下载到本地,然后使用离线 rpm 的方式安装。
下载地址:
    https://packages.gitlab.com/gitlab/gitlab-
    ce/packages/el/7/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm
注:资料里提供了此 rpm 包,直接将此包上传到服务器/opt/module 目录下即可。

3、登录 GitLab 并创建远程库

4、IDEA 集成 GitHub

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表