systemctl stop firewalld
systemctl disable firewalld
setenforce 0
git 是一套软件 可以做本地私有仓库
github 本身是一个代码托管网站 公有和私有仓库(收费) 不能做本地私有仓库
gitlab 本身也是一个代码托管的网站 功能上和github没有区别 公有和私有仓库(免费) 可以部署本地私有仓库
Git 与 SVN 区别 |
---|
Git是分布式的,svn不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。 |
GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。 |
GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。 |
GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。 |
GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。 |
git 是分布式的版本控制器 没有客户端和服务器端的概念 |
svn 它是C/S结构的版本控制器 有客户端和服务器端 服务器如果宕机而且代码没有备份的情况下 完整代码就会丢失 |
工作区:代码目录,就是你在电脑里能看到的目录。
暂存区:工作区和版本库之间的缓存区域,一般存放在 .git 目录下的 index 文件(.git/index)中,英文叫 stage 或 index。
版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 git 的版本库。
一般工作流程如下:
yum -y install git
git --version
#配置个人的用户名称和电子邮箱
git config --global user.name "lp"
git config --global user.email "[email protected]"
#设置Git默认使用的文本编辑器, 一般可能会是 vi 或者 vim
git config --global core.editor vim
git config --list
如果使用 --global 选项,那么配置的用户信息会保存在当前用户家目录下的 .gitconfig 文件里, 以后所有的项目都会默认使用此用户信息。
cat ~/.gitconfig
如果要在某个特定的项目中使用其他名字或者电子邮箱,只要去掉 --global 选项重新配置即可,新的设定将会保存在当前项目的 .git/config 文件里。
git init mypro
初始化空的 Git 版本库于 /root/mypro/.git/
ls -A /root/mypro/
.git
mkdir /root/myweb
cd !$
echo 'this is my web
' > index.html
git init
初始化空的 Git 版本库于 /root/myweb/.git/
ls -A
.git index.html
git status
# 位于分支 master
#
# 初始提交
#
# 未跟踪的文件:
# (使用 "git add ..." 以包含要提交的内容)
#
# index.html
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
git status -s
?? index.html
git add .
git status -s
A index.html
git status
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
# (使用 "git rm --cached ..." 撤出暂存区)
#
# 新文件: index.html
#
git rm --cached index.html
git status -s #此时文件变成未知状态
?? index.html
git add index.html
git commit -m "init"
[master(根提交) 0296300] init
1 file changed, 1 insertion(+)
create mode 100644 index.html
git status #此时工作区为空
# 位于分支 master
无文件要提交,干净的工作区
git ls-files
git rm index.html
rm 'index.html'
ls //此时目录中 index.html 没有了
git status //现在的状态是代码库没有了但是暂存区还有
# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD ..." 撤出暂存区)
#
# 删除: index.html
#
git commit -m "rm index.html"
[master bd2197d] rm index.html
1 file changed, 1 deletion(-)
delete mode 100644 index.html
git status
# 位于分支 master
无文件要提交,干净的工作区
git log
commit bd2197dcf3786ec628323ea6a1e782670b74b625
Author: lp <1078802338@qq.com>
Date: Sun Aug 29 14:15:46 2021 +0800
rm index.html
commit 02963004456252f41f00d53cd56b40c32e23df4a
Author: lp <1078802338@qq.com>
Date: Sun Aug 29 14:13:38 2021 +0800
init
git checkout 02963004456252f41f00d53cd56b40c32e23df4a
Note: checking out '02963004456252f41f00d53cd56b40c32e23df4a'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD 目前位于 0296300... init
ls #此时之前删除的 index.html 恢复回来了
index.html
注:不建议在返回某个历史提交的状态后对数据做修改,以防数据紊乱
git checkout master
ls #此时 index.html 没有了
cp /etc/passwd /etc/shadow /etc/hosts ./
ls
hosts passwd shadow
git add .
git status -s
A hosts
A passwd
A shadow
rm -rf *
git status
# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD ..." 撤出暂存区)
#
# 新文件: hosts
# 新文件: passwd
# 新文件: shadow
#
# 尚未暂存以备提交的变更:
# (使用 "git add/rm ..." 更新要提交的内容)
# (使用 "git checkout -- ..." 丢弃工作区的改动)
#
# 删除: hosts
# 删除: passwd
# 删除: shadow
#
git checkout -- * #撤销工作区的文件改动来恢复文件
ls
hosts passwd shadow
可以给某一次提交打标记,如用于版本号
echo 'this is my web
' > index.html
git add .
git commit -m "init"
git tag 1.0 #将当前commit标记为1.0
git tag #查看所有的tag
1.0
echo 'hello world
' >> index.html
git status -s
M index.html
git add .
git commit -m "modify index"
git tag 2.0 #将当前commit标记为2.0
git tag
1.0
2.0
git 中默认有一个名为 master 的主分支,还可以创建自定义的分支。
#查看分支
git branch
* master
git status #创建分支前应确保工作区是干净的
# 位于分支 master
无文件要提交,干净的工作区
git branch b1 #创建名为 b1 的分支
git branch
b1
* master # *号表示当前所在分支
#切换分支
git checkout b1
git branch
* b1
master
#修改分支内容
cp /etc/passwd ./
git add .
git commit -m "add passwd"
ls
hosts index.html passwd shadow
#切换回master分支
git checkout master
ls
hosts index.html passwd shadow
#将分支汇入主干
git merge b1 -m "merge b1 to master"
ls
hosts index.html passwd shadow
#删除分支
git branch -d b1
git branch
* master
#可以在工作区下创建一个 .gitignore 文件,包含所有不需要 commit 到版本库中的文件名
echo abc123 > abc123.txt
mkdir mytest
cp /etc/hosts mytest/
git status
# 位于分支 master
# 未跟踪的文件:
# (使用 "git add ..." 以包含要提交的内容)
#
# abc123.txt
# mytest/
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
vim .gitignore
.gitignore #忽略 .gitignore 文件自己
*.swp #忽略正在被 vi 编辑器打开时产生的以 .swp 为后缀的临时文件
abc123.txt
mytest/*
git status
# 位于分支 master
无文件要提交,干净的工作区
--------------- 部署本地gitlab服务器(使用docker搭建) ---------------
虚拟机要求至少 4G 内存
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://q7n9qid7.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
EOF
systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service
docker pull twang2218/gitlab-ce-zh
vim /etc/ssh/sshd_config
Port 2222
systemctl restart sshd
#退出当前 ssh 连接,再使用 2222 端口重新连接
ssh -p 2222 root@192.168.100.150
docker run -d \
-h gitlab \ #指定容器中的主机名
-p 443:443 -p 80:80 -p 22:22 \
--name gitlab \ #指定容器名
--restart always \
-v /srv/gitlab/config:/etc/gitlab \ #挂载gitlab的配置文件
-v /srv/gitlab/gitlab/logs:/var/log/gitlab \ #挂载gitlab的日志文件
-v /srv/gitlab/gitlab/data:/var/opt/gitlab \ #挂载gitlab的数据
twang2218/gitlab-ce-zh:latest
------------------------------------------------------------------------
docker run -d \
-h gitlab \
-p 443:443 -p 80:80 -p 22:22 \
--name gitlab \
--restart always \
-v /srv/gitlab/config:/etc/gitlab \
-v /srv/gitlab/gitlab/logs:/var/log/gitlab \
-v /srv/gitlab/gitlab/data:/var/opt/gitlab \
twang2218/gitlab-ce-zh:latest
#由于 gitlab 容器需要资源较多,需要等几分钟才能正常使用,等看到状态显示为 (healthy) 就代表已经启动了
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6cde725f2c3 twang2218/gitlab-ce-zh:latest "/assets/wrapper" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:22->22/tcp, :::22->22/tcp, 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp gitlab
1、设置管理员 root 用户的新密码,注意有格式要求,这里设置成 root@123
2、使用管理员 root 用户登录(root/root@123),登录后点击页面上方的【扳手】图标进入“管理区域”
gitlab 中重要的概念:
●群组(group):对应一个开发团队,比如开发部组、测试部组、运维部组等。
●项目(project):对应软件项目,比如开发部开发的每一个软件项目。
●成员(member):对应用户,用于将用户加入到组中,比如可将几个程序员加入到某一个软件项目组中,各自完成不同的功能模块的代码并上传,来共同完成整个软件项目。
3、创建名为 devops 的组
点击 【新建群组】
【群组路径】、【群组名称】、【描述】都设置成 devops
【可见等级】设置成 公开
其他都保持默认值,点击 【创建群组】
4、创建自己的账户,如 dl,账户加入到 devops 组中
点击页面上方的【扳手】图标进入“管理区域”
点击 【新建用户】
【姓名】设置成 dl
【用户名】设置成 dl
【电子邮箱】设置成 [email protected]
这里密码暂不设置,其他都保持默认值,先点击 【创建用户】
创建好用户后再点击右上角的【编辑】,可在这里设置密码,,如 abc@1234
5、创建项目 myweb,授权 kgc 是项目的主程序员,使其具有上传代码的权限
点击页面上方的【扳手】图标进入“管理区域”
点击 【新建项目】
【项目路径】群组选项下拉选择 devops
【项目名称】设置成 myweb
【项目描述】设置成 zyxm
【可见等级】设置成 公开
点击 【创建项目】
点击左边菜单【设置】->【成员】进入“项目成员”
【添加成员】中的【选择要邀请的成员】选择 kgc
【选择角色权限】选择 主程序员
点击 【添加到项目】
点击页面上方的【群组】->【您的群组】选择 devops
点击左边菜单【成员】
【添加成员到 devops】选择 ylx,主程序员
点击 【添加到群组】
6、使用自己创建的账户进行管理
退出当前账户,使用自己创建的账户dl 登录(kgc/abc@1234)
第一次登录会被强制要求修改密码(kgc/root@123),可与旧密码相同,再重新登录
cd /opt
git clone http://192.168.100.150/devops/myweb.git
ls -A myweb/
.git
cd myweb/
touch myxm.md
git add myxm.md
git commit -m "2"
git push -u origin master
cd ~/myweb/
#添加一个远程仓库上传代码方式的 url 名称为 origin
git remote add origin http://192.168.100.150/devops/myweb.git
#查看远程仓库
git remote
#推送本地代码到远程仓库
git push -u origin --all #输入账户名和密码(1269651556@qq.com/abc123456)
#推送 tag 标记到远程仓库
git push -u origin --tags #输入账户名和密码(1269651556@qq.com/abc123456)
点击右上角的用户选项选择【设置】
点击左边菜单【SSH密钥】,再点击页面中的【generate one】查看如何生成密钥
ssh-keygen -t rsa -C “[email protected]” -b 4096 #一路回车
cat ~/.ssh/id_rsa.pub
git@gitlab:devops/myweb.git
#查看当前的 remote 方式
git remote show origin
#更换上传代码方式
git remote remove origin #删除以前的方式
#添加远程仓库上传代码方式
git remote add origin [email protected]:devops/myweb.git
git remote show origin
#推送测试
echo 'new line
' >> index.html
git add .
git commit -m "modify index third"
git push
git push --tags
#刷新页面即可看到上传的代码和对应的 tag 标记