Git是一个免费的,开源的分布式版本控制系统,可以快速高效地处理从小型或大型的各种项目。Git易于学习,占用空间小,性能快得惊人。
Git软件比Subversion、CVS、Perforce和ClearCase等SCM(Software Configuration Management软件配置管理)工具具有性价比更高的本地分支、方便的暂存区域和多个工作
Git是一个免费的,开源的分布式版本控制软件系统,学习Git软件的具体操作前,我们需要对一些基础的概念和名词进行解释
一般情况下,一份文件,无论是DOC办公文档,还是编程源码文件,我们都会对文件进行大量的修改和变更。但是我们无法保证每一次的修改和变更都是正确并有效的,往往有的时候需要追溯历史操作,而版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。
在Git中,每个版本库都是一样重要得。所以就不存在像集中式版本控制软件中以谁为主得问题。任何一个库都可以当成主库。
这种方式可以更大限度地保证项目资源得安全。
一般软件系统指的是可以独立运行的软件应用程序。而Git软件就是专门用于对代码文件进行版本控制得应用程序。同时也提供客户端对系统所管理得资源进行访问。
**代码托管中心:**也叫远程仓库,如:GitLab、GitHub、Gitee。通过push提交到远程仓库
**存储区域:**Git软件用于存储资源得区域。一般指得就是.git文件夹(提交后就会存在一个历史版本)
**工作区域:**Git软件对外提供资源得区域,此区域可人工对资源进行处理。(指存放在磁盘中的目录,也就是你存放代码的位置)
**暂存区域:**Git用于比对存储区域和工作区域得区域。Git根据对比得结果,可以对不同状态得文件执行操作。(将工作区的代码添加到暂存区,是一个临时存储,是不会存在提交的历史版本)
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
软件官网地址为:https://git-scm.com/
软件下载地址为:
https://github.com/git-for-windows/git/releases/download/v2.42.0.windows.2/Git-2.42.0.2-64-bit.exe
Git软件安装的步骤虽然比较多,但是整个安装过程还是比较简单的,双击exe执行文件,按照引导界面的提示安装即可
默认安装在c盘中。(建议安装到没有中文和空格的目录下,如:D:\develop\codeManage\Git)
默认即可,点击Next下一步
配置编辑器工具,这里选择自己习惯的编辑工具即可。(我这里选了Vim做为默认编辑器),点击Next下一步
默认即可,也可以选择第二个自定义,点击Next下一步
第一种是仅从 Git Bash 使用 Git。这个的意思就是你只能通过 Git 安装后的 Git Bash 来使用 Git ,其他的什么命令提示符啊等第三方软件都不行。
第二种是从命令行以及第三方软件进行 Git。这个就是在第一种基础上进行第三方支持,你将能够从 Git Bash,命令提示符(cmd) 和 Windows PowerShell 以及可以从 Windows 系统环境变量中寻找 Git 的任何第三方软件中使用 Git。推荐使用这个。
第三种是从命令提示符使用 Git 和可选的 Unix 工具。选择这种将覆盖 Windows 工具,如 “ find 和 sort ”。只有在了解其含义后才使用此选项。一句话,适合比较懂的人折腾。
默认即可,点击Next下一步
默认即可,点击Next下一步
默认即可,点击Next下一步
配置终端模拟器以与 Git Bash 一起使用,默认即可,点击Next下一步
MinTTY 具有可调整大小的窗口和其他有用的可配置选项,可以通过右键单击的工具栏来打开它们 git-bash。
选择默认的 “git pull” 行为,点击Next下一步
可以记录登录行为,默认即可,点击Next下一步
默认即可,点击Next下一步
不建议开启,可能存在一些bug,默认即可,点击Next下一步
右键即可查看是否安装成功, 开始菜单可查看相关功能
Git软件是免费、开源的。最初Git软件是为辅助 Linux 内核开发的一套软件,所以在使用时,简单常用的linux系统操作指令是可以直接使用的
指令 | 含义 | 说明 |
---|---|---|
cd 目录 | change directory | 改变操作目录 |
cd … | 退回到上一级目录 | |
pwd | Print work directory | 打印工作目录 |
ls | list directory contents | 显示当前目录的文件及子文件目录 |
ll | ls -l 简化版本 | 更详细地显示当前目录的文件及子文件目录 |
mkdir 文件夹名称 | make directory | 新建一个文件夹 |
rm 文件 | remove | 删除文件 |
rm -r 文件夹 | Remove | 删除文件目录 |
touch 文件 | 如果创建的文件不存在,那么创建一个空文件 | |
reset | 清屏 | |
clear | 清屏 | |
exit | 退出终端窗口 |
命令名称 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户签名 |
git config --global user.email 邮箱 | 设置用户email地址 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m “日志信息” 文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
git config --global user.name test #有户名
git config --global user.email [email protected]
这里的–global表示全局配置,后续的所有文件操作都会使用该用户名称及邮箱。此时在操作系统的用户目录,会产生新的配置文件。
配置文件路径:C://Users//用户名//.gitconfig
说明:签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。 Git 首次安装必须设置一下用户签名,否则无法提交代码。
注意: 这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系。
我们可以通过指令获取软件的配置信息:
git config -l
Git软件主要用于管理文件的版本信息,但它只是一个软件,不可能安装后就直接将系统中所有的文件全部纳入到它的管理范畴中。并且,软件管理版本信息的主要目就是管理文件的修改和变更,如果将系统中所有文件都进行管理其实意义是不大的。所以一般情况下,我们需要指定某一个文件目录作为软件的管理目录。因为这个目录主要就作为Git软件的管理文件的版本变化信息,所以这个目录也称之为Git软件的版本仓库目录。
1)基本语法
git init
2)案例实践
执行初始化命令后会创建一个 .git 的隐藏目录,通过 ll -a 命令可查看隐藏目录
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo
$ git init
Initialized empty Git repository in D:/workspace/git-Space/git-demo/.git/
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ ll -a
total 4
drwxr-xr-x 1 xl 197121 0 Sep 21 23:46 ./
drwxr-xr-x 1 xl 197121 0 Sep 21 23:45 ../
drwxr-xr-x 1 xl 197121 0 Sep 21 23:46 .git/
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
或者通过磁盘勾选隐藏项目也可查看
基本语法
git status
git add 文件名
执行添加到缓存区命令
删除暂存区文件命令
基本语法
git commit -m "日志信息" 文件名
基本语法
git reflog
查看版本详细日志
基本语法
git log
注意: 修改提交后这里提示 1 file changed, 1 insertion(+), 1 deletion(-)
是因为 Git 里面是通过行来维护文件的,没法表达出来,所以这里是先把需要修改的行删掉,再把修过的行复制进来。
基本语法
git reset --hard 版本号
# 首先查看当前的历史记录
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ git reflog
6284637 (HEAD -> master) HEAD@{0}: commit: third commit
91b3585 HEAD@{1}: commit: second commit
494dc4a HEAD@{2}: commit (initial): first commit
# 切换到 91b3585 版本,也就是第一次提交的版本
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ git reset --hard 91b3585
HEAD is now at 91b3585 second commit
# 切换完毕之后再查看历史记录,已成功切换 b0006bc 版本
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ git reflog
91b3585 (HEAD -> master) HEAD@{0}: reset: moving to 91b3585
6284637 HEAD@{1}: commit: third commit
91b3585 (HEAD -> master) HEAD@{2}: commit: second commit
494dc4a HEAD@{3}: commit (initial): first commit
# 再次查看文件 hello.txt,文件内容回滚到第一版本
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ cat hello.txt
hello,git! 11111
hello,git!
hello,git!
hello,git!
hello,git!
Git 切换版本, 底层其实是移动的 HEAD 指针。
什么是分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来, 开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)
分支的好处
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
基本语法
git branch -v
案例实操
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ git branch -v
* master 91b3585 second commit
基本语法
git branch 分区名
案例实操
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ git branch hot-fix
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ git branch -v
hot-fix 91b3585 second commit
* master 91b3585 second commit
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
刚创建的新的分支,并将主分支master的内容复制了一份。
基本语法
git checkout 分支名
案例实操
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ git checkout hot-fix
Switched to branch 'hot-fix'
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (hot-fix)
$ git branch -v
* hot-fix 91b3585 second commit
master 91b3585 second commit
成功切换分支
修改分支文件
案例实操
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (hot-fix)
$ vim hello.txt
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (hot-fix)
$ git status
On branch hot-fix
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified: hello.txt
no changes added to commit (use "git add" and/or "git commit -a")
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (hot-fix)
$ git add hello.txt
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (hot-fix)
$ git status
On branch hot-fix
Changes to be committed:
(use "git restore --staged ..." to unstage)
modified: hello.txt
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (hot-fix)
$ git commit -m "hot-fix first commit" hello.txt
[hot-fix 607fa6f] hot-fix first commit
1 file changed, 1 insertion(+), 1 deletion(-)
基本语法
git merge 分支名称
案例实操
# 首先需要切换主分支
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (hot-fix)
$ git checkout master
Switched to branch 'master'
# 在主分支执行合并分支命令
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ git merge hot-fix
Updating 91b3585..607fa6f
Fast-forward
hello.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
# 查看合并后的内容
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ cat hello.txt
hello,git! 00000
hello,git! 00000
hello,git!
hello,git!
hello,git!
冲突产生的原因
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。 Git 无法替我们决定使用哪一个,因此,必须人为决定新代码内容。
产生冲突
首先,在master修改文件hello.txt最后一行内容,并提交:
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ vim hello.txt
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ git add hello.txt
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ git commit -m "matser test" hello.txt
[master a16a83e] matser test
1 file changed, 2 insertions(+), 2 deletions(-)
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ cat hello.txt
hello,git! 00000
hello,git! 00000
hello,git!
hello,git! mater test
hello,git!
然后,在hot-fix修改文件hello.txt最后一行内容,并提交:
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ git checkout hot-fix
Switched to branch 'hot-fix'
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (hot-fix)
$ vim hello.txt
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (hot-fix)
$ git add hello.txt
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (hot-fix)
$ git commit -m "hot-fix test" hello.txt
[hot-fix abe38bf] hot-fix test
1 file changed, 1 insertion(+), 1 deletion(-)
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (hot-fix)
$ cat hello.txt
hello,git! 00000
hello,git! 00000
hello,git!
hello,git!
hello,git! hot-fix test
合并分支
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (hot-fix)
$ git checkout master
Switched to branch 'master'
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
$ git merge hot-fix
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (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")
手动合并代码,解决分支冲突
1)编辑文件:vim hello.txt
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master|MERGING)
$ vim hello.txt
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (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")
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master|MERGING)
$ git add hello.txt
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master|MERGING)
$ git commit -m "merge test" hello.txt
fatal: cannot do a partial commit during a merge.
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master|MERGING)
$ git commit -m "merge test"
[master d0809be] merge test
xl@LAPTOP-GT7T6793 MINGW64 /d/workspace/git-Space/git-demo (master)
修改后文件
完成合并
注意:
1)解决冲突后,提交到本地库命令不能带文件名,否则会报错
2)合并后只会修改合并分支的代码,被合并的分支不会被修改
GitHub 网址:https://github.com/
GitHub 国内镜像网址:https://hub.yzuu.cf/
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址
# 删除远程库
git remote rm 别名
git push 别名 分支
网络不好可能提交失败,再次提交即可
基本语法
git pull 别名 分支
1)首先在GitHub上修改一下文件并提交
2)拉取
基本语法
git clone 远程地址
获取远程库地址URL 进行克隆
小结: clone 会做如下操作。1、拉取代码。2、初始化本地仓库。3、创建别名
1)选择邀请协作者
2)搜索用户
3)发送邀请
4)查看邀请信息并接受邀请
演示 协作者修改代码
fork操作等同于创建了一个自己的远程仓库。但是这个远程仓库等同于是一个分支远程仓库,你可以随便操作,并不会影响源仓库,但是如果你的修改,更新想要融合到源仓库中,就需要提交申请了
点击Create fork按钮即可
演示
我们这里首先将文件改一下。
发送提交申请
合并修改请求
github支持两种同步方式“https”和“ssh”。如果使用https很简单基本不需要配置就可以使用,但是每次提交代码和下载代码时都需要输入用户名和密码。ssh模式比https模式的一个重要好处就是,每次push、pull、fetch等操作时,不用重复填写遍用户名密码。前提是你必须是这个项目的拥有者或者合作者,且配好了ssh key。
1)点击SHH提示我们使用SHH首先需要添加SHH密钥
2)先到系统盘,删除.ssh文件夹 如:C:\Users\用户名\.ssh(如果没有.ssh文件夹,忽略此步):
3)打开 Git Bash Here 终端
创建密钥命令语法
ssh-keygen -t rsa -C [email protected]
# ssh-keygen:生成SSH协议免密登录的命令。
# -t:表示使用哪种加密协议。
# rsa:是一种非对称加密协议。
# -C:添加描述,在这里添加了 [email protected],说明当前这个免密登录协议主要是专门针对[email protected]这个账号分配的。
执行命令ssh-keygen生成.ssh目录:三次回车键即可
执行命令完成后,在window本地用户.ssh目录C:\Users\用户名\.ssh下面生成如下名称的公钥和私钥:
按照操作步骤,将id_rsa.pub文件内容复制到GitHub仓库中
添加公钥后,可不用输入Github账号密码便可推送。
接下来通过SSH方式拉取hello.txt。
接下来通过SSH方式推送hello.txt。
接下来再往远程仓库push东西的时候使用SSH连接就不需要登录了。
配置 Git 忽略文件的作用是帮助开发者在版本控制过程中排除不需要跟踪的文件,从而提高工作效率、简化工作流程,并保护项目的安全和隐私。与项目的实际功能无关,不参与服务器上部署运行。
创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是 git.ignore)
这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig 文件引用,建议也放在用户家目录下。
git.ignore 文件模板内容如下:
# 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
在.gitconfig 文件中引用忽略配置文件(此文件在 Windows 的家目录中)
[user]
name = Layne
email = [email protected]
[core]
excludesfile = C:/Users/asus/git.ignore
注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”
这里采用的IDEA版本为2023.2,其他版本的IDEA软件会略有差别
按步骤操作即可
初始化完成
2020版本的idea初始化仓库 在菜单栏VCS -> Import into Version Control -> Create Git Repository 如图:
这里也可以选择整个根目录将所有文件添加到暂存区,添加到暂存区的文件会变成绿色;蓝色字体表示文件被追踪了,但是被修改了;黄色字体的文件代表忽略文件。
修改代码后需要提交,步骤和上面是一样的。
切换版本
选中版本右键点击 Checkout Revision ‘****’
成功切换版本
1)创建分支 方法一
2)创建分支 方法二
正常合并
直接并即可,在合并分支查看合并后的代码
冲突合并
分别在master,hot-fix分支修改同一个类的同一个文件,并提交,故意制作冲突:
切换到master分支,将hot-fix-2的合并到master分支:
冲突产生,需要手动解决
手动处理冲突合并
处理完成,点击应用
代码冲突解决,自动将代码提交本地库,这时可以看到代码更新了,日志信息也将两个分支合并成了一个版本
菜单栏File->Setting->选中GitHub,添加GitHub账号:
网络问题可能无法授权。
授权 GitHub,由于网络问题,会时无法进入授权页面。
输入 GitHub 密码
添加完成
可解决因网络无法授权问题
生成口令步骤
我不需要那么细化,我就选择一般用途的
这里记得把所有权限都 ✓ 上
复制创建的口令
填入口令授权,添加完成后记得点击 OK 或者 apply , 否则无法保存授权的账号
分享到远程仓库,建议别名和远程库名字保持一致
推送完成
添加 SSH 协议
选用刚才添加的 SHH 协议
查看远程库,代码已更新
注意: push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push 的操作是会被拒绝的。也就是说, 要想 push 成功,一定要保证本地库的版本要比远程库的版本高! 因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先 pull 拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!
注意: pull 是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动合并,如果自动合并失败,还会涉及到手动解决冲突的问题。
简介
相对于GitHub来讲,由于网络的原因,我们在连接时不是很稳定,所以我们在采用第三方远程仓库时,也可以选择国内的Gitee平台。
码云是开源中国推出的基于 Git 的代码托管服务中心, 网址是 https://gitee.com/ ,使用方式跟 GitHub 一样,而且它还是一个中文网站,如果你英文不是很好,它是最好的选择。
根据提示自行注册
使用方式和GitHub一样
首先,要在IDEA安装Gitee插件。
在菜单栏选File->Settings->Plugins,搜Gitee。
如果插件没有安装成功,可能是你忘记保存了,记得点一下OK,或者重启一下 IDEA
在新建仓库中点击导入,在URL 粘贴代码远程库的 hppt 协议地址 即可
后续可通过此方式再次同步代码
GitLab介绍
GitLab是由GitLabInc开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。
GitLib由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它使用Ruby语言写成。后来,一些部分用Go语言重写。GitLab被IBM,Sony,JulichResearchCenter,NASA,Alibab,Invincea,O’ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX等组织使用。
GitLab官网地址
官网地址:https://about.gitlab.com/
GitLab安装准备
准备一个系统为 CentOS7 以上版本的服务器, 要求内存 4G,磁盘 50G。
关闭防火墙, 并且配置好主机名和 IP,保证服务器可以上网。
此教程使用虚拟机:主机名: gitlab-server IP 地址: 192.168.6.200
安装包准备
Yum 在线安装 gitlab- ce 时,需要下载几百 M 的安装文件,非常耗时,所以最好提前把所需 RPM 包下载到本地,然后使用离线 rpm 的方式安装。
官网下载地址:https://packages.gitlab.com/gitlab/gitlab-ce
百度云下载:https://pan.baidu.com/s/1MPtH-MoISMSq-q5jDWZJ1w 提取码:prxk
阿里云下载:https://www.aliyundrive.com/s/c4VixdVB3hv
注:资料里提供了此 rpm 包,直接将此包上传到服务器/opt/module 目录下即可。
上传安装包
创建目录
mkdir /opt/module
安装 gitlab 步骤比较繁琐,因此我们可以参考官网编写 gitlab 的安装脚本。
找不到 vim 命令执行: sudo yum install vim -y 进行安装
cd /opt/module
vim gitlab-install.sh
# 找不到 vim 命令执行: sudo yum install vim -y 进行安装
脚本内容:
sudo rpm -ivh /opt/module/gitlab-ce-16.4.0-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
给脚本增加执行权限
chmod +x gitlab-install.sh
执行脚本,开始安装 gitlab-ce,注意一定要保证服务器可以上网。
./gitlab-install.sh
脚本执行失败时可尝试更换一下 yum 源 再执行一下脚本
# 1. 备份系统自带的源
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 2. 下载国内yum源配置文件到/etc/yum.repos.d/(阿里) 和下一条命令2选1即可
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 如果提示没有wget,可以使用curl下载 和下上一条命令2选1即可
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 3. 清理yum缓存,并生成新的缓存
yum clean all
yum makecache
(可能出现缺少/etc/sysctl.conf
文件导致的问题,再执行一次即可)
gitlab-ctl reconfigure
执行命令后等待几分钟
出现 gitlab Reconfigured! 表示初始化完成
执行以下命令启动 GitLab 服务,如需停止,执行 gitlab-ctl stop
# 启动
gitlab-ctl start
# 停止
gitlab-ctl stop
使用浏览器访问GitLab,输入网址:http://ip/users/sign_in (**注意:**老版本的直接输入ip访问GitLab,进入就会让你更改root密码)
初始化时,软件会提供默认管理员账户:root,但是密码是随机生成的。
根据提示,在/etc/gitlab/initial_root_password文件中查找密码
输入账号,密码,进入系统
默认的密码是随机的,且不容易记忆,还会在系统初始化后24小时被删除,所以需要先修改一下密码。修改完重新登陆即可
创建完成
创建token的流程在下面
添加token
完成登陆
设置远程连接
推送到远程库
只要 GitLab 的远程库连接定义好以后,对 GitLab 远程库进行 pull 和 clone 的操作和 Github和码云一致, 此处不再赘述。