目录
gitlab
下载与安装
重置管理员密码
邮箱配置
gitlab命令
git远程gitlab相关命令
gitlab的使用
设置中文
修改默认分支
创建群组并授权
新建项目/新建库
设置当前用户的sshkey
Deploy Keys
计划管理
权限管理
gitlab的备份与恢复
git
git 分布式版本控制
安装
git的四个区域与文件的四个状态
使用git
常用命令
分支管理
补充
git 分布式管理系统
gitlab 企业私有库
github 公网共享库,全球最大的代码托管网站、开源网站、交流网站
gitlab
下载与安装
地址:
官网 https://about.gitlab.com/downlads
清华镜像 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
安装
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm
yum -y install gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm
修改配置文件(ruby语言编写):
vim /etc/gitlab/gitlab.rb
external_url 'URL'
gitlab-ctl reconfigure 配置生效并启动
gitlab-ctl show-config 验证配置
gitlab-ctl status 查看
可以直接访问URL登录界面
重置管理员密码
gitlab-rails console #进入gitlab控制台
user = User.find_by(username: 'root') # 切换为root用户
user.password='Picc@2222222' #设置密码
user.save! #保存
邮箱配置
邮箱键值修改调通后,相关操作会通过邮箱通知到你
gitlab命令
gitlab-ctl
status
start
stop
restart
tail nginx 查看日志
git远程gitlab相关命令
git
remote
-v 显示远程仓库
-add REPONAME URL #添加一个远程库
-remove REPONAME #删除一个远程仓库
show REPONAME #显示指定库的详细信息
rename OLD NEW #变更远程地址的名字
clong 从远程主机克隆一个版本库
fetch 远程主机的版本库有了更新,fetch命令可以将这些更新取回本地,并且对你本地的开发代码没有影响。可以用git merge origin/master或git rebase origin/master把远程仓库master分支代码与本地当前分支合并
pull <远程主机名> <远程分支名>:<本地分支名>
相当于git fetch + git merge 作用是取回远程主机某个分支的更新,再与本地的指定分支合并
-p 加上参数 -p
就会在本地删除远程已经删除的分支。
push <远程主机名> <本地分支名>:<远程分支名>
参考文档:https://www.yiibai.com/git/git_push.html?_t=t
REPONAME
BRANCHNAME:BRANCHNAME #推送分支到远程仓库
--tags #推送分支时一并把tag推送到远程仓库
TAGNAME:推送tag到远程仓库
--delete BRANCHNAME 删除远程仓库分支
示例:
#添加远程仓库
$ git remote add origin git@192.168.0.13:java/test.git
#删除远程仓库
$ git remote remove origin
#查看远程仓库分支
$ git branch -r
#取回origin主机的next分支,与本地的master分支合并。
$ git pull origin next:master
#取回origin主机的next分支,与当前分支合并
$ git pull origin next
#省略远程分支表示将本地的master分支推送到origin主机的master分支。如果master不存在,则会被新建。
#在本地删除远程已经删除的分支。
$ git pull -p
$ git push origin master
#如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
$ git push origin :master
# 以上命令等同于以下命令
$ git push origin --delete master
#将当前分支推送到origin主机的对应分支。
$ git push origin
#如果当前分支只有一个追踪分支,那么主机名都可以省略。
$ git push
#如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push
$ git push -u origin master
#不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机
$ git push --all origin
#用本地分支lbranch-3覆盖远程分支rbranch-1:
$ git push -f origin lbranch-2:refs/rbranch-1
#如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用–force选项,但是结果导致在远程主机产生一个”非直进式”的合并(non-fast-forward merge)。除非你很确定要这样做,否则应该尽量避免使用–-force选项。
$ git push --force origin
#git push不会推送标签(tag),除非使用–tags选项。
$ git push origin --tags
#推送tag
$ git push origin tag_name
#删除远程标签
$ git push origin :tag_name
gitlab的使用
设置中文
修改默认分支
默认为main,一般修改为master
创建群组并授权
创建群组,群组一般根据开发团队来分配群组
需先进入群组中授权,可以根据需要授权给某人或其他组并设置他们的角色
新建项目/新建库
补充:授权与群组一样,先进入项目中再进行授权操作
设置当前用户的sshkey
ssh的公钥放gitlab里私钥留在客户端
Deploy Keys
部署秘钥只有下载权限的Keys并对全局有效,主要用于jenkins,需要管理权限设置
计划管理
主要用于项目负责人建立任务计划并分配成员任务和后期跟踪
(首先要进入对应的项目里进行设置)
关联并分配任务
分配完任务后,对应的开发人员克隆master代码到本地并新建一个分支,开发完后推送新分支上去,并在gitlab中申请合并代码到master,然后有项目负责人通过即可合并完成, 最后gitlab中关闭对应任务(也可以提交时例如 git commit -m close #2 ,在合并master后会自动关闭第二个任务)。注意开发人员是不能自己直接推送master,只有项目负责人有权限
权限管理
生产中往往会开通ldap统一账户管理中心
Linux
通过ssh登录需要生成免密的公钥,导入到gitlab中
http登录可以通过设置好的账号密码
Windos
需要安装一个git客户端其他同Linux
管理员
Deploy Keys :只有下载权限的Keys,主要用于jenkins
gitlab的备份与恢复
备份
vim /etc/gitlab/gitlab.rb #修改配置文件
gitlab_rails['backup_path']='/data/backup/gilab' #指定备份路径,记得授权给git用户
gitlab_rails['backup_keep_time']=604800 #备份有效时间,默认为7天,单位秒
gitlab-ctl reconfigure #修改完配置文件后执行命令使其生效
gitlab-ctl restart #重启服务
创建目录并授权git用户
crontab -l 创建计划任务备份全库
0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create #备份脚本,每天两点备份一次
恢复
停止数据写入服务:
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=1492296095 #载入备份数据,指定备份数据文件名字的时间戳部分
gitlab-ctl restart
git
git 分布式版本控制
- 与集中式版本控制svn对比
1. Git是一个分布式版本控制系统,这意味着每个开发人员的电脑上都有一个完整的本地仓库副本,可以在没有网络连接的情况下进行版本控制操作,如提交、查看历史记录等;而SVN是一个集中式版本控制系统,所有数据都存储在一个中央服务器上,本地只保存一个版本,开发人员需要连接到中央服务器进行版本控制操作。
2. 存储结构。Git将内容以元数据的形式存储,这种方式使得Git能够更高效地处理大量文件和历史记录。SVN则直接存储文件。
3. 分支管理。Git在管理分支时更为灵活和高效,可以在同一个工作目录下快速切换不同的分支,而且Git的分支是指向特定提交的指针,创建和切换成本低。SVN的分支是目录的拷贝,创建和切换成本较高。
4. 版本管理。Git使用SHA1算法为每个版本生成唯一的标识,这有助于追溯和验证历史记录的完整性。SVN有明确的版本号。
5. 克隆目录速度。Git通常比SVN更快地进行克隆操作,尤其是在处理大量文件和历史记录时。
6.易用性。SVN通常被认为更容易上手,适合新手使用。Git由于命令较多,被认为是较难学习的,但一旦掌握,可以执行更复杂的操作。
7. 内容完整性。Git使用哈希算法存储文件,确保了内容的完整性,减少了在遇到故障和网络问题时对版本库的损坏风险。
安装
官网下载地址:https://git-scm.com/downloads
- windows安装
百度云盘下载:https://pan.baidu.com/s/1KiBxlnhwswPRPRY_B_Esww
提取码:xbun
- Linux安装
方法一:yum安装版本比较老
yum -y install git
方法二:编译安装较新版本
(1)安装依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
(2)下载解压
wget https://github.com/git/git/archive/v2.7.4.zip
unzip v2.7.4.zip
cd git-2.7.4
(3)编译安装
make prefix=/usr/local/git all
make prefix=/usr/local/git install
rm -rf /usr/bin/git
ln -s /usr/local/git/bin/git /usr/bin/git
git --version
- 配置用户名和邮箱:
git config --global user.name 'NAME'
git config --global user.email 'MAIL'
git config --global --list 查看
git的四个区域与文件的四个状态
- 四个区域:
远程仓库:git push 到远程仓库的文件
本地仓库:已生成版本的文件,git status不显示文件,可以用git log查看版本信息
暂存区域:存档add的文件,git status显示为绿色
工作目录:存放新文件和已修改的文件,git status显示为红色
- 文件的四个状态:
untracked 未纳入版本控制的状态
unmodified 纳入本地仓库中(commit)
modified 修改unmodified状态的文件,状态会变成modified的文件状态,并且从本地仓库回到工作目录中
staged 纳入版本管理的文件(add);暂存区中
使用git
(1)进入,进入想要版本控制的代码所在目录
(2)提名,进行初始化操作(初始化命令:git init)。初始化后,会在当前目录自动创建 .git 文件夹,该文件是Git中最重要的文件夹,因为Git相关文件以及版本都将保存在该文件夹中,通过Git命令可以将所有版本保存在 .git 文件中,两条命令创建一个版本:
(3)管理,使用git status命令查看当前目录下文件状态
git add FILENAME 添加指定文件到暂存区,FILENAME可以用.表示当前所有文件,这时颜色会变为绿色。
(4)生成版本。命令:git commit [-m]
(5)版本迭代
修改index.txt内容然后提交代码生成新的版本
常用命令
补充知识:
省略ID写法:
1.写ID是可以只写ID从开头数至少4个字母
2.HEAD写法需要大写:
HEAD FILENAME 取消add(追踪)操作,也就是取消暂存区操作,文件绿色变为红色
HEAD^ 复位到上一个版本(一个^表示复位一个版本,同理^^表示复位上两个版本)
HEAD~2 等同于 HEAD^^
例:
git reset HEAD home/home.html
git reset HEAD^^ home/home.html
git reset HEAD~2 home/home.html
git
--version
init 初始化,并加入版本控制
add 纳入版本管理(添加到暂存区)
fetch 拉取
commit
-m #注释
#示例
git commit -m 'v1'
status 检测当前文件夹下面的文件状态
-s 状态概览
diff #对比两个版本的差异
1.git diff 或者 git diff file:本地工作区和暂存区的diff信息
2.git diff --cached 或 git diff --staged:暂存区和版本库的diff信息
3.git diff commit1 commit2 或 git diff branch1 branch2 :版本库中不同commit、分支的diff信息
log
--author='' 过滤名字
--pretty=oneline FILE 可查看文件的提交的id和改动注释
-p FILE 查看文件具体修改的内容
--oneline 查看简写日志
--graph 查看版本路线
rm 从版本库中移除
--cached FILENAME 从暂存区中移除,并移出版本控制
mv
show ID 查看提交的详情,不加ID默认为最新版本信息
reset 回滚,参考文档:https://blog.csdn.net/qq_39852676/article/details/129094985
--soft ID 回滚版本库到指定ID,工作目录和暂存区不动
--mixed ID (默认)回滚版本库到指定ID,缓存区被清空
--hard ID 回滚版本库到指定ID,暂存区和工作目录复位到ID的版本
revert commitID #指定某次提交并作为新一次的提交
reflog 查看包括reset完成时之前的记录和ID,然后可以再回滚回去
tag 查看标签(相当于做一次快照)
-a 手动编写标签信息,默认加在最新一次的commit上
-m 编写备注信息
ID 标签创建在此ID上
-d TAGNAME 删除标签
分支管理
分支功能:只保存修改的文件,没有修改的会用指针指向源文件。可以节省空间并且创建版本更快
git
branch 查看分支
BRANCHNAME 创建分支
-d BRANCHNAME 删除分支
-D BRANCHNAME 强制删除
-v
--merge 查看已合并的分支
--no-merge 查看未合并的分支
checkout 切换指针
1.git checkout:
表示核查工作区相对于版本库修改过的文件
2. git checkout + 分支名:
表示切换分支
3. git checkout -b 分支名:
表示以当前分支的当前状态创建新分支并切换到新分支 -b 表示创建新分支
4. git checkout -b 分支名 commitID:
表示以当前分支的commitID提交节点创建新的分支并切换到新分支。此时工作区的内容和切换分之前commitID提交节点的内容一样
5. git checkout commitID:
是以指定的提交节点创建了一个临时性分支,此临时性分支可用于做实验性修改
6. git checkout filename
git checkout .
工作目录中文件改动后,执行命令会把指定的文件还原成版本库相同。末尾如果是点‘.’则表示还原当前目录下所有文件为版本库
7. git checkout <commit> filename:
表示将工作区和暂存区都恢复到版本库指定提交版本的指定文件的状态,此时HEAD指针不变
checkout与reset对比
reset的原理就是将头指针回退到上一个,其应用可以分成三个部分,soft,mixed,hard三种
checkout的原理就是把当前代码更新成头指针指向的提交,其应用有两个,第一,切换分支。第二,更新当前内容。
merge(master上执行)合并代码并提交
BRANCHNAME #合并指定分支到当前分支,合并完成后当前分支会增加所有提交记录,包括其他分支的
--abort 忽略其他代码,保留原分支代码(代码冲突;也可以手动修改)
rebase 合并代码
注释:区别于merge,rebase始把多条分支的提交记录合并成一个,并且日志查不到合并日志,merge是能查到包括合并在内的所有提交记录,但是非主分支上的提交记录并没有合并到主分支上,查看日志的时候是在非主分支上提取的
clong URL BRANCH 远程克隆分支
reflog 查看包括reset完成时之前的记录和ID,然后可以通过checkout ID 切换指针,其他不变,可以新建分支合并还原
补充:
安装谷歌访问助手
octotree插件
作用:可以树状显示仓库
enhanced github
作用:可查看单个文件的大小,并可以下载单个文件
gitzip for github
作用: 直接下载文件夹
补充
sourcetree:git的图形界面工具