环境:centos7.3
一,Git的发展史
git:分布式版本控制系统,是当前最流行的版本控制软件
创始人:林纳斯.拖瓦兹
二,部署Git环境
1.安装git服务
[root@localhost ~]# yum -y install git
2.配置git环境
不一定是data目录,但是尽量设为data命名的目录,可视度比较高
[root@localhost ~]# mkdir /data [root@localhost ~]# cd /data/ [root@localhost data]# git init 初始化空的 Git 版本库于 /data/.git/ [root@localhost data]# ls -a .git/ . .. branches config description HEAD hooks info objects refs
自动生成的git文件,是隐藏的文件,需要ls -a才可以列出
git目录的组成
branches 分支目录
config 定义目录特有的配置选项
description 仅供git web使用
HEAD 指定当前的分支
hooks git钩子文件
info 包含一个全局排除文件(exclude)
objects 存放所有的数据内容
refs 指针文件
index 暂存区文件 当缓存区存在内存才会存在
3.指定直接的使用者信息
[root@localhost data]# git config --global user.name "test" [root@localhost data]# git config --global user.email "132644323@qq.com"
三,git的常用命令
1.定义一个初始化文件
[root@localhost data]# vi readme.txt <html> <head> <title> test </title> </head> <body> <h1>hello world<\h1> </body> </html>
2.上传暂存区
1. [root@localhost data]# git add readme.txt 2. 或使用:git add . #当前目录所有文件上传
3.查看暂存区
[root@localhost data]# git status # 位于分支 master # # 初始提交 # # 要提交的变更: # (使用 "git rm --cached <file>..." 撤出暂存区) # # 新文件: readme.txt #
4.把文件从暂存区撤销
[root@localhost data]# git rm --cached readme.txt rm 'readme.txt' [root@localhost data]# git status # 位于分支 master # # 初始提交 # # 未跟踪的文件: # (使用 "git add <file>..." 以包含要提交的内容) # # readme.txt 提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
5.将本地文件返回到缓存区的版本
[root@localhost data]# git add . [root@localhost data]# vi readme.txt [root@localhost data]# cat readme.txt <html> <head> <title> test </title> </head> <body> <h1>hello world<\h1> <h1>error</h1> </body> </html> [root@localhost data]# git checkout -- readme.txt [root@localhost data]# cat readme.txt <html> <head> <title> test </title> </head> <body> <h1>hello world<\h1> </body> </html>
6.将缓存区中的内容上传到版本库
[root@localhost data]# git status # 位于分支 master # # 初始提交 # # 要提交的变更: # (使用 "git rm --cached <file>..." 撤出暂存区) # # 新文件: readme.txt # [root@localhost data]# git commit -m "new readme.html" [master 5210983] new readme.html 1 file changed, 1 insertion(+) [root@localhost data]# git status # 位于分支 master 无文件要提交,干净的工作区
7.修改本地的readme文件,查看哪里发生了改变
-:代表缺少的行
+:代表增加的行
[root@localhost data]# git diff readme.txt diff --git a/readme.txt b/readme.txt index 1dc5795..1c5dd62 100644 --- a/readme.txt +++ b/readme.txt @@ -4,6 +4,6 @@ </head> <body> <h1>hello world<\h1> - <hr> + <p><\p> </body> </html>
8.查看提交版本库中的文件信息
[root@localhost data]# git log #详细信息 commit 5210983213165a4304502faa0aed6579de140b7d Author: test <132644323@qq.com> Date: Tue Feb 28 16:48:34 2023 +0800 new readme.html commit 936abac869ae93ce04904545c0720cba2faa78c0 Author: root <root@localhost.localdomain> Date: Tue Feb 28 16:42:49 2023 +0800 new readme.html [root@localhost data]# git log --oneline #ID号的前七位 和文件名 5210983 new readme.html 936abac new readme.html
9.版本回滚(回滚直接,会自动删除之前版本注意)
[root@localhost data]# git reset --hard HEAD^ #回滚到上一个版本,HEAD^^上上版本,HEAD~10回滚到上10个版本 HEAD 现在位于 936abac new readme.html [root@localhost data]# vi readme.txt [root@localhost data]# git reset --hard 936abac #指定回滚的ID HEAD 现在位于 936abac new readme.html [root@localhost data]# vi readme.txt [root@localhost data]# git log --oneline 936abac new readme.html
10.查看回滚动作日志
[root@localhost data]# git reflog 936abac HEAD@{0}: reset: moving to HEAD^ 5210983 HEAD@{1}: commit: new readme.html 936abac HEAD@{2}: commit (initial): new readme.html
11.git config常见的配置选项
git config -e 编辑配置文件 git config --local -e 编辑仓库级别配置文件 git config --global -e 编辑用户级别配置文件 git config --system -e 编辑系统级别配置文件 git config 添加配置项目 git config --global user.email “you@example.com” git config --global user.name “Your Name” git config 添加别名 git config --global -e 添加: [alias] st = status co = checkout br = branch mg = merge ci = commit md = commit --amend dt = difftool mt = mergetool last = log -1 HEAD cf = config line = log --oneline
四,git分支
1.查看分支
master:为默认主分支,不可以删除
[root@localhost data]# git branch * master
2.创建分支
1. [root@localhost data]# git branch ops 2. [root@localhost data]# git branch 3. * master 4. ops
3.切换分支
1. [root@localhost data]# git checkout ops 2. 切换到分支 'ops' 3. [root@localhost data]# git branch 4. master 5. * ops
4.创建分支并切换
1. [root@localhost data]# git checkout -b dev 2. 切换到一个新分支 'dev' 3. [root@localhost data]# git branch 4. * dev 5. master 6. ops
5.合并分支
[root@localhost data]# git checkout dev 切换到分支 'dev' [root@localhost data]# vi readme.txt [root@localhost data]# git add . [root@localhost data]# git commit -m "dev readme.html" [dev c0af69f] dev readme.html 1 file changed, 1 insertion(+) [root@localhost data]# git checkout master #切换到主分支 切换到分支 'master' [root@localhost data]# git merge dev #合并dev分支 更新 936abac..c0af69f Fast-forward readme.txt | 1 + 1 file changed, 1 insertion(+) [root@localhost data]# git log --oneline c0af69f dev readme.html 936abac new readme.html
6.删除分支
当复制被合并完之后,就没有任何作用了,除非还要继续使用
1. [root@localhost data]# git branch -d dev 2. 已删除分支 dev(曾为 c0af69f)。
7.分支冲突
制造冲突:先在分支修改文件,提交;然后回到master,再修改文件相应内容,提交;最后,合并分支,出现冲突。 删除冲突文件内容:带>>>>>>>>> ================= 行,保留想要的内容,再commit 注:为了避免合并冲突,尽量不要在master分支修改代码
五,gitlab中央仓库
gitlab:gitlab是一个利用ruby on rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过web界面进行访问公开的或私人的项目
1.下载前提软件
[root@localhost data]# yum install curl policycoreutils openssh-server openssh-clients postfix -y
2.下载清华源的gitlab安装包
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
3.安装rpm包
[root@localhost mnt]# yum -y install gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
4.修改gitlab配置文件
1. [root@localhost mnt]# vi /etc/gitlab/gitlab.rb 2. external_url 'http://192.168.2.1' #将字段设置为本机IP来供浏览器访问
5.配置启动gitlab
[root@localhost mnt]# gitlab-ctl reconfigure
6.查看gitlab的状态
[root@localhost mnt]# gitlab-ctl status run: gitaly: (pid 112529) 104s; run: log: (pid 112168) 126s run: gitlab-monitor: (pid 112553) 103s; run: log: (pid 112319) 117s run: gitlab-workhorse: (pid 112511) 104s; run: log: (pid 112003) 140s run: logrotate: (pid 112081) 132s; run: log: (pid 112080) 132s run: nginx: (pid 112026) 138s; run: log: (pid 112025) 138s run: node-exporter: (pid 112229) 124s; run: log: (pid 112228) 124s run: postgres-exporter: (pid 112581) 102s; run: log: (pid 112385) 114s run: postgresql: (pid 111637) 165s; run: log: (pid 111636) 165s run: prometheus: (pid 112564) 103s; run: log: (pid 112361) 115s run: redis: (pid 111541) 171s; run: log: (pid 111540) 171s run: redis-exporter: (pid 112341) 116s; run: log: (pid 112340) 116s run: sidekiq: (pid 111975) 142s; run: log: (pid 111974) 142s run: unicorn: (pid 111905) 148s; run: log: (pid 111904) 148s
7.gitlab服务器管理命令
[root@localhost mnt]# gitlab-ctl start #开启gitlab [root@localhost mnt]# gitlab-ctl stop #关闭gitlab [root@localhost mnt]# gitlab-ctl restart #重新加载gitlab
- 登录gitlab服务器
登录
成功进入界面
六,gitlab中央仓库的管理
1.取消注册功能
为什么取消注册功能,在大多数生产环境中,是不允许每个用户都有自己的账号的,如果需要,登录root用户来管理员自行创建 登录gitlab--admin area(顶部菜单栏小扳手图标)--左侧面板settings--Sign-up Restrictions--去除勾选sign-up enabled --下拉选save保存
2.修改登录欢迎界面
登录gitlab--admin area--Appearance--填写管理员联系方式和logo--save
退出登录:点击右上角的个人头像--》sign out
3.项目创建流程
1.创建group
登录gitlab--admin area--new group
2.创建user
1. 登录gitlab--admin area--new user--添加用户名、邮箱--create--edit--修改密码 2. 3. 注意:用户名不能与组名相同
2.创建user
1. 登录gitlab--admin area--new user--添加用户名、邮箱--create--edit--修改密码 2. 3. 注意:用户名不能与组名相同
Guest:可以创建issue、发表评论,不能读写版本库 Reporter:可以克隆代码,不能提交,测试、产品经理可以赋予这个权限 Developer:可以克隆代码、开发、提交、push,开发人员可以赋予这个权限 Master:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负责人可以赋予这个权限 Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限
5.gitlab中的组和项目有三种访问权限
Gitlab中的组和项目有三种访问权限: Private:只有组成员才能看到 Internal:只要登录的用户就能看到 Public:所有人都能看到
6.上传ssh密钥对
这样当用户下载仓库项目时可以实现免密码登录 本地用户创建秘钥:ssh-keygen -t rsa 复制公钥内容:cat /root/.ssh/id_rsa.pub 黏贴到web界面:右上角--用户--settings--SSH Keys
7.克隆下载项目
[root@localhost data]# git clone git@192.168.2.1:dev/test.git 正克隆到 'test'... The authenticity of host '192.168.2.1 (192.168.2.1)' can't be established. ECDSA key fingerprint is SHA256:zrvQnhSEBUrxCxdIZ3HbTLxZfWnaKv7tbeFl/asoDw8. ECDSA key fingerprint is MD5:b1:65:c6:c0:91:f3:a6:5e:6e:2b:27:65:8f:0a:8d:15. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.2.1' (ECDSA) to the list of known hosts. warning: 您似乎克隆了一个空版本库。 [root@localhost data]# ls readme.txt test
8.添加文件内容,并推送代码
[root@localhost data]# cd test/ [root@localhost test]# ls [root@localhost test]# cd .. [root@localhost data]# cd test/ [root@localhost test]# echo "test file" > new.txt [root@localhost test]# git add . [root@localhost test]# git commit -m "add new.txt" [master(根提交) 045fd6f] add new.txt 1 file changed, 1 insertion(+) create mode 100644 new.txt [root@localhost test]# git push -u origin master Counting objects: 3, done. Writing objects: 100% (3/3), 213 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@192.168.2.1:dev/test.git * [new branch] master -> master 分支 master 设置为跟踪来自 origin 的远程分支 master。
4.在客户机,普通开发人员更新代码流程
前提
1. 需要将用户添加到dev组中,要不同步时无法使用 2. 登录管理员用户--》小扳手-》groups:1--》dev--》add users to group-——》设置用户和权限--》add users to group
1.dev用户登录到gitlab上传密钥
1. 本地用户创建秘钥:ssh-keygen -t rsa 2. 复制公钥内容:cat /root/.ssh/id_rsa.pub 3. dev01登录:右上角--用户--settings--SSH Keys
2.关联远程仓库
[root@git-client ~]# mkdir /data [root@git-client ~]# cd /data/ [root@git-client data]# git init 初始化空的 Git 版本库于 /data/.git/ [root@git-client data]# git remote add origin git@192.168.2.1:dev/web.git
3.下载同步代码
[root@git-client data]# git pull origin master
4.创建分支,上传代码
[root@git-client data]# git config --global user.name "zhangsan" [root@git-client data]# git config --global user.email "1234@qq.com" [root@git-client data]# git checkout -b ops 切换到一个新分支 'ops' [root@git-client data]# echo " test2 file" > new.txt [root@git-client data]# git add . [root@git-client data]# git commit -m "add new name-zhangsan" [ops 8b42e8e] add new name-zhangsan 1 file changed, 1 insertion(+), 1 deletion(-)
5.推送ops分支
[root@git-client data]# git push -u origin ops Counting objects: 5, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 278 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: remote: To create a merge request for ops, visit: remote: http://192.168.2.1/dev/test/merge_requests/new?merge_request%5Bsource_branch%5D=ops remote: To git@192.168.2.1:dev/test.git * [new branch] ops -> ops 分支 ops 设置为跟踪来自 origin 的远程分支 ops。
6.在dev的web界面上创建merge请求
登录dev用户的gitlab--》merge request--》create merge request
7.在切换到管理员登录,进入项目,同意merge请求
在左侧面板--》merge requests --》merge
七,常用的git命令
git remote add [remote] [url] #添加(关联)远程库 git remote set-url [remote] [url] #修改远程仓库 git clone [url] #克隆远程仓库项目 git remote #查看指定远程仓库命名简写 git remote –v #查看远程仓库详细信息以及名称对应URL git push -u remote master #第一次推送master分支的所有内容 git fetch remote [branch/tag] #下载远程仓库的所有变动 git pull remote [branch/tag] #拉取主分支最新版本(可以拉取其他分支) git push remote [branch/tag] --force #强行推送当前分支至远程分支,及时冲突 git push remote [branch/tag] --all #推送所有分支到远程仓库 git remote rename [oldname] [newname] #修改远程仓库名称 git remote remove [name] #删除远程仓库名称以及URL地址 git remote add [remote] [url] #添加(关联)远程库 git remote set-url [remote] [url] #修改远程仓库 git clone [url] #克隆远程仓库项目 git remote #查看指定远程仓库命名简写 git remote –v #查看远程仓库详细信息以及名称对应URL git push -u remote master #第一次推送master分支的所有内容 git fetch remote [branch/tag] #下载远程仓库的所有变动 git pull remote [branch/tag] #拉取主分支最新版本(可以拉取其他分支) git push remote [branch/tag] --force #强行推送当前分支至远程分支,及时冲突 git push remote [branch/tag] --all #推送所有分支到远程仓库 git remote rename [oldname] [newname] #修改远程仓库名称 git remote remove [name] #删除远程仓库名称以及URL地址 1、git clone 与 git pull 相同点 相同点:都是从远程服务器拉取代码到本地 2、git clone 与 git pull 不同点 git clone 是在本地没有版本库的时候,从远程服务器克隆整个版本库到本地,是一个本地从无到有的过程。 git pull 在本地有版本库的情况下,从远程库获取最新commit 数据(如果有的话),并merge(合并)到本地。 git pull = git fetch + git merge 3、使用场景 通常情况下,远程操作的第一步,是使用git clone从远程主机克隆一个版本库到本地。 本地修改代码后,每次从本地仓库push到远程仓库之前都要先进行git pull操作,保证push到远程仓库时没有版本冲突。
1.常用命令
git config --global user.name 'cjx' #声明用户 git config --global user.email 'cjx@qq.com' #声明邮箱 git init #git初始化 git add . #将当前所有文件上传到暂存区 git status #查看暂存区的文件 git rm --cached readme.txt #删除暂存区中的文件 git checkout -- readme.txt #把文件从暂存区中撤销 git commit -m "add readme.txt" #上传到本地版本库 git diff readme.txt #对比版本库中的文件与本地有哪些区别 git log #显示详细信息 git log --oneline #显示摘要信息 git reset --hard HEAD^ #版本回滚 git reset --hard 版本号 #回滚到执行的版本 注:版本回滚前的,会被自动删除 git reflog #查看动作命令日志 git branch #查看当前分支 git branch ops #创建ops分支 git checkout ops #切换到ops分支 git checkout -b dev #创建并切换到dev分支 git merge dev #合并dev分支 git branch -d dev #删除dev分支 git push -u origin master #推送代码 git remote add origin git@192.168.2.1:dev/web.git #关联远程仓库 git pull origin master #下载同步代码 git push -u origin master #推送合并代码