Git 使用详解

文章目录

  • Git使用
  • 前言
  • 1 概述
    • 1.1 版本控制的方式
    • 1.2 Git
    • 1.3 Git工作流程
  • 2 Git安装与常用命令
    • 2.1 Git安装配置
  • 3 Git常用命令
    • 3.1 设置用户签名
    • 3.2 初始化本地仓库
    • 3.3 status查看本地库状态
      • 3.3.1 首次查看(工作区没有任何文件)
      • 3.3.2 新增文件(hello.txt)
      • 3.3.3 再次查看(检测到未追踪的文件)
    • 3.4 add 添加暂存区
      • 3.4.1 将工作区的文件添加到暂存区
      • 3.4.2 查看状态(检测到暂存区有新文件)
    • 3.5 commit 提交本地库
      • 3.5.1 将暂存区的文件提交到本地库
      • 3.5.2 查看状态(没有文件需要提交)
      • 3.5.3 log 查看提交日志
    • 3.6 修改文件(hello.txt)
      • 3.6.1 查看状态(检测到工作区有文件被修改)
      • 3.6.2 将修改的文件再次添加暂存区
      • 3.6.3 查看状态(工作区的修改添加到了暂存区)
    • 3.7 历史版本
      • 3.7.1 查看历史版本
      • 3.7.2 版本穿梭
    • 3.8 添加文件至忽略列表
  • 4 Git 分支操作
    • 4.1 什么是分支
    • 4.2 分支的操作
      • 4.2.1 查看本地分支
      • 4.2.2 创建本地分支
      • 4.2.3 修改本地分支
      • 4.2.4 切换分支
      • 4.2.5 合并分支
      • 4.2.6 产生冲突
      • 4.2.7 解决冲突
      • 4.2.8 删除分支
    • 4.3 开发中分支使用原则与流程
  • 5 Git远程仓库
    • 5.1 常用的托管服务
    • 5.2 远程仓库操作
      • 5.2.1 创建远程仓库别名
      • 5.2.2 push 推送本地分支到远程仓库
      • 5.2.3 clone 克隆远程仓库到本地
      • 5.2.4 邀请加入团队
      • 5.2.5 从远程仓库中抓取fetch和拉取 pull
      • 5.2.6 解决合并冲突
    • 5.3 SSH 免密登录
  • 6 IDEA中的Git使用
    • 6.1 配置 Git 忽略文件
    • 6.2 在IDEA配置Git程序
    • 6.3 IDEA初始化本地库
    • 6.4 添加到暂存区
    • 6.5 提交到本地库
    • 6.6 切换版本
    • 6.7 创建分支
    • 6.8 切换分支
    • 6.9 合并分支
    • 6.10 合并分支冲突
  • 7 IDEA集成Github
    • 7.1 设置 GitHub 账号
    • 7.2 分享项目到Github
    • 7.3 push 推送本地库到远程库
    • 7.4 pull 拉取远程库到本地库
    • 7.5 clone克隆远程库到本地库
  • 8 IDEA集成Gitee
    • 8.1 码云创建远程库
    • 8.2 IDEA安装码云插件
    • 8.3 push 推送到码云远程库
    • 8.4 pull 拉取远程库到本地库
    • 8.5 clone克隆远程库到本地库
    • 8.6 码云复制Github项目
  • 9 自建代码托管平台-GitLab
    • 9.1 GitLab 简介
      • GitLab官网地址
    • 9.2 GitLab 安装
      • 9.2.1 GitLab安装准备
      • 9.2.2 编写安装脚本
      • 9.2.3 初始化GitLab服务
      • 9.2.4 启动GitLab服务
      • 9.2.5 使用浏览器访问 GitLab
      • 9.2.6 创建远程库
    • 9.3 IDEA 集成 GitLab

Git使用

前言

一般来说,团队合作开发的话,每个人都需要在自己的功能分支 feat/XXX 上开发,最后一起合并到总的开发分支 dev 上,然后将开发分支 dev 合并到测试分支上,最后将测试分支合并到正式发布分支上。

其中总的开发分支一般叫做 dev 分支,正式发布分支一般是叫 main/master/release 分支。

Git 使用详解_第1张图片

比如说有 A、B、C 三个人协助进行功能开发:

  1. 首先 A、B、C 三位小伙伴从总开发分支 Dev 上开辟自己的功能分支,分别是 feat/AXXX、feat/BXXX、feat/CXXX,也就是图中 feat/AXXX、feat/BXXX、feat/CXXX 的三条线;
  2. 然后在自己的开发机上进行开发,这里的开发机可以是本地环境也可以是一些云端的开发机。开发完毕后,再分别合到总开发分支 dev 上,也就是图中蓝色的三条线,在这个过程中可能会产生一些代码冲突,挨个 solve 即可;
  3. 接着在 dev 分支上确认所有功能开发完毕,进行简单自测,fix 一些 bug 后再向测试分支上进行合并;
  4. 这个时候就可以艾特测试组的同学来进行测试,测试通过后再合到 master 分支进行发布。
    一般来说,基本的流程就是这样的,不同公司或许其中流程有些出入,不过问题不大,大致方向是如此的。

1 概述

何为版本控制?

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

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

方便版本切换。

1.1 版本控制的方式

  • 集中式版本控制工具: 集中式版本控制工具,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代码,是必须联网才能工作,局域网或互联网。个人修改后然后提交到中央版本库。
    • 举例:SVN和CVS

Git 使用详解_第2张图片

  • 分布式版本控制工具: 分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,无需要联网了,因为版本库就在你自己的电脑上。多人协作只需要各自的修改推送给对方,就能互相看到对方的修改了。
    • 举例:Git、Mercurial、Bazaar、Darcs

Git 使用详解_第3张图片

分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:

  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)

  2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

1.2 Git

Git是分布式的,Git不需要有中心服务器,我们每台电脑拥有的东西都是一样的。我们使用Git并且有个中心服务器,仅仅是为了方便交换大家的修改,但是这个服务器的地位和我们每个人的PC是一样的。我们可以把它当做一个开发者的pc就可以就是为了大家代码容易交流不关机用的。没有它大家一样可以工作,只不过“交换”修改不方便而已。

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 Git是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众多的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002 年间)。到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代 码。

到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:

  • 速度
  • 简单的设计
  • 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
  • 完全分布式
  • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

Git 使用详解_第4张图片

1.3 Git工作流程

Git 使用详解_第5张图片

命令如下:

  1. clone(克隆): 从远程仓库中克隆代码到本地仓库
  2. checkout (检出):从本地仓库中检出一个仓库分支然后进行修订
  3. add(添加): 在提交前先将代码提交到暂存区
  4. commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. fetch (抓取) : 从远程库抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
  6. pull (拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch+merge
  7. push(推送) : 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

2 Git安装与常用命令

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

安装包:https://wwz.lanzoul.com/ind1B02y9r6j 密码:3gbz

2.1 Git安装配置

  1. 查看 GNU 协议,可以直接点击下一步。

Git 使用详解_第6张图片

  1. 选择 Git 安装位置,要求是非中文并且没有空格的目录,然后下一步。

Git 使用详解_第7张图片

  1. Git 选项配置,推荐默认设置,然后下一步。

Git 使用详解_第8张图片

  1. Git 安装目录名,不用修改,直接点击下一步。

Git 使用详解_第9张图片

  1. Git 的默认编辑器,建议使用默认的 Vim 编辑器,然后点击下一步。

Git 使用详解_第10张图片

  1. 默认分支名设置,选择让 Git 决定,分支名默认为 master,下一步。

Git 使用详解_第11张图片

  1. 修改 Git 的环境变量,选第一个,不修改环境变量,只在 Git Bash 里使用 Git。

Git 使用详解_第12张图片

  1. 选择后台客户端连接协议,选默认值 OpenSSL,然后下一步。

Git 使用详解_第13张图片

  1. 配置 Git 文件的行末换行符,Windows 使用 CRLF,Linux 使用 LF,选择第一个自动转换,然后继续下一步。

Git 使用详解_第14张图片

  1. 选择 Git 终端类型,选择默认的 Git Bash 终端,然后继续下一步。

Git 使用详解_第15张图片

  1. 选择 Git pull 合并的模式,选择默认,然后下一步。

Git 使用详解_第16张图片

  1. 选择 Git 的凭据管理器,选择默认的跨平台的凭据管理器,然后下一步。

Git 使用详解_第17张图片

  1. 其他配置,选择默认设置,然后下一步。

Git 使用详解_第18张图片

  1. 实验室功能,技术还不成熟,有已知的 bug,不要勾选,然后点击右下角的 Install按钮,开始安装 Git。

Git 使用详解_第19张图片

  1. 点击 Finsh 按钮,Git 安装成功!

Git 使用详解_第20张图片

右键任意位置,在右键菜单里选择 Git Bash Here 即可打开 Git Bash 命令行终端。

Git 使用详解_第21张图片

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

3 Git常用命令

3.1 设置用户签名

  • 设置用户信息
git config --global user.name "XXX" # 设置用户名
git config --global user.email "XXXX" # 设置邮箱
  • 查看配置信息
git config --global user.name
git config --global user.email
  • 修改配置文件
git config --global user.name "test(新的用户名)"
git config --global user.email "[email protected](新的邮箱)"
git config --global user.password "123456(新的密码)"

说明

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

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

3.2 初始化本地仓库

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

  1. 在电脑的任意位置创建一个空目录(例如test)作为我们的本地Git仓库
  2. 进入这个目录中,点击右键打开Git bash窗口
  3. 执行命令git init
  4. 如果创建成功后可在文件夹下看到隐藏的.git目录

基本语法

git init

案例实操

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720
$ git init #执行命令
Initialized empty Git repository in D:/Git-Space/SH0720/.git/
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ ll -a
total 4
drwxr-xr-x 1 Layne 197609 0 11 月 25 14:07 ./
drwxr-xr-x 1 Layne 197609 0 11 月 25 14:07 ../
drwxr-xr-x 1 Layne 197609 0 11 月 25 14:07 .git/ (.git 初始化的效果,生成 git)

Git 使用详解_第22张图片

3.3 status查看本地库状态

Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。

Git 使用详解_第23张图片

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

基本语法

git status

案例实操

3.3.1 首次查看(工作区没有任何文件)

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)

3.3.2 新增文件(hello.txt)

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ vim hello.txt #执行命令,按i插入
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!

3.3.3 再次查看(检测到未追踪的文件)

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status  #执行命令
On branch master
No commits yet
Untracked files:
 (use "git add ..." to include in what will be committed)
 hello.txt
nothing added to commit but untracked files present (use "git add" 
to track)

3.4 add 添加暂存区

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

基本语法

git add 文件名  # 添加单个文件
git add . # 将所有修改加入暂存区

git ls-files #查看暂存区文件

案例实操

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git add hello.txt #执行命令
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working 
directory.

3.4.2 查看状态(检测到暂存区有新文件)

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status  #执行命令
On branch master
No commits yet
Changes to be committed:
 (use "git rm --cached ..." to unstage)
 new file: hello.txt

3.5 commit 提交本地库

3.5.1 将暂存区的文件提交到本地库

基本语法

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

案例实操

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git commit -m "my first commit" hello.txt  #执行命令
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working 
directory.
[master (root-commit) 86366fa] my first commit
1 file changed, 16 insertions(+)
create mode 100644 hello.txt

3.5.2 查看状态(没有文件需要提交)

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status   #执行命令
On branch master
nothing to commit, working tree clean

3.5.3 log 查看提交日志

命令形式:git log [option]

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

3.6 修改文件(hello.txt)

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ vim hello.txt  #执行命令,a追加
hello git!22222222
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!

3.6.1 查看状态(检测到工作区有文件被修改)

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status  #执行命令
On branch master
Changes not staged for commit:
 (use "git add ..." to update what will be committed)
 (use "git checkout -- ..." to discard changes in working directory)
 modified: hello.txt
no changes added to commit (use "git add" and/or "git commit -a")

3.6.2 将修改的文件再次添加暂存区

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git add hello.txt   #执行命令
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working 
directory.

3.6.3 查看状态(工作区的修改添加到了暂存区)

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status #执行命令
On branch master
Changes to be committed:
 (use "git reset HEAD ..." to unstage)
 modified: hello.txt

3.7 历史版本

3.7.1 查看历史版本

基本语法

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

案例实操

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reflog #执行命令,86366fa,ca8ded6等就是版本号
087a1a7 (HEAD -> master) HEAD@{0}: commit: my third commit
ca8ded6 HEAD@{1}: commit: my second commit
86366fa HEAD@{2}: commit (initial): my first commit

3.7.2 版本穿梭

基本语法

git reset --hard 版本号 #版本号可以使用 git-log 或 git log 指令查看

案例实操

--首先查看当前的历史记录,可以看到当前是在 087a1a7 这个版本
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reflog #查看版本号
087a1a7 (HEAD -> master) HEAD@{0}: commit: my third commit
ca8ded6 HEAD@{1}: commit: my second commit
86366fa HEAD@{2}: commit (initial): my first commit

--切换到 86366fa 版本,也就是我们第一次提交的版本
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reset --hard 86366fa #版本回退
HEAD is now at 86366fa my first commit

--切换完毕之后再查看历史记录,当前成功切换到了 86366fa 版本
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reflog #查看版本号
86366fa (HEAD -> master) HEAD@{0}: reset: moving to 86366fa
087a1a7 HEAD@{1}: commit: my third commit
ca8ded6 HEAD@{2}: commit: my second commit
86366fa (HEAD -> master) HEAD@{3}: commit (initial): my first commit

--然后查看文件 hello.txt,发现文件内容已经变化
$ cat hello.txt
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!

Git 切换版本,底层其实是移动的 HEAD 指针,具体原理如下图所示。

Git 使用详解_第24张图片

3.8 添加文件至忽略列表

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

创建Git 的.gitignore

touch .gitignore

新建文件file02.txt,加入.gitignore中

touch file02.html  #创建文件

vim .gitignore # 添加内容: file02.html
# 也可以使用通配符,例如
file02.html
*.txt
*.iml


git add . #添加到暂存区
git commit -m'first commit' #提交本地库

配置文件示例

# 忽略 .a 文件
*.a

# 但否定忽略 lib.a, 尽管已经在前面忽略了 .a 文件
!lib.a

# 仅在当前目录下忽略 TODO 文件, 但不包括子目录下的 subdir/TODO
/TODO

# 忽略 build/ 文件夹下的所有文件,包括子目录下的subdir/build文件夹中的文件
build/

# 忽略 doc/notes.txt, 不包括 doc/server/arch.txt
doc/*.txt

# 忽略所有的 .pdf 文件 在 doc/ directory 下的
doc/**/*.pdf

4 Git 分支操作

4.1 什么是分支

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

4.2 分支的操作

4.2.1 查看本地分支

git branch 
git branch -v #显示详细信息

案例实操

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git branch -v #执行命令
* master 087a1a7 my third commit (*代表当前所在的分区)

4.2.2 创建本地分支

基本语法

git branch 分支名

案例实操

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git branch hot-fix #执行命令
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)

$ git branch -v #查看分支
hot-fix 087a1a7 my third commit (刚创建的新的分支,并将主分支 master的内容复制了一份)
* master 087a1a7 my third commit

4.2.3 修改本地分支

--在 maste 分支上做修改
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ vim hello.txt #执行命令

--添加暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git add hello.txt #执行命令

--提交本地库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git commit -m "my forth commit" hello.txt #执行命令
[master f363b4c] my forth commit
1 file changed, 1 insertion(+), 1 deletion(-)

--查看分支
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git branch -v #执行命令
 hot-fix 087a1a7 my third commit (hot-fix 分支并未做任何改变)
* master f363b4c my forth commit (当前 master 分支已更新为最新一次提交的版本)

--查看 master 分支上的文件内容
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ cat hello.txt #执行命令
hello git!123456
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!

4.2.4 切换分支

基本语法

git checkout 分支名
git checkout -b 分支名 #还可以直接切换到一个不存在的分支(创建并切换)

案例实操

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git checkout hot-fix  #执行命令
Switched to branch 'hot-fix'

--发现当先分支已由 master 改为 hot-fix
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)

--查看 hot-fix 分支上的文件内容发现与 master 分支上的内容不同
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ cat hello.txt #执行命令
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!

--在 hot-fix 分支上做修改
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ cat hello.txt #执行命令
hello git! hot-fix
hello git! 333333333
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!

--添加暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ git add hello.txt #执行命令

--提交本地库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ git commit -m "hot-fix commit" hello.txt #执行命令

4.2.5 合并分支

基本语法

git merge 要合并分支名  #一个分支上的提交可以合并到另一个分支,需要切换为master合并

案例实操 在 master 分支上合并 hot-fix 分支

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git merge hot-fix #执行命令,需要切换为master
Auto-merging hello.txt 
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.

4.2.6 产生冲突

冲突产生的表现:后面状态为 MERGING

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master|MERGING)

$ cat hello.txt #执行命令
<<<<<<< HEAD
hello git!123456
=======
hello git! hot-fix
>>>>>>> hot-fix
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!

冲突产生的原因:

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

查看状态(检测到有文件有两处修改)

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master|MERGING)
$ git status #执行命令
On branch master
You have unmerged paths.
 (fix conflicts and run "git commit")
 (use "git merge --abort" to abort the merge)
Unmerged paths:
 (use "git add ..." to mark resolution)
 both modified: hello.txt
no changes added to commit (use "git add" and/or "git commit -a")

4.2.7 解决冲突

解决冲突步骤如下:

  1. 处理文件中冲突的地方
  2. 将解决完冲突的文件加入暂存区(add)
  3. 提交到仓库(commit)

编辑有冲突的文件,删除特殊符号,决定要使用的内容

特殊符号:<<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> hot-fix

$ vim hello.txt #执行命令,手动解决冲突
<<<<<<< HEAD  #删掉
hello git!123456
=======  #删掉
hello git! hot-fix
>>>>>>> hot-fix #删掉
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!

解决完冲突后的文件

$ cat hello.txt #执行命令,手动解决冲突
hello git!123456
hello git! hot-fix
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!
hello git!

--添加到暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master|MERGING)
$ git add hello.txt #执行命令


--执行提交(注意:此时使用 git commit 命令时不能带文件名)
$ git commit -m "merge hot-fix"
[master 69ff88d] merge hot-fix

--发现后面 MERGING 消失,变为正常
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)

4.2.8 删除分支

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

git branch -d 分支名 # 删除分支时,需要做各种检查

git branch -D 分支名 # 不做任何检查,强制删除

--撤销分支
git reset --soft HEAD^ #仅仅撤销上一次提交,不回滚代码修改。
--mixed 
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。


--soft  
不删除工作空间改动代码,撤销commit,不撤销git add . 
 
--hard
删除工作空间改动代码,撤销commit,撤销git add . 

注意完成这个操作后,就恢复到了上一次的commit状态。

git commit --amend  修改注释内容

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

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

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

  • master (生产) 分支: 线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;

  • develop(开发)分支: 是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。

  • feature/xxxx分支: 从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支,之后该分支可以删除。

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

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

Git 使用详解_第25张图片

5 Git远程仓库

5.1 常用的托管服务

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

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

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

  • GitLab (地址: https://about.gitlab.com/ )是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务,一般用于在企业、学校等内部网络搭建git私服。

5.2 远程仓库操作

点击右上角加号,选择New repository

Git 使用详解_第26张图片

输入仓库名,创建仓库

Git 使用详解_第27张图片

5.2.1 创建远程仓库别名

基本语法

git remote -v #查看当前所有远程地址别名
git remote add <别名> <仓库地址>

案例实操

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git remote -v  #执行命令
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git remote add ori https://github.com/atguiguyueyue/git-shTest.git #执行命令,这里要写自己的地址
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git remote -v #执行命令
ori   https://github.com/atguiguyueyue/git-shTest.git (fetch)
ori   https://github.com/atguiguyueyue/git-shTest.git (push)

https://github.com/atguiguyueyue/git-shTest.git

这个地址在创建完远程仓库后生成的连接,如图所示红框中

Git 使用详解_第28张图片

5.2.2 push 推送本地分支到远程仓库

基本语法

git push <别名or远端名称> <本地分支名>

--详细语法
git push [-f] [--set-upstream] [远端名称] [本地分支名][:远端分支名]
如果远程分支名和本地分支名称相同,则可以只写本地分支
	例:git push origin master
-f 表示强制覆盖
--set-upstream 推送到远端的同时并且建立起和远端分支的关联关系。
	例:git push --set-upstream origin master
如果当前分支已经和远端分支关联,则可以省略分支名和远端名。
	例:git push 将master分支推送到已关联的远端分支。

案例实操

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git push  ori master #执行命令
Logon failed, use ctrl+c to cancel basic credential prompt.
Username for 'https://github.com': atguiguyueyue
Counting objects: 3, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 276 bytes | 276.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/atguiguyueyue/git-shTest.git
* [new branch]
master -> master

报错:Username for 'https://github.com'

输入的是github上的邮箱账号, 而不是github中设置的username, 这是个巨坑!!!
Password for 'https://你的github邮箱@github.com:

输入github的登录密码,点击enter键即可.

此时发现已将我们 master 分支上的内容推送到 GitHub 创建的远程仓库。

Git 使用详解_第29张图片

5.2.3 clone 克隆远程仓库到本地

基本语法

git clone <仓库路径> [本地目录]
本地目录可以省略,会自动生成一个目录

案例实操

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong
$ git clone https://github.com/atguiguyueyue/git-shTest.git #执行命令
Cloning into 'git-shTest'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.

https://github.com/atguiguyueyue/git-shTest.git

这个地址为远程仓库地址,克隆结果:初始化本地仓库

Git 使用详解_第30张图片

--创建远程仓库别名
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest
(master)
$ git remote -v 
origin https://github.com/atguiguyueyue/git-shTest.git (fetch)
origin https://github.com/atguiguyueyue/git-shTest.git (push)

5.2.4 邀请加入团队

  1. 选择邀请合作者

Git 使用详解_第31张图片

  1. 填入想要合作的人

Git 使用详解_第32张图片

  1. 复 制 地 址 并 通 过 微 信 钉 钉 等 方 式 发 送 给 该 用 户 , 复 制 内 容 如 下 :

https://github.com/atguiguyueyue/git-shTest/invitations

在这里插入图片描述

  1. atguigulinghuchong 这个账号中的地址栏复制收到邀请的链接,点击接受邀请。

    Git 使用详解_第33张图片

  2. 成功之后可以在 atguigulinghuchong 这个账号上看到 git-Test 的远程仓库。

    Git 使用详解_第34张图片

  3. 令狐冲可以修改内容并 push 到远程仓库

--编辑 clone下来的文件
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest (master)
$ vim hello.txt
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest (master)
$ cat hello.txt
hello git! hello atguigu! 2222222222222
hello git! hello atguigu! 33333333333333
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu! 我是最帅的,比岳不群还帅
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu! master test
hello git! hello atguigu! hot-fix test
--将编辑好的文件添加到暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest (master)

$ git add hello.txt
--将暂存区的文件上传到本地库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest (master)
$ git commit -m "lhc commit" hello.txt
[master 5dabe6b] lhc commit
1 file changed, 1 insertion(+), 1 deletion(-)

--将本地库的内容 push到远程仓库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest (master)
$ git push origin master
Logon failed, use ctrl+c to cancel basic credential prompt.
Username for 'https://github.com': atguigulinghuchong
Counting objects: 3, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 309 bytes | 309.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/atguiguyueyue/git-shTest.git
7cb4d02..5dabe6b master -> master
  1. 回到 atguiguyueyueGitHub 远程仓库中可以看到,最后一次是 lhc 提交的。

Git 使用详解_第35张图片

Git 使用详解_第36张图片

5.2.5 从远程仓库中抓取fetch和拉取 pull

基本语法

git fetch [remote name] [branch name] #抓取命令
抓取指令就是将仓库里的更新都抓取到本地,不会进行合并
如果不指定远端名称和分支名,则抓取所有分支。

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


案例实操

--将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git pull ori master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/atguiguyueyue/git-shTest
* branch  master  -> FETCH_HEAD
7cb4d02..5dabe6b master  -> ori/master
Updating 7cb4d02..5dabe6b
Fast-forward
hello.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ cat hello.txt
hello git! hello atguigu! 2222222222222
hello git! hello atguigu! 33333333333333
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu! 我是最帅的,比岳不群还帅
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu! master test
hello git! hello atguigu! hot-fix test

5.2.6 解决合并冲突

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

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

Git 使用详解_第37张图片

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

远程分支也是分支,所以合并时冲突的解决方式也和解决本地分支冲突相同相同,在此不再赘述。

5.3 SSH 免密登录

我们可以看到远程仓库中还有一个 SSH 的地址,因此我们也可以使用 SSH 进行访问。

Git 使用详解_第38张图片

具体操作如下:

--进入当前用户的家目录
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ cd

--删除.ssh 目录
Layne@LAPTOP-Layne MINGW64 ~
$ rm -rvf .ssh
removed '.ssh/known_hosts'
removed directory '.ssh'

--运行命令生成.ssh 秘钥目录[注意:这里-C 这个参数是大写的 C]
Layne@LAPTOP-Layne MINGW64 ~
$ ssh-keygen -t rsa -C [email protected]
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Layne/.ssh/id_rsa):
Created directory '/c/Users/Layne/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Layne/.ssh/id_rsa.
Your public key has been saved in /c/Users/Layne/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:7CPfRLITKcYDhaqpEDeok7Atvwh2reRmpxxOC6dkY44 
[email protected]
The key's randomart image is:
+---[RSA 2048]----+
| .. |
| .. |
| . .. |
|+ + o . . |
|oO . = S . |
|X . .. + = |
|+@ * .. = . |
|X.&o+. o = |
|Eo+Oo . . |
+----[SHA256]-----+

--进入.ssh 目录查看文件列表
Layne@LAPTOP-Layne MINGW64 ~
$ cd .ssh
Layne@LAPTOP-Layne MINGW64 ~/.ssh
$ ll -a
total 21
drwxr-xr-x 1 Layne 197609 0 11 月 25 19:27 ./
drwxr-xr-x 1 Layne 197609 0 11 月 25 19:27 ../ -rw-r--r-- 1 Layne 197609 1679 11 月 25 19:27 id_rsa
-rw-r--r-- 1 Layne 197609 406 11 月 25 19:27 id_rsa.pub

--查看 id_rsa.pub 文件内容
Layne@LAPTOP-Layne MINGW64 ~/.ssh
$ cat id_rsa.pub
ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABAQDRXRsk9Ohtg1AXLltsuNRAGBsx3ypE1O1Rkdzpm
l1woa6y6G62lZri3XtCH0F7GQvnMvQtPISJFXXWo+jFHZmqYQa/6kOIMv2sszcoj2Qtwl
lGXTPn/4T2h/cHjSHfc+ks8OYP7OWOOefpOCbYY/7DWYrl89k7nQlfd+A1FV/vQmcsa1L
P5ihqjpjms2CoUUen8kZHbjwHBAHQHWRE+Vc371MG/dwINvCi8n7ibI86o2k0dW0+8SL+
svPV/Y0G9m+RAqgec8b9U6DcSSAMH5uq4UWfnAcUNagb/aJQLytrH0pLa8nMv3XdSGNNo
AGBFeW2+K81XrmkP27FrLI6lDef [email protected]

复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPG keys

Git 使用详解_第39张图片

Git 使用详解_第40张图片

Git 使用详解_第41张图片

接下来再往远程仓库 push 东西的时候使用 SSH 连接就不需要登录了。

6 IDEA中的Git使用

6.1 配置 Git 忽略文件

  1. 在用户家(C/User/用户名) 下创建 git.ignore
# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (
.mtj.

# 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 文件中引用忽略配置文件(此文件在 Windows 的家目录中)

[user]
    name = admin
    email = [email protected]
[core]
	excludesfile = C:/Users/admin/git.ignore
#注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”

6.2 在IDEA配置Git程序

在菜单栏File->Setting->搜索栏搜Git,配置Git的安装路径。

Git 使用详解_第42张图片

6.3 IDEA初始化本地库

在当前项目下初始化

Git 使用详解_第43张图片

在其他项目初始化本地库,在菜单栏VCS -> Import into Version Control -> Create Git Repository

Git 使用详解_第44张图片

选择要创建 Git 本地仓库的工程

Git 使用详解_第45张图片

6.4 添加到暂存区

创建一个类,将其添加Git暂存区。

右键点击类,选择Git->Add也可以右键点击项目,更大范围地添加文件到暂存区。

Git 使用详解_第46张图片

添加成功后,文件名会从红色变成绿色。

Git 使用详解_第47张图片

6.5 提交到本地库

右键点击项目或文件,选择Git->Commit Directory

Git 使用详解_第48张图片

添加注释后提交:

Git 使用详解_第49张图片

添加成功后,后台打印相关信息。文件颜色也会变为正常

Git 使用详解_第50张图片

6.6 切换版本

在 IDEA 的左下角,点击 Git,然后点击 Log 查看版本

Git 使用详解_第51张图片

右键选择要切换的版本,然后在菜单里点击 Checkout Revision。就切换到之前的版本。

Git 使用详解_第52张图片

6.7 创建分支

右键点击项目,Git -> Branches,或者点击IDEA的右下角,如图红圈所示部位:

Git 使用详解_第53张图片

在弹出的Git Branches框里 点击 New Branch按钮。

Git 使用详解_第54张图片

填写分支名称

Git 使用详解_第55张图片

然后再 IDEA的右下角看到 hot-fix,说明分支创建成功,并且当前已经切换成 hot-fix分支

Git 使用详解_第56张图片

6.8 切换分支

在IDEA窗口的右下角,切换到 master分支 。

创建分支步骤相似,如点击IDEA的右下角(它显示项目正处在那条分支),如图红圈所示部位,选择你想要切换的分支,然后checkout:

Git 使用详解_第57张图片

然后在 IDEA 窗口的右下角看到了 master,说明 master 分支切换成功。

Git 使用详解_第58张图片

6.9 合并分支

点击IDEA 窗口的右下角的master,将 hot-fix 分支合并到当前 master 分支。选择hot-fix->Merge into Current

Git 使用详解_第59张图片

如果代码没有冲突, 分支直接合并成功,分支合并成功以后,代码自动提交,无需手动提交本地库。

Git 使用详解_第60张图片

6.10 合并分支冲突

如图所示,如果master分支和 hot-fix分支都修改了代码,在合并分支的时候就会发生冲突。

Git 使用详解_第61张图片

Git 使用详解_第62张图片

切换到master分支,将hot-fix的合并到master分支,就会发生代码冲突。点击Smart Checkout

Git 使用详解_第63张图片

解决代码冲突

Git 使用详解_第64张图片

手动合并完代码以后,点击右下角的 Apply按钮。代码冲突解决,自动提交本地库。

7 IDEA集成Github

7.1 设置 GitHub 账号

在菜单栏File->Setting->Version Control,添加GitHub账号:

Git 使用详解_第65张图片

在 Github 点击 Settings -> Develop Settings

Git 使用详解_第66张图片

Git 使用详解_第67张图片

Git 使用详解_第68张图片

Git 使用详解_第69张图片

点击 Generate token

Git 使用详解_第70张图片

将生成的token用来IDEA登录。

Git 使用详解_第71张图片

7.2 分享项目到Github

Git 使用详解_第72张图片

这其实就是创建远程库,名字,是否私有,描述等

Git 使用详解_第73张图片

7.3 push 推送本地库到远程库

右键点击项目,Git->Push 可以将当前分支的内容 push 到 GitHub的远程仓库中 。

Git 使用详解_第74张图片

Git 使用详解_第75张图片

Git 使用详解_第76张图片

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

7.4 pull 拉取远程库到本地库

右键点击项目,可以将远程仓库的内容 pull 到本地仓库。

Git 使用详解_第77张图片

Git 使用详解_第78张图片

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

7.5 clone克隆远程库到本地库

Git 使用详解_第79张图片

输入地址

Git 使用详解_第80张图片

8 IDEA集成Gitee

众所周知, GitHub 服务器在国外, 使用 GitHub 作为项目托管网站,如果网速不好的话,严重影响使用体验,甚至会出现登录不上的情况。针对这个情况, 大家也可以使用国内的项目托管网站-码云。

码云是开源中国推出的基于 Git 的代码托管服务中心, 网址是 https://gitee.com/ ,使用方式跟 GitHub 一样,而且它还是一个中文网站,如果你英文不是很好,它是最好的选择。

8.1 码云创建远程库

点击首页右上角的加号,选择下面的新建仓库

Git 使用详解_第81张图片

填写仓库名称,路径和选择是否开源(共开库或私有库)

Git 使用详解_第82张图片

最后根据需求选择分支模型,然后点击创建按钮。

Git 使用详解_第83张图片

远程库创建好以后,就可以看到 HTTPS 和 SSH 的链接。

Git 使用详解_第84张图片

8.2 IDEA安装码云插件

Idea 默认不带码云插件,我们第一步要安装 Gitee插件。

在菜单栏选File->Settings->Plugins,搜Gitee。

Git 使用详解_第85张图片

安装完成重启 IDEA 即可

然后在码云插件里面添加码云帐号,我们就可以用 Idea 连接码云了。

Git 使用详解_第86张图片

8.3 push 推送到码云远程库

Idea 连接码云和连接 GitHub 几乎一样,首先在 Idea 里面创建一个工程,初始化 git 工程,然后将代码添加到暂存区,提交到本地库,这些步骤上面已经讲过,此处不再赘述。

Git 使用详解_第87张图片

自定义远程库链接: Define remote,给远程库链接定义个 name,然后再 URL里面填入码云远程库的 HTTPS链接即可,码云服务器在国内,用 HTTPS 链接即可,没必要用 SSH 免密链接

Git 使用详解_第88张图片

8.4 pull 拉取远程库到本地库

我们在远程库修改代码,然后使用本地库 pull 拉取远程库的代码

Git 使用详解_第89张图片

Git 使用详解_第90张图片

8.5 clone克隆远程库到本地库

Git 使用详解_第91张图片

Git 使用详解_第92张图片

8.6 码云复制Github项目

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

Git 使用详解_第93张图片

将 GitHub的远程库 HTTPS链接复制过来,点击创建按钮即可。

Git 使用详解_第94张图片

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

Git 使用详解_第95张图片

9 自建代码托管平台-GitLab

9.1 GitLab 简介

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

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/

9.2 GitLab 安装

9.2.1 GitLab安装准备

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

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

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

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

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

9.2.2 编写安装脚本

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

[root@gitlab-server module]# vim gitlab-install.sh
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/gitlabce/script.rpm.sh | sudo bash
sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlabce

给脚本增加执行权限

[root@gitlab-server module]# chmod +x gitlab-install.sh
[root@gitlab-server module]# ll
总用量 403104
-rw-r--r--. 1 root root 412774002 4 月 7 15:47 gitlab-ce-13.10.2-
ce.0.el7.x86_64.rpm
-rwxr-xr-x. 1 root root 416 4 月 7 15:49 gitlab-install.sh

然后执行该脚本,开始安装 gitlab-ce。注意一定要保证服务器可以上网。

[root@gitlab-server module]# ./gitlab-install.sh
警告: /opt/module/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm: 头 V4
RSA/SHA1 Signature, 密钥 ID f27eab47: NOKEY
准备中... #################################
[100%]
正在升级/安装...
1:gitlab-ce-13.10.2-ce.0.el7
################################# [100%]

9.2.3 初始化GitLab服务

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

[root@gitlab-server module]# gitlab-ctl reconfigure
。 。 。 。 。 。
Running handlers:
Running handlers complete
Chef Client finished, 425/608 resources updated in 03 minutes 08
seconds
gitlab Reconfigured!

9.2.4 启动GitLab服务

执行以下命令启动 GitLab 服务,如需停止,执行 gitlab-ctl stop

[root@gitlab-server module]# gitlab-ctl start
ok: run: alertmanager: (pid 6812) 134s
ok: run: gitaly: (pid 6740) 135s
ok: run: gitlab-monitor: (pid 6765) 135s
ok: run: gitlab-workhorse: (pid 6722) 136s
ok: run: logrotate: (pid 5994) 197s
ok: run: nginx: (pid 5930) 203s
ok: run: node-exporter: (pid 6234) 185s
ok: run: postgres-exporter: (pid 6834) 133s
ok: run: postgresql: (pid 5456) 257s
ok: run: prometheus: (pid 6777) 134s
ok: run: redis: (pid 5327) 263s
ok: run: redis-exporter: (pid 6391) 173s
ok: run: sidekiq: (pid 5797) 215s
ok: run: unicorn: (pid 5728) 221s

9.2.5 使用浏览器访问 GitLab

使用主机名或者 IP 地址即可访问 GitLab 服务。需要提前配一下 windows 的 hosts 文件。

C:\Windows\System32\drivers\etc

Git 使用详解_第96张图片

Git 使用详解_第97张图片

首次登陆之前,需要修改下 GitLab 提供的 root 账户的密码,要求 8 位以上,包含大小写子母和特殊符号。因此我们修改密码为 Abc.123456

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

Git 使用详解_第98张图片

GitLab 登录成功。

Git 使用详解_第99张图片

9.2.6 创建远程库

Git 使用详解_第100张图片

Git 使用详解_第101张图片

Git 使用详解_第102张图片

9.3 IDEA 集成 GitLab

安装 GitLab 插件

Git 使用详解_第103张图片

设置 GitLab 插件

Git 使用详解_第104张图片

Git 使用详解_第105张图片

Git 使用详解_第106张图片

push 本地代码到 GitLab 远程库

Git 使用详解_第107张图片

自定义远程连接

Git 使用详解_第108张图片

Git 使用详解_第109张图片

注意:gitlab 网页上复制过来的连接是:http://gitlab.example.com/root/git-test.git,

需要手动修改为:http://gitlab-server/root/git-test.git

选择 gitlab 远程连接,进行 push。

Git 使用详解_第110张图片

首次向连接 gitlab,需要登录帐号和密码,用 root 帐号和我们修改的密码登录即可。

接下来插件配置,Git操作等与Github、Gitee的IDEA插件大同小异。

Git 使用详解_第111张图片

代码 Push 成功。

Git 使用详解_第112张图片

只要 GitLab 的远程库连接定义好以后,对 GitLab 远程库进行 pull 和 clone 的操作和

Github 和码云一致,此处不再赘述。

你可能感兴趣的:(Linux,git,github,gitlab,idea集成git,gitee)