1. 系统环境准备
cat /etc/redhat-release #查看系统版本
CentOS Linux release 7.9.2009 (Core)
uname -r #查看内核版本
3.10.0-229.el7.x86_64
getenforce #确认Selinux关闭状态
Disabled
systemctl stop firewalld #关闭防火墙2. Git安装部署
yum install git
git config
--global 使用全局配置文件
--system 使用系统级配置文件
--local 使用版本库级配置文件
git config –-global user.name “your_username” # 配置git使用用户
git config –-global user.email “gitlab@mail.com” # 配置git使用邮箱
git config –-global color.ui true # 语法高亮
git config –-list
user.name=your_username
user.email=gitlab@mail.com
color.ui=true
cat .gitconfig
[user]
name = your_username
email = gitlab@mail.com
[color]
ui = true3.git初始化
初始化工作目录、对已存在的目录或者对已存在的目录都可进行初始化
mkdir git_data
cd git_data/
# 初始化
git init
# 查看工作区状态
git status
隐藏文件介绍:
branches # 分支目录
config # 定义项目特有的配置选项
description # 仅供git web程序使用
HEAD # 指示当前的分支
hooks # 包含git钩子文件
info # 包含一个全局排除文件(exclude文件)
objects # 存放所有数据内容,有info和pack两个子文件夹
refs # 存放指向数据(分支)的提交对象的指针
index # 保存暂存区信息,在执行git init的时候,这个文件还没有4.git基础命令
[root@git git_data]# git status
# 位于分支 master
# 初始提交
无文件要提交(创建/拷贝文件并使用 "git add" 建立跟踪)
[root@git git_data]# touch a b c
[root@git git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# a
# b
# c
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
[root@git git_data]# git add a
[root@git git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
# (使用 "git rm --cached <file>..." 撤出暂存区)
#
# 新文件: a
#
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# b
# c
[root@git git_data]# ll .git/
总用量 20
drwxr-xr-x 2 root root 6 8月 23 05:44 branches
-rw-r--r-- 1 root root 92 8月 23 05:44 config
-rw-r--r-- 1 root root 73 8月 23 05:44 description
-rw-r--r-- 1 root root 23 8月 23 05:44 HEAD
drwxr-xr-x 2 root root 4096 8月 23 05:44 hooks
-rw-r--r-- 1 root root 96 8月 23 07:06 index # git add a 把文件提交到了暂存区
drwxr-xr-x 2 root root 20 8月 23 05:44 info
drwxr-xr-x 5 root root 37 8月 23 07:06 objects
drwxr-xr-x 4 root root 29 8月 23 05:44 refs
[root@git git_data]# git add . # 使用git add . 或者* 添加目录中所有改动过的文件
[root@git git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
# (使用 "git rm --cached <file>..." 撤出暂存区)
#
# 新文件: a
# 新文件: b
# 新文件: c
[root@git git_data]# git rm --cached c
rm 'c'
[root@git git_data]# ll
总用量 0
-rw-r--r-- 1 root root 0 8月 23 07:05 a
-rw-r--r-- 1 root root 0 8月 23 07:05 b
-rw-r--r-- 1 root root 0 8月 23 07:05 c
[root@git git_data]# git status
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
# (使用 "git rm --cached <file>..." 撤出暂存区)
#
# 新文件: a
# 新文件: b
#
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# c
删除文件
1.先从暂存区撤回到工作区、然后直接删除文件
git rm --cached c
rm -f c
2.直接从暂存区域同工作区域一同删除文件命令
git rm -f b
[root@git git_data]# git commit -m "commit a" # 提交到本地仓库
[master(根提交) b4017a8] commit a
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
[root@git git_data]# git status
# 位于分支 master
无文件要提交,干净的工作区
修改文件名称两种方法
1. [root@git git_data]# mv a a.txt
[root@git git_data]# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add/rm <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 删除: a
#
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# a.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@git git_data]# git rm --cached a # 从暂存区删除a文件
rm 'a'
[root@git git_data]# git status
# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
#
# 删除: a
#
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# a.txt
[root@git git_data]# git add a.txt
[root@git git_data]# git status
# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
#
# 重命名: a -> a.txt # 识别到a和a.txt相同为重命名
[root@git git_data]# git commit -m "commit a.txt"
2.直接用git命令重命名
[root@git git_data]# git mv a.txt a 把工作区域和暂存区域的文件同时修改文件名称
[root@git git_data]# git status
# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
#
# 重命名: a.txt -> a
git commit -m "rename a.txt a"
git status 只能查看区域状态的不同,不能查看文件内容的变化。
git diff 查看内容的不同
[root@git git_data]# echo aaa > a
[root@git git_data]# git diff a # 比对本地工作目录和暂存区文件的不同
diff --git a/a b/a
index e69de29..72943a1 100644#
--- a/a
+++ b/a
@@ -0,0 +1 @@
+aaa
[root@git git_data]# git add a # 提交a文件到暂存区域、在用git diff是相同的
[root@git git_data]# git diff --cached a # 比对的是暂存区和本地仓库文件的不同处
diff --git a/a b/a
index e69de29..72943a1 100644
--- a/a
+++ b/a
@@ -0,0 +1 @@
+aaa
[root@git git_data]# git commit -m "modified a" # 提交后在比对则暂存区和本地仓库内容相同
[master 4c57a60] modified a
1 file changed, 1 insertion(+)
[root@git git_data]# git diff --cached a
[root@git git_data]#
git commit # 相当于虚拟机的镜像、任何操作都被做了一次快照,可恢复到任意一个位置
[root@git git_data]# git log 查看历史的git commit快照操作
commit 4c57a605997f511149bfec53d9018b503e77f961 # 哈希唯一标识的字符串
Author: lizhenya <lizhenya@qq.com> # 作者个人信息
Date: Thu Aug 23 07:54:23 2018 +0800 # 时间
modified a # -m 个人写的提交描述信息
commit 56925321114eb9adf09b42a733a6f9f3edd9ad65
Author: lizhenya <lizhenya@qq.com>
Date: Thu Aug 23 07:39:41 2018 +0800
rename a.txt a
commit 7adfca06559ef7739dffdc11ecb7fb8800a9931a
Author: lizhenya <lizhenya@qq.com>
Date: Thu Aug 23 07:36:47 2018 +0800
commit a.txt
commit b4017a876cfed78425fe58e7ecbcd49199ed5a11
Author: lizhenya <lizhenya@qq.com>
Date: Thu Aug 23 07:22:29 2018 +0800
[root@git git_data]# git log --oneline # 一行简单的显示commit信息
4c57a60 modified a
5692532 rename a.txt a
7adfca0 commit a.txt
b4017a8 commit a
[root@git git_data]# git log --oneline --decorate # 显示当前的指针指向哪里
4c57a60 (HEAD, master) modified a
5692532 rename a.txt a
7adfca0 commit a.txt
b4017a8 commit a
[root@git git_data]# git log -p # 显示具体内容的变化
[root@git git_data]# git log -1 # 只显示1条内容
恢复历史数据
1.只更改了当前目录
[root@git git_data]# echo "333" >> a
[root@git git_data]# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动) # 看提示使用此命令覆盖工作区的改动
#
# 修改: a
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@git git_data]# git checkout -- a # 从暂存区覆盖本地工作目录
[root@git git_data]# git status
# 位于分支 master
无文件要提交,干净的工作区
[root@git git_data]# cat a
aaa
2.修改了本地目录且同时提交到了暂存区
[root@git git_data]# echo ccc >> a # 添加新内容
[root@git git_data]# git add . # 提交到暂存区
[root@git git_data]# git diff --cached #比对暂存区和本地仓库的内容
diff --git a/a b/a
index 72943a1..959479a 100644
--- a/a
+++ b/a
@@ -1 +1,2 @@
aaa
+ccc
[root@git git_data]# git status
# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
#
# 修改: a
[root@git git_data]# git reset HEAD a # 本地仓库覆盖暂存区域
重置后撤出暂存区的变更:
M a
[root@git git_data]# git diff a
diff --git a/a b/a
index 72943a1..959479a 100644
--- a/a
+++ b/a
@@ -1 +1,2 @@
aaa
+ccc
[root@git git_data]# git diff --cached a
[root@git git_data]#
3.修改了工作目录后提交到了暂存区和本地仓库后进行数据恢复
echo bbb >>a # 提交新的bbb文件到a
git commit -m "add bbb"
echo ccc >> a
git commit -am "add ccc" # 这时候发现改错代码了,想还原某一次提交的文件快照
[root@git git_data]# git log --oneline
59ba2a9 add ccc
dbead4c add bbb
4c57a60 modified a
5692532 rename a.txt a
7adfca0 commit a.txt
b4017a8 commit a
`Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式 版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录`
[root@git git_data]# git reset --hard 4c57a60
HEAD 现在位于 4c57a60 modified a
`刚刚的操作实际上就是改变了一下HEAD版本指针的位置,就是你将HEAD指针放在那里,那么你的当前工作版本就会定位在那里,要想把内容再还原到最新提交的版本,先看查看下提交版本号`
[root@git git_data]# cat a # 打开发现回退错了,应该回退到bbb版本
aaa
[root@git git_data]# git log --oneline # 这时候查看log没有commit bbb的历史了
4c57a60 modified a
5692532 rename a.txt a
7adfca0 commit a.txt
b4017a8 commit a
`怎么搞得?竟然没有了add bbb这个提交版本记录?
原因很简单,因为我们当前的工作版本是历史的一个提交点,这个历史提交点还没有发生过add bbb 更新记录,所以当然就看不到了,要是想”还原到未来”的历史更新点,可以用git reflog命令来查看所有的历史记录:`
[root@git git_data]# git reflog # 使用git reflog 可查看总历史内容
4c57a60 HEAD@{0}: reset: moving to 4c57a60
59ba2a9 HEAD@{1}: commit: add ccc
dbead4c HEAD@{2}: commit: add bbb
4c57a60 HEAD@{3}: commit: modified a
5692532 HEAD@{4}: commit: rename a.txt a
7adfca0 HEAD@{5}: commit: commit a.txt
b4017a8 HEAD@{6}: commit (initial): commit a
[root@git git_data]# git reset --hard dbead4c # 然后使用reset回到bbb的版本内容下
HEAD 现在位于 dbead4c add bbb
[root@git git_data]# cat a
aaa
bbb5.git分支
`分支即是平行空间,假设你在为某个手机系统研发拍照功能,代码已经完成了80%,但如果将这不完整的代码直接提交到git仓库中,又有可能影响到其他人的工作,此时我们便可以在该软件的项目之上创建一个名叫”拍照功 能”的分支,这种分支只会属于你自己,而其他人看不到,等代码编写完成后再与原来的项目主分支合并下即可,这样即能保证代码不丢失,又不影响其他人的工作。`
`一般在实际的项目开发中,我们要尽量保证master分支是非常稳定的,仅用于发布新版本,平时不要随便直接修改里面的数据文件,而工作的时候则可以新建不同的工作分支,等到工作完成后在合并到master分支上面,所以团队的合作分支看起来会像上面图那样。`
[root@git git_data]# git log --oneline --decorate
dbead4c (HEAD, master) add bbb # 默认分支指向你最后一次的提交 HEAD头、指针
4c57a60 modified a
5692532 rename a.txt a
7adfca0 commit a.txt
b4017a8 commit a
`HEAD 指针指向哪个分支、说明你当前在哪个分支下工作`
[root@git git_data]# git branch testing # 新建testing分支
[root@git git_data]# git branch
* master # *号在哪里就说明当前在哪个分支上入下图所示
testing
[root@git git_data]# git log --oneline --decorate # 通过命令查看分支指向
dbead4c (HEAD, testing, master) add bbb
4c57a60 modified a
5692532 rename a.txt a
7adfca0 commit a.txt
b4017a8 commit a
[root@git git_data]# git checkout testing # 切换到testing分支、对应的HEAD指针也指向了testing
切换到分支 'testing'
[root@git git_data]# git branch
master
* testing
[root@git git_data]# touch test
[root@git git_data]# git add .
[root@git git_data]# git commit -m "commit test"
[root@git git_data]# git checkout master # 切换到master分支后指针指向到了master
切换到分支 'master'
[root@git git_data]# git branch
* master
testing
[root@git git_data]# ll # 正常情况下是没有test文件的、保证master分支是线上环境的
总用量 4
-rw-r--r-- 1 root root 8 8月 23 08:42 a
[root@git git_data]# touch master
[root@git git_data]# git add .
[root@git git_data]# git commit -m "commit master"
合并分支
[root@git git_data]# git merge testing # 提示输入描述信息 相当于git的-m参数
[root@git git_data]# git log --oneline --decorate
3258705 (HEAD, master) Merge branch 'testing'
f5ae1d8 commit master
ad4f25a (testing) commit test
dbead4c add bbb
4c57a60 modified a
5692532 rename a.txt a
7adfca0 commit a.txt
b4017a8 commit a
冲突合并
[root@git git_data]# echo "master" >> a
[root@git git_data]# git commit -am "modified a master"
[root@git git_data]# git checkout testing
切换到分支 'testing'
[root@git git_data]# git branch
master
* testing
[root@git git_data]# cat a
aaa
bbb
[root@git git_data]# echo "testing" >>a
[root@git git_data]# git commit -am "modified a on testing branch"
[root@git git_data]# git checkout master
[root@git git_data]# git merge testing
自动合并 a
冲突(内容):合并冲突于 a
自动合并失败,修正冲突然后提交修正的结果。
[root@git git_data]# cat a # 冲突的文件自动标识到文件里,手动更改冲突要保留的代码
[root@git git_data]# git commit -am "merge testing to master" # 进行提交即可
[root@git git_data]# git log --oneline --decorate
bba413d (HEAD, master) merge testing to master
34d7a55 (testing) modified a on testing branch
ec1a424 modified a master
3258705 Merge branch 'testing'
f5ae1d8 commit master
ad4f25a commit test
删除分支-d参数
[root@git git_data]# git branch -d testing
已删除分支 testing(曾为 34d7a55)。
[root@git git_data]# git branch
* master6.git标签使用
标签也是指向了一次commit提交,是一个里程碑式的标签,回滚打标签直接加标签号,不需要加唯一字符串不好记
[root@git git_data]# git tag -a v1.0 -m "aaa bbb master tesing version v1.0" # -a指定标签名字 -m 指定说明文字
[root@git git_data]# git tag
v1.0
[root@git git_data]# git tag -a v2.0 dbead4c -m "add bbb version v2.0" # 指定某一次的提交为标签
[root@git git_data]# git show v1.0 # 查看v1.0的信息 git show 加标签查看
[root@git git_data]# git reset --hard v2.0 # 直接还原数据到v2.0
HEAD 现在位于 dbead4c add bbb
[root@git git_data]# ll
总用量 4
-rw-r--r-- 1 root root 8 8月 23 11:26 a
-rw-r--r-- 1 root root 0 8月 23 11:25 b
[root@git git_data]# git tag -d v2.0 # 删除标签 -d参数GitLab使用
1.GitLab简介
GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用。
常用的网站:
官网:https://about.gitlab.com/
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/2.环境准备
安装环境:
1、 CentOS 6或者7
2、 2G内存(实验)生产(至少4G)
3、 安装包:gitlab-ce-15.11.13-ce
4、 禁用防火墙,关闭selinux
https://about.gitlab.com/installation/#centos-7 # git官网
yum install -y curl policycoreutils-python openssh-server # 安装依赖
cd /home/www/tools
rz -bye gitlab-ce-15.11.13-ce.0.el7.x86_64.rpm # 上传gitlab安装包 下载方式可通过国内清华源gitlab-ce社区版本下载
vim /etc/gitlab/gitlab.rb # gitlab 配置文件
更改url地址为本机IP地址 external_url 'http://10.0.0.203'
gitlab-ctl reconfigure # 这个步骤会初始化所有组件,需要 5-10 分钟
/opt/gitlab/ # gitlab的程序安装目录
/var/opt/gitlab # gitlab目录数据目录
/var/opt/gitlab/git-dfata # 存放仓库数据
gitlab-ctl status # 查看目前gitlab所有服务运维状态 都必须为run
[root@gitlab data]# gitlab-ctl status
run: alertmanager: (pid 1504) 389s; run: log: (pid 1503) 389s
run: gitaly: (pid 1475) 389s; run: log: (pid 1474) 389s
run: gitlab-exporter: (pid 1485) 390s; run: log: (pid 1483) 390s
run: gitlab-kas: (pid 1482) 390s; run: log: (pid 1477) 390s
run: gitlab-workhorse: (pid 1501) 390s; run: log: (pid 1493) 390s
run: logrotate: (pid 1469) 390s; run: log: (pid 1466) 390s
run: nginx: (pid 1484) 390s; run: log: (pid 1478) 390s
run: node-exporter: (pid 1500) 390s; run: log: (pid 1491) 390s
run: postgres-exporter: (pid 2300) 32s; run: log: (pid 1488) 390s
run: postgresql: (pid 2345) 10s; run: log: (pid 1476) 390s
run: prometheus: (pid 1497) 390s; run: log: (pid 1496) 390s
run: puma: (pid 2282) 42s; run: log: (pid 1487) 390s
run: redis: (pid 1490) 390s; run: log: (pid 1489) 390s
run: redis-exporter: (pid 1495) 390s; run: log: (pid 1494) 390s
run: sidekiq: (pid 2237) 61s; run: log: (pid 1481) 390s
gitlab-ctl stop # 停止gitlab服务
gitlab-ctl stop nginx # 单独停止某个服务
gitlab-ctl tail # 查看所有服务的日志
通过浏览器输入IP地址进行访问gitlab
10.0.0.203
获取初始 root 密码
sudo cat /etc/gitlab/initial_root_password
Gitlab的服务构成:
nginx: 静态web服务器
gitlab-workhorse: 轻量级的反向代理服务器
logrotate:日志文件管理工具
postgresql:数据库
redis:缓存数据库
sidekiq:用于在后台执行队列任务(异步执行)。(Ruby)
unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。(Ruby Web Server,主要使用Ruby编写)
3.gitlab汉化
1、下载汉化补丁
git clone https://gitlab.com/xhang/gitlab.git
2、查看全部分支版本
git branch -a
3、对比版本、生成补丁包
git diff remotes/origin/10-2-stable remotes/origin/10-2-stable-zh > ../10.2.2-zh.diff
4、停止服务器
gitlab-ctl stop
5、打补丁
patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < /tmp/10.2.2-zh.diff
6、启动和重新配置
gitlab-ctl start
gitlab-ctl reconfigure4. gitlab配置使用
1、配置外观
管理区域-外观
2、关闭自动注册-可根据实际需求操作
管理区域-设置-关闭自动注册
3、创建组-用户-项目
创建组5.设置组名称、描述等创建群组


6.创建用户


7.设置密码


8.验证

9.把用户添加到组里面
管理区域-选择创建的oldboy组进行添加用户、权限给开发人员-增加用户到群组




10.创建新空白项目

6、登陆dev用户测试是否能看到空的git-test仓库
7、添加ssh-keys到gitlab 注:一个服务器的key只能添加到一个gitlab服务器上,一个用户可以添加多个key
ssh-keygen -t rsa
8、添加远程仓库、推送本地代码到远程仓库
git remote add origin git@10.0.0.200:zy/git_test.git # 添加远程仓库
git remote rename origin old-origin # 远程 origin 如果已经存在则重新命名或者新添加仓库名称不同
git push -u origin --all # 推送代码到远程仓库
8、克隆代码到另外一台主机
如果不做认证会让输入gitlab的密码、我们使用key进行认证
ssh-keygen -t rsa
把公钥复制到dev用户下进行测试
然后在克隆代码
git clone git@10.0.0.200:zy/git_test.git
测试推送代码到dev下
git branch dev
git checkout dev
touch dev
git add .
git commit -m "add dev"
git push -u origin dev # 推送dev分支到远程仓库
提交合并请求进行分支合并到master主分支
合并后在gitlab服务端master上没有dev、要先进行pull
cd /root/git_data
git pull
9、设置保护主分支

使用过程中遇到问题及解决
1.git checkout -b dev origin/dev
fatal: Cannot update paths and switch to branch 'dev' at the same time.
Did you intend to checkout 'origin/dev' which can not be resolved as commit?
#这个错误可能是因为 origin/dev 引用没有正确设置。我们换一种方式来恢复 dev 分支。
解决:
# 基于刚才 fetch 下来的 dev 分支创建本地分支
git checkout -b dev FETCH_HEAD
验证:
[root@gitlab git_test]# git branch
* dev
main
[root@gitlab git_test]# ls -la
total 0
drwxr-xr-x 4 root root 47 May 26 18:57 .
drwxr-xr-x 5 root root 61 May 26 18:53 ..
-rw-r--r-- 1 root root 0 May 26 18:57 a.txt
drwxr-xr-x 8 root root 181 May 26 18:57 .git
drwxr-xr-x 2 root root 17 May 26 18:57 git_test
#仓库里出现了一个 git_test 子目录,这看起来不太对劲。这通常表示你在一个 Git 仓库内部又克隆或创建了另一个 Git 仓库,这可能会导致混乱。
#你的当前工作目录是 /data/git_test/git_test,这是一个嵌套的目录。你之前克隆仓库时,在 /data/git_test 目录下又执行了 git clone,导致创建了嵌套的仓库结构。
解决方式:
# 1. 回到上一层目录(真正的 Git 仓库根目录)
cd /data/git_test
# 2. 确认你在正确的位置
pwd
# 应该显示:/data/git_test
# 4. 查看当前分支
git branch
# 5. 将内层的 dev 文件移动到当前目录
mv git_test/dev .
# 6. 删除空的嵌套目录
rmdir git_test
# 7. 查看当前状态
[root@gitlab git_test]# git status
# On branch dev
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: git_test/dev
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# dev
no changes added to commit (use "git add" and/or "git commit -a")
#现在你在正确的仓库根目录了(/data/git_test)。Git 检测到:
#删除了 git_test/dev(原来的嵌套文件)
#新增了 dev(你移出来的新文件)
#这其实只是重命名/移动文件,我们来清理这个状态。
解决方式:
# 1. 添加所有更改(Git 会自动检测到文件移动)
git add -A
# 2. 查看状态,确认 Git 识别为重命名
git status
# 应该显示:renamed: git_test/dev -> dev
# 3. 提交更改
git commit -m "Move dev file from nested directory to root"
# 4. 推送到远程
git push origin dev
方法2:手动添加和删除
# 1. 添加新文件
git add dev
# 2. 删除旧文件
git rm git_test/dev
# 3. 提交
git commit -m "Move dev file to root directory"
# 4. 推送
git push origin dev
最终验证成果:
# 1. 确认目录结构
pwd
# 应该是 /data/git_test
ls -la
# 应该看到:
# drwxr-xr-x .git
# -rw-r--r-- dev
# 不应该再有 git_test 子目录
# 2. 查看 Git 状态
git status
# 应该显示:nothing to commit, working directory clean
# 3. 查看分支
git branch
# 应该显示 * dev
# 4. 查看远程状态
[root@gitlab git_test]# git remote -v
origin git@10.0.0.200:zy/git_test.git (fetch)
origin git@10.0.0.200:zy/git_test.git (push)Gitlab备份
对gitlab进行备份将会创建一个包含所有库和附件的归档文件。对备份的恢复只能恢复到与备份时的gitlab相同的版本。将gitlab迁移到另一台服务器上的最佳方法就是通过备份和还原。
gitlab提供了一个简单的命令行来备份整个gitlab,并且能灵活的满足需求。
备份文件将保存在配置文件中定义的backup_path中,文件名为TIMESTAMP_gitlab_backup.tar,TIMESTAMP为备份时的时间戳。TIMESTAMP的格式为:EPOCH_YYYY_MM_DD_Gitlab-version。
如果自定义备份目录需要赋予git权限
配置文件中加入
gitlab_rails['backup_path'] = '/data/backup/gitlab'
gitlab_rails['backup_keep_time'] = 604800 备份保留的时间(以秒为单位,这个是七天默认值),
mkdir /data/backup/gitlab
chown -R git.git /data/backup/gitlab
完成后执行gitlab-ctl reconfigure
评论 (0)