GitLab 搭建和相关问题
1.搭建
官网地址:Releases | GitLab
1.1 Ubuntu本地安装GitLab 指南
1.安装需要的库和软件(sudo apt install net-tools)
sudo apt-get install curl openssh-server ca-certificates postfix
2.添加GitLab的包并进行安装
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh |sudo bash
sudo apt-get install gitlab-ce
网络可能不好,需要重试几次
PS:也可以直接下载安装包
下载安装包,访问链接:
https://packages.gitlab.com/gitlab/gitlab-ce
这里选择最新版本,gitlab-ce_12.1.4-ce.0_amd64.deb
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/bionic/gitlab-ce_15.8.5-ce.0_amd64.deb/download.deb
本地安装
dpkg -i download.deb
出现以下提示,表示安装成功
(正在读取数据库 ... 系统当前共安装有 306913 个文件和目录。)
准备解压 download.deb ...
JSON file with existing configuration not found inside /opt/gitlab/embedded/nodes.
Skipping config check.
gitlab preinstall:
gitlab preinstall: This node does not appear to be running a database
gitlab preinstall: Skipping version check, if you think this is an error exit now
gitlab preinstall:
gitlab preinstall:
gitlab preinstall: This node does not appear to be running puma and/or sidekiq services
gitlab preinstall: Skipping unmigrated data check, if you think this is an error exit now
gitlab preinstall:
正在解压 gitlab-ce (15.8.5-ce.0) 并覆盖 (15.8.5-ce.0) ...
正在设置 gitlab-ce (15.8.5-ce.0) ...
It looks like GitLab has not been configured yet; skipping the upgrade script.*. *.
*** ***
***** *****
.****** *******
******** ********
,,,,,,,,,***********,,,,,,,,,
,,,,,,,,,,,*********,,,,,,,,,,,
.,,,,,,,,,,,*******,,,,,,,,,,,,
,,,,,,,,,*****,,,,,,,,,.
,,,,,,,****,,,,,,
.,,,***,,,,
,*,._______ __ __ __
/ ____(_) /_/ / ____ _/ /_
/ / __/ / __/ / / __ `/ __ \
/ /_/ / / /_/ /___/ /_/ / /_/ /
\____/_/\__/_____/\__,_/_.___/
Thank you for installing GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your GitLab instance by running the following command:
sudo gitlab-ctl reconfigureFor a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.mdHelp us improve the installation experience, let us know how we did with a 1 minute survey:
https://gitlab.fra1.qualtrics.com/jfe/form/SV_6kVqZANThUQ1bZb?installation=omnibus&release=15-8
3.配置GitLab
PS:unbuntu 下vi 输入i 不进入insert插入模式
原因:ubuntu预装的是vim tiny版本,需要的是vim full版本 —执行 sudo apt install vim
sudo vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.31.75:8081'
4.启动GitLab
输入下面的命令:
sudo gitlab-ctl stop //--停止服务
sudo gitlab-ctl reconfigure //--启动服务
sudo gitlab-ctl restart //--重启所有gitlab组件
sudo gitlab-ctl start //--启动所有gitlab组件
sudo gitlab-ctl status //检查状态
6.初始化密码
PS:默认密码在/etc/gitlab/initial_root_password
sudo gitlab-rails console -e production
yys@yys-All-Series:/opt/gitlab/bin$ sudo gitlab-rails console -e production
--------------------------------------------------------------------------------
Ruby: ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c5) [x86_64-linux]
GitLab: 15.10.1-jh (ab41b08617e) EE
GitLab Shell: 14.18.0
PostgreSQL: 13.8
------------------------------------------------------------[ booted in 35.36s ]
Loading production environment (Rails 6.1.7.2)
irb(main):001:0> u=User.where(id:1).first
=> #<User id:1 @root>
=> "yys201650915240"
irb(main):010:0> u.password='yys201650915240'
=> "yys201650915240"
irb(main):011:0> u.password_confirmation='yys201650915240'
=> "yys201650915240"
irb(main):012:0> u.save!
=> true
irb(main):013:0> exit
如果设置简单密码,会不通过
7.配置GitLab开机自启动、关闭开机自启动
启用 Gitlab开机自启动 :
systemctl enable gitlab-runsvdir.service
禁止 Gitlab 开机自启动:
systemctl disable gitlab-runsvdir.service
在 Docker 中安装和使用 GitLab,你可以按照以下步骤进行¹²³⁴⁵:
-
首先,拉取 GitLab 镜像:
docker pull gitlab/gitlab-ce
-
创建挂载目录:
mkdir -p /home/gitlab/etc/gitlab mkdir -p /home/gitlab/var/log mkdir -p /home/gitlab/var/opt
-
启动 GitLab 容器:
docker run -d -p 443:443 -p 8081:80 -p 222:22 --name gitlab --restart always --privileged=true -v /home/gitlab/etc/gitlab:/etc/gitlab -v /home/gitlab/var/log:/var/log/gitlab -v /home/gitlab/var/opt:/var/opt/gitlab gitlab/gitlab-ce
-
配置 GitLab:
- 进入容器:
docker exec -it gitlab bash
- 修改
gitlab.rb
文件:vim /etc/gitlab/gitlab.rb
external_url 'http://你的IP地址:8081' gitlab_rails['gitlab_ssh_host'] = '你的IP地址' gitlab_rails['gitlab_shell_ssh_port'] = 222
- 应用配置,让修改后的配置生效:
gitlab-ctl reconfigure
- 重启服务:
gitlab-ctl restart
- 退出容器:
exit
- 进入容器:
-
使用浏览器打开 GitLab,URL 为
http://你的IP地址:8081
。 -
获取root密码
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
2.上传
步骤如下:
-
在 GitLab 上创建一个新项目,选择 "Create blank project",编辑项目名称。
-
在本地电脑上创建一个空的文件夹,用于存放 GitLab 项目。你可以右键点击文件夹,选择 "Git Bash Here"。
-
在 Git Bash 中输入以下命令,克隆 GitLab 项目到本地文件夹。注意替换
<服务器IP地址>
为实际的服务器 IP 地址。git clone http://<服务器IP地址>/root/mobile.git
执行命令后,输入你的 GitLab 用户名和密码。
-
将要上传的所有代码和文件复制到刚才克隆的本地项目文件夹中。
-
在 Git Bash 中进入该目录,如果需要切换分支,确保分支存在于 GitLab 上。
cd 本地项目目录
如果需要上传到其他分支,可以在 GitLab 上先创建该分支,例如
master
。 -
执行以下命令,将本地的代码上传到 GitLab 项目中。如果是上传到
master
分支,可以省略branch_name
部分。git add . git commit -m "Your commit message" git push origin branch_name
输入用户名和密码,将代码推送到 GitLab 项目中。
通过这些步骤,你就能够在 GitLab 上创建项目,将本地代码上传到 GitLab,并在需要时切换分支。
然后输入代码:
git checkout master
出现报错error: pathspec 'master' did not match any file(s) known to git
1、查看一下分支状况:
git branch -a
* main
remotes/origin/HEAD -> origin/main
remotes/origin/main
2、若没有看到你想要的分支,先获取全部分支:
git fetch
* main
remotes/origin/HEAD -> origin/main
remotes/origin/main
remotes/origin/master
3、此时再查看一下分支情况
git branch -a
main
* master
remotes/origin/HEAD -> origin/main
remotes/origin/main
remotes/origin/master
8、依次输入代码
git init
git add ./
git commit -m '注释'
git push
(输完之后,可能会弹出框,输入邮箱和密码)
- 下载
gie clone 地址
- 删除,如删除文件test_fanqie.py
git rm path/to/test_fanqie.py
git commit -m "删除 test_fanqie.py 文件"
git push origin <your-branch-name>
多台电脑上进行开发的时候需要用github进行同步
查看远程分支
git remote -v
origin https://github.com/Link-yu/FlaskProject.git (fetch) origin https://github.com/Link-yu/FlaskProject.git (push
从远程获取最新版本到本地
git fetch origin main:temp
比较本地仓库与下载的temp分支
#q可以退出比较diff
git diff temp
合并temp分支到本地的master分支
git merge temp
删除temp分支
git branch -d temp
方法1:
如果你在使用Git时,每次push或pull都需要输入用户名和密码,这可能是因为你使用的是HTTPS方式与Git远程仓库交互。你可以通过以下步骤解决这个问题:
在服务器端或者本地PC上运行以下命令:
git config --global credential.helper store
这个命令会在本地生成一个文本来存储相关信息¹²。
当你再次执行git push或者pull时,它会提示你输入账号密码。这一次之后就不需要再次输入密码了¹²。
方法2:
- 配置 SSH 密钥
如果你使用的是基于 SSH 协议的 Git 远程仓库,你可以配置 SSH 密钥,以免每次都输入密码。首先,你需要生成一对 SSH 密钥,然后将公钥添加到你的 Git 远程仓库中。然后,将私钥添加到 SSH 代理中,以便在需要时自动提供身份验证。
你可以使用以下命令生成 SSH 密钥:
ssh-keygen
然后,将公钥添加到你的 Git 远程仓库中。具体操作方式取决于你使用的 Git 托管服务。例如,如果你使用 GitHub,你可以在你的 GitHub 账户设置中添加 SSH 公钥。
最后,你可以使用以下命令将私钥添加到 SSH 代理中:
ssh-add ~/.ssh/id_rsa
这将在 SSH 代理中添加 ~/.ssh/id_rsa
私钥,并且在需要时自动提供身份验证。
希望这可以帮助你取消每次输入密码。
上面方法二报错ssh-add ~/.ssh/id_rsa Could not open a connection to your authentication agent.
如果在运行 ssh-add
命令时出现错误 "Could not open a connection to your authentication agent",这可能是因为 SSH 代理没有启动,或者你的 SSH 密钥不在默认位置。
你可以通过以下步骤来解决这个问题:
- 启动 SSH 代理
在终端中运行以下命令启动 SSH 代理:
eval "$(ssh-agent -s)"
这将在当前 shell 中启动 SSH 代理。
- 添加 SSH 密钥
运行以下命令将 SSH 密钥添加到 SSH 代理中:
ssh-add /path/to/your/ssh/key
请确保替换 /path/to/your/ssh/key
为你的 SSH 私钥文件的实际路径。
如果你的 SSH 密钥不在默认位置,你可能需要在运行 ssh-add
命令之前设置 SSH_AUTH_SOCK
环境变量,以指定 SSH 代理套接字的位置。例如:
export SSH_AUTH_SOCK=/path/to/your/ssh-agent.sock
请注意,你需要将 /path/to/your/ssh-agent.sock
替换为你的 SSH 代理套接字的实际路径。
希望这可以帮助你解决这个问题。
6.git报错:Please commit your changes or stash them before you merge. Aborting
然后执行stash操作将工作区清空:
git stash
7.怎么解决error: failed to push some refs to
:Traceback (most recent call last): File "C:\Users\yys53\OneDrive\python\bestscript\git_tb.py", line 86, in <module> test_push() File "C:\Users\yys53\OneDrive\python\bestscript\git_tb.py", line 82, in test_push repo.git.push('origin', 'main') File "C:\Users\yys53\OneDrive\python\install\lib\site-packages\git\cmd.py", line 741, in <lambda> return lambda *args, **kwargs: self._call_process(name, *args, **kwargs) File "C:\Users\yys53\OneDrive\python\install\lib\site-packages\git\cmd.py", line 1315, in _call_process return self.execute(call, **exec_kwargs) File "C:\Users\yys53\OneDrive\python\install\lib\site-packages\git\cmd.py", line 1109, in execute raise GitCommandError(redacted_command, status, stderr_value, stdout_value) git.exc.GitCommandError: Cmd('git') failed due to: exit code(1) cmdline: git push origin main stderr: 'To http://192.168.31.166:8081/gitlab-instance-efa9e55c/mobile.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'http://192.168.31.166:8081/gitlab-instance-efa9e55c/mobile.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.'
这个错误通常发生在本地的git仓库和远程的git仓库同步时,出现了冲突或者版本不一致等问题。解决方法是按照错误提示先将远程的代码更新到本地,然后再进行push操作。具体步骤如下:
进入本地的代码目录,在命令行窗口中输入以下命令,将远程分支的最新代码更新到本地分支:
git pull origin main
这里假设你要将远程的main
分支更新到本地的main
分支。如果你的本地分支不是main
,请将命令中的main
替换成你的本地分支名。
Author identity unknown *** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: unable to auto-detect email address (got 'yys53@DESKTOP-MMEI74D.(none)')
这个错误消息是由于Git无法确定你的身份信息(用户名和电子邮件地址)而引起的。为了解决这个问题,你需要按照错误消息中提供的指示设置你的Git身份信息。以下是具体的步骤:
-
打开终端(命令提示符或终端窗口)。
-
运行以下命令,将你的电子邮件地址和用户名设置为Git的默认身份信息。请将以下命令中的"you@example.com"和"Your Name"替换为你的电子邮件地址和用户名:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
确保你输入的电子邮件地址和用户名是你在Git中使用的有效信息。
- 重新运行你的
git commit
命令,这次应该不会再出现 "Author identity unknown" 错误。
如果你只想在当前仓库中设置身份信息而不是全局设置,可以省略 --global
参数,像这样:
git config user.email "you@example.com"
git config user.name "Your Name"
然后,在当前仓库中的提交将使用这些设置的身份信息。
完成上述步骤后,你就可以成功提交你的更改了。如果你以后使用不同的身份信息,只需重复上述步骤,将新的信息配置到Git中即可。
PS C:\Users\yys53\OneDrive\python\bestscript> git config user.email "534640040@qq.com"
PS C:\Users\yys53\OneDrive\python\bestscript> git config user.name "root"
当 Windows 上的 Jenkins 报错,出现如下错误信息时:
1.获取更新origin.fetch
Traceback (most recent call last):
File "C:\Users\yys53\OneDrive\python\bestscript\git_tb.py", line 42, in test_fetch_merge
origin.fetch()
File "D:\python\lib\site-packages\git\remote.py", line 1014, in fetch
res = self._get_fetch_info_from_stderr(proc, progress, kill_after_timeout=kill_after_timeout)
File "D:\python\lib\site-packages\git\remote.py", line 853, in _get_fetch_info_from_stderr
proc.wait(stderr=stderr_text)
File "D:\python\lib\site-packages\git\cmd.py", line 602, in wait
raise GitCommandError(remove_password_if_present(self.args), status, errstr)
git.exc.GitCommandError: Cmd('git') failed due to: exit code(128)
cmdline: git fetch -v -- origin
stderr: 'fatal: detected dubious ownership in repository at 'C:/Users/yys53/OneDrive/python/bestscript''During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\yys53\OneDrive\python\bestscript\git_tb.py", line 180, in <module>
test_fetch_merge(ip_port = ip_port)
File "C:\Users\yys53\OneDrive\python\bestscript\git_tb.py", line 50, in test_fetch_merge
repo.git.stash()
File "D:\python\lib\site-packages\git\cmd.py", line 739, in <lambda>
return lambda *args, **kwargs: self._call_process(name, *args, **kwargs)
File "D:\python\lib\site-packages\git\cmd.py", line 1315, in _call_process
return self.execute(call, **exec_kwargs)
File "D:\python\lib\site-packages\git\cmd.py", line 1110, in execute
raise GitCommandError(redacted_command, status, stderr_value, stdout_value)
git.exc.GitCommandError: Cmd('git') failed due to: exit code(128)
cmdline: git stash
stderr: 'fatal: detected dubious ownership in repository at 'C:/Users/yys53/OneDrive/python/bestscript'
'C:/Users/yys53/OneDrive/python/bestscript' is owned by:
'S-1-5-18'
but the current user is:
'S-1-5-21-431014526-483197269-1828643107-1001'
To add an exception for this directory, call:git config --global --add safe.directory C:/Users/yys53/OneDrive/python/bestscript'
原因通常是与用户权限有关的问题。这种问题通常会在不同用户之间克隆仓库时出现,例如,在重新安装 Windows 后,但使用以前克隆的 Git 仓库(在不同的分区)时可能会遇到此问题。
为了解决这个问题,你可以按照以下步骤操作:
-
在 Jenkins 上运行
whoami
命令,以获取当前 Jenkins 进程的用户信息,例如 "system"。 -
右键点击仓库文件夹,选择"属性",然后选择"安全性",接着选择"高级"选项。
-
在"所有者"行上,点击"更改"按钮。
-
找到你的用户(你可以点击"高级...",然后点击"现在查找",最后选择你的用户)。
-
确认更改。
-
在更改屏幕上,启用"替换子容器和对象的所有者"选项。
这些步骤应该能够解决这个错误。通过运行 whoami
命令,你可以确保为正确的用户设置了权限,以解决 Jenkins 报错的问题。
或者在cmd运行git push 弹窗输入用户名密码
10.stderr: error: The following untracked working tree files would be overwritten by merge
报错内容
Cmd('git') failed due to: exit code(1) cmdline: git merge origin/main stdout: 'Updating 4da5118..4d4c497' stderr: 'error: The following untracked working tree files would be overwritten by merge:
......
Please move or remove them before you merge.
Aborting'
这次报错,repo.git.merge到本地报错,手动删除本地这些文件才可以合并(不是删除上传push那个机器文件),也可以用下面方面
这个错误消息表明在尝试将远程分支(origin/main)合并到本地分支时,Git 发现了一些未跟踪的文件会被合并覆盖,因此 Git 阻止了合并操作。你需要执行以下步骤来解决这个问题:
- 备份未跟踪的文件:首先,你应该备份这些未跟踪的文件,以确保不会丢失任何重要数据。你可以将它们复制到其他目录中,或者使用 Git 的 stash 功能来保存它们,以便稍后还原。
git stash save "未跟踪文件备份"
- 删除未跟踪的文件:一旦你确保了备份,可以删除这些未跟踪的文件。你可以使用下面的命令删除它们:
git clean -f
这将删除未跟踪的文件,使你的工作目录变得干净。
- 执行合并操作:现在,再次尝试将远程分支合并到本地分支:
git merge origin/main
这次应该能够成功合并,因为本地工作目录不再包含会被覆盖的未跟踪文件。
- 恢复备份(如果需要):如果你在第一步中备份了未跟踪的文件,现在可以使用 Git stash 恢复它们:
git stash pop
这将还原你之前备份的文件到工作目录中。
请确保在删除未跟踪文件之前进行备份,以防止意外删除重要数据。此外,如果这些未跟踪的文件确实不再需要,那么删除它们是一个好主意,以保持你的工作目录整洁。
11.error: failed to push some refs to xxx
PS C:\Users\yys53\OneDrive\python\bestscript> git push
warning: redirecting to http://192.168.31.166:8081/root/mobile.git/
To http://192.168.31.166:8081/root/mobile
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'http://192.168.31.166:8081/root/mobile'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. If you want to integrate the remote changes,
hint: use 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
这个错误可能是由于你的 Git 仓库中存在一些损坏的对象。你可以尝试以下步骤来解决这个问题:
- 首先,你可以运行
git fsck
命令来检查你的仓库中是否存在损坏的对象。
git fsck
Checking object directories: 100% (256/256), done. Checking objects: 100% (3/3), done.
error: refs/remotes/origin/main-DESKTOP-88GCLJC: invalid sha1 pointer 0000000000000000000000000000000000000000 dangling tree 3648f9efee5600fdb116353259974d11bbedfedc dangling tree 212f97c60e69013d4e580e480432755932b4fad0 dangling commit f052460f892f0f0187b9a25fcda31da5856eb33a dangling tree 98755fbdfa4c5ca8f245c6bcbca3f23ead169339 dangling tree 083d4248a67f9e020212b51e3909f0395e949e63
这个错误表明 Git 无法锁定并删除这个引用,可能是因为这个引用已经损坏了。你可以尝试直接删除这个引用的文件。在 Git 中,所有的引用都是以文件的形式存储在 .git
目录下的。你可以使用以下命令来删除这个文件:
rm .git/refs/remotes/origin/main-DESKTOP-88GCLJC
完成以上步骤后,你可以再次尝试 git pull
命令。
git pull origin main
搭建自己的GitLab实例后,确保数据备份是非常重要的,以防服务器硬件故障、数据损坏或其他问题。以下是备份GitLab数据的一般步骤:
-
定期备份数据:定期执行备份操作以确保数据的安全性。您可以设置备份计划,每天或每周自动运行备份任务。
-
使用GitLab提供的备份工具:GitLab提供了内置的备份工具,使数据备份变得容易。默认情况下,备份数据将存储在GitLab服务器的
/var/opt/gitlab/backups
目录中。 -
手动备份:您可以手动执行备份操作,使用以下命令:
sudo gitlab-rake gitlab:backup:create
这将创建一个备份文件,文件名格式通常为
<timestamp>_gitlab_backup.tar
,并将其保存在备份目录中。 -
数据存储位置:确保备份数据存储在安全位置,最好是在另一个物理服务器或云存储中。这可以通过将备份数据复制到远程位置来实现。
-
恢复测试:定期测试备份的可用性和有效性。尝试还原备份数据以确保它们可以成功还原到GitLab实例。
-
备份配置文件:除了GitLab数据,还应该备份GitLab的配置文件,以确保在灾难恢复时可以还原系统设置。通常,GitLab配置文件存储在
/etc/gitlab
目录下。 -
版本控制备份脚本:将备份脚本和配置文件存储在版本控制系统中,以确保备份策略和配置更改的历史记录。这可以使用Git或其他版本控制工具来实现。
-
文档记录:记录备份和恢复过程,包括备份位置、计划、还原步骤和联系人信息。这有助于简化灾难恢复。
-
加密和访问控制:确保备份数据的存储和传输是加密的,并且只有授权的人可以访问备份数据。
-
监控备份健康:设置监控系统来检查备份任务的状态,并及时报警,以确保备份任务正常运行。
请注意,上述步骤可能需要根据您的具体环境和需求进行调整。保持数据备份的可用性和完整性对于维护GitLab实例的可靠性至关重要。
注:同版本gitlab才可以恢复
要还原GitLab备份,您可以使用GitLab提供的 gitlab-rake
命令。以下是一般的还原步骤:
-
确保备份文件可用: 在进行还原之前,请确保备份文件是可用的,它通常是以
.tar
格式的文件。确保备份文件存储在一个安全且可访问的位置。 -
停止GitLab服务: 在还原过程中,您需要停止GitLab服务,以确保数据库和存储区不受新数据更改的影响。使用以下命令停止GitLab:
sudo gitlab-ctl stop
-
执行还原操作: 使用
gitlab-rake
命令执行还原操作。以下是还原命令的示例,以gitlab2_gitlab_backup.tar名字为例子:sudo gitlab-rake gitlab:backup:restore BACKUP=gitlab2
其中,
backup_file_name
是要还原的备份文件的名称。请将其替换为实际备份文件的名称。 -
启动GitLab服务: 在还原完成后,启动GitLab服务以让其重新运行:
sudo gitlab-ctl start
-
清理缓存: 在还原后,建议清理GitLab的缓存以确保一切正常运行:
sudo gitlab-rake cache:clear
-
重启服务器: 在某些情况下,可能需要重启服务器以确保所有更改生效。
请注意,还原操作会将GitLab还原到备份文件中包含的状态,这包括数据库、存储库和其他数据。还原后,您将返回到备份时的状态,因此请确保备份文件是您想要的版本。
确保在执行还原之前备份现有的数据,以防还原不成功或不如预期。对于更大的GitLab实例,还原操作可能需要一些时间,请耐心等待。确保备份和还原过程的顺利运行,以确保您的数据得到妥善处理。
报错1:
root@mnas:/# gitlab-rake gitlab:backup:restore BACKUP=gitlab
2024-10-01 04:47:45 UTC -- Unpacking backup ...
tar: gitlab_gitlab_backup.tar: Cannot open: Permission denied
tar: Error is not recoverable: exiting now
2024-10-01 04:47:45 UTC -- Unpacking backup failed
2024-10-01 04:47:45 UTC -- Deleting backup and restore PID file ... done遇到 "Permission denied" 错误时,通常是由于备份文件的权限设置不当,导致 GitLab 容器中的进程无法访问或解压该文件。以下是解决此问题的步骤:
1. 确认文件权限
确保备份文件在容器内的权限设置正确。可以通过以下步骤来修复权限问题:
进入 GitLab 容器:
使用以下命令进入 GitLab 容器的 bash shell:docker exec -it gitlab /bin/bash
检查备份文件的权限:
进入/var/opt/gitlab/backups
目录并查看文件权限:cd /var/opt/gitlab/backups ls -l
更改文件权限:
如果文件的所有者不是 GitLab 的运行用户(通常是git
),可以使用chown
命令更改文件所有者:chown git:git gitlab_gitlab_backup.tar
2. 重新尝试恢复
在更改文件权限后,重新运行备份恢复命令:
gitlab-rake gitlab:backup:restore BACKUP=gitlab
3. 其他注意事项
- 备份文件路径:确保提供的备份文件名和路径正确。
- 确保没有其他 GitLab 实例正在运行:在恢复之前,请确保没有其他 GitLab 实例正在运行,以避免冲突。
示例命令
假设备份文件名为
gitlab_gitlab_backup.tar
,以下是步骤示例:# 进入容器 docker exec -it gitlab /bin/bash # 转到备份目录 cd /var/opt/gitlab/backups # 查看文件权限 ls -l # 更改文件权限 chown git:git gitlab_gitlab_backup.tar # 退出容器 exit # 重新运行恢复命令 docker exec -it gitlab gitlab-rake gitlab:backup:restore BACKUP=gitlab
通过这些步骤,您应该能够解决权限问题,并成功恢复 GitLab 备份。
报错2:
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/each_database.rb:11:in each_pair'
/opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/database/each_database.rb:11:in each_connection'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:61:in drop_tables'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/db.rake:48:in block (3 levels) in <top (required)>'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/targets/database.rb:210:in drop_tables'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/targets/database.rb:110:in block in restore'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/targets/database.rb:88:in each'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/targets/database.rb:88:in restore'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/tasks/task.rb:31:in restore!'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/manager.rb:88:in run_restore_task'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/manager.rb:163:in block in run_all_restore_tasks'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/manager.rb:161:in each_value'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/manager.rb:161:in run_all_restore_tasks'
/opt/gitlab/embedded/service/gitlab-rails/lib/backup/manager.rb:64:in restore'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/backup.rake:21:in block in restore_backup'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/backup.rake:68:in lock_backup'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/backup.rake:18:in restore_backup'
/opt/gitlab/embedded/service/gitlab-rails/lib/tasks/gitlab/backup.rake:113:in block (3 levels) in <top (required)>'
/opt/gitlab/embedded/bin/bundle:25:in load'
/opt/gitlab/embedded/bin/bundle:25:in'
Tasks: TOP => gitlab:db:drop_tables
(See full trace by running task with --trace)
在您尝试恢复 GitLab 数据库备份时,系统出现了连接数据库的问题,提示数据库连接失败,通常是由于以下几个原因造成的:
可能的原因与解决方法
PostgreSQL 服务未启动:
确保 PostgreSQL 数据库服务正在运行。可以使用以下命令检查并启动 PostgreSQL 服务:
gitlab-ctl start postgresql
然后再次确认 PostgreSQL 服务是否正常运行:
gitlab-ctl status
数据库配置文件错误:
- 检查 GitLab 的数据库配置文件,确保
gitlab.yml
中的数据库用户名和密码设置正确。配置文件通常位于/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
。数据库目录权限问题:
确保 GitLab 的数据库文件夹
/var/opt/gitlab/postgresql/
的权限设置正确,允许 GitLab 用户访问。可以通过以下命令修改权限:sudo chown -R gitlab-psql:gitlab-psql /var/opt/gitlab/postgresql/
重启 GitLab:
如果 PostgreSQL 已经启动,但仍然出现问题,可以尝试重启 GitLab 服务:
gitlab-ctl restart
确认备份文件的完整性:
- 确保备份文件(
gitlab_gitlab_backup.tar
)完整且没有损坏。可以尝试解压该文件检查内容是否正确。检查日志文件:
- 查看 PostgreSQL 和 GitLab 的日志文件以获取更多详细错误信息。日志文件通常位于
/var/log/gitlab/postgresql/
和/var/log/gitlab/gitlab-rails/
。运行恢复命令的顺序:
- 确保您在执行恢复命令之前已经停止了所有的 GitLab 服务(包括 Puma 和 Sidekiq),如之前提到的那样。
继续执行恢复
在解决了以上问题后,可以再次尝试执行恢复命令:
gitlab-rake gitlab:backup:restore BACKUP=gitlab
如果问题仍然存在,请提供更多日志信息或错误消息,以便进行进一步的排查和诊断。
13.提交(commit 或push)更改时,没有作者(Author)信息解决
当在版本控制系统(如Git)中提交(commit)更改时,系统会记录提交的作者(Author)信息。这个信息包括用户名和电子邮件地址。
如果你看到提交历史中显示 "root authored 3 minutes ago" 而不是具体的用户名,有几个可能的原因:
-
缺少全局用户配置: 如果你在提交时没有设置全局的用户配置,系统可能会默认使用系统当前用户。在某些情况下,如果以 root 用户身份运行,提交可能会显示 "root" 作为作者。
解决方法:在你的本地Git配置中设置全局的用户名和电子邮件地址。在终端中执行以下命令:
git config --global user.name "Your Name" git config --global user.email "your.email@example.com"
替换 "Your Name" 和 "your.email@example.com" 为你的实际姓名和电子邮件地址。
-
多个用户配置: 如果你在不同的仓库中使用了不同的用户配置,可能会导致显示不同的用户名。
解决方法:确保在每个仓库中都设置了正确的用户配置。
-
提交历史被重写: 如果历史提交已经被修改过,可能会导致作者信息被更改为 "root" 或其他默认值。
解决方法:在你修改历史之前,确保了解修改历史的潜在影响。
你可以使用以下命令查看当前的当前文件配置有效:
git config user.name "Your Name"
git config user.email "your.email@example.com"
如果这些配置正确设置,提交历史应该显示相应的用户名。
1.配置用户登陆邮箱的步骤如下:
- 点击头像,选择 "Preferences"。
- 进入 "Profile",找到 "Main settings" 下的 "Email"。
- 输入你的邮箱地址,然后点击 "Update profile settings"。
- 查看你的邮箱,你会收到一封邮件,标题为 "Confirmation instructions"。
- 在邮件中找到 "Confirm your email address" 链接,点击确认即可完成邮箱绑定。
2.配置gitlab发送的邮箱(和1没关系)
要在 GitLab 中配置 QQ 邮件服务,你需要编辑 GitLab 的配置文件,添加 QQ 邮件服务器的相关信息。下面是一个简单的步骤:
-
登录到 GitLab 服务器:
你需要登录到托管 GitLab 实例的服务器,确保你有足够的权限来编辑 GitLab 的配置文件。 -
编辑 GitLab 的配置文件:
找到 GitLab 的配置文件gitlab.rb
,通常位于/etc/gitlab
目录下。sudo vim /etc/gitlab/gitlab.rb
-
配置 QQ 邮件服务器:
找到以下配置到gitlab.rb
文件中(都可以找到),替换<your_qq_email>
和<your_qq_password>
为你的 QQ 邮箱地址和授权码。gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.qq.com" gitlab_rails['smtp_port'] = 587 gitlab_rails['smtp_user_name'] = "<your_qq_email>" gitlab_rails['smtp_password'] = "<your_qq_password>" gitlab_rails['smtp_domain'] = "qq.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = false gitlab_rails['gitlab_email_from'] = 'your_email@qq.com'
-
重新配置 GitLab:
保存并关闭gitlab.rb
文件,然后重新配置 GitLab。gitlab-ctl reconfigure
-
测试邮件配置:
你可以使用 GitLab 的邮件测试功能来验证你的配置是否正确。gitlab-rails console Notify.test_email('<your_qq_email>', 'Subject', 'Message').deliver_now
这会向你的 QQ 邮箱发送一封测试邮件。你应该收到这封邮件,如果一切配置正确的话。
控制台成功结果:
irb(main):003:0> Notify.test_email('534640040@qq.com', 'Subject', 'Message').deliver_nowDelivered mail 65f567498dc46_62cb62cec962ef@localhost.mail (1225.8ms)
=> #<Mail::Message:1589540, Multipart: false, Headers: <Date: Sat, 16 Mar 2024 17:32:57 +0800>, <From: GitLab <534640040@qq.com>>, <Reply-To: GitLab <noreply@192.168.31.113>>, <To: 534640040@qq.com>, <Message-ID: <65f567498dc46_62cb62cec962ef@localhost.mail>>, <Subject: Subject>, <Mime-Version: 1.0>, <Content-Type: text/html; charset=UTF-8>, <Content-Transfer-Encoding: 7bit>, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>
-
启用 SMTP 认证码:
请确保你的 QQ 邮箱已经启用了 SMTP 认证码功能。你可以在 QQ 邮箱的设置中找到这个选项,并且生成一个应用专用密码,用于在 GitLab 中作为 SMTP 密码使用。
完成这些步骤后,GitLab 将使用你配置的 QQ 邮件服务器来发送邮件通知。确保你已经正确配置了所有的邮箱设置,包括发件人名称、回复地址等。
需要注意的是,QQ 邮箱可能对登录地点的安全性设置了限制,如果你是在新的地点使用 QQ 邮箱进行 SMTP 认证,可能会需要通过 QQ 邮箱的验证流程。
当使用纯文本进行排版时,无法直接使用一级标题、二级标题、书签等格式。但我将尽力通过简单的标记方式来实现类似的效果。请参考以下排版:
1. 角色和功能
1.1 Runner角色
GitLab Runner充当CI/CD流水线中作业的执行代理,可以在同一台服务器上运行多个Runner实例。
1.2 执行作业
Runner负责接收GitLab CI/CD作业的指令,执行相关的脚本和命令,并将执行结果报告回GitLab。
2. 注册和配置
2.1 注册Runner
在GitLab项目中,管理员可以通过设置页面生成用于注册Runner的URL和token。
2.2 配置文件
Runner的配置信息存储在配置文件中,通常位于/etc/gitlab-runner/config.toml。
3. 执行环境
3.1 容器和虚拟机
Runner可以在Docker容器中执行作业,也可以在虚拟机或物理服务器上执行,提供灵活的执行环境。
3.2 标签和限定条件
Runner可以被配置为带有标签,作业可以通过标签匹配规则选择特定的Runner执行。
4. 并行和扩展性
4.1 多并发作业
Runner可以同时执行多个作业,提高CI/CD流水线的效率。
4.2 横向扩展
如果项目需要更多执行容量,可以简单地添加新的Runner实例。
5. 日志和输出
5.1 实时日志
Runner会实时输出作业的执行日志,可在GitLab界面上查看,帮助诊断问题。
5.2 Artifacts
Runner可以生成和保存Artifacts,作为作业执行过程中产生的文件或数据。
6. 安全性和权限控制
6.1 Token和连接密钥
Runner使用在GitLab项目注册时生成的token进行身份验证,确保与GitLab项目的安全通信。
6.2 权限配置
GitLab管理员可以配置Runner的权限,限制其能够执行的操作和访问的资源。
7. 更新和维护
7.1 版本更新
GitLab Runner定期发布新版本,管理员可以定期更新以获得最新功能和安全修复。
7.2 日志和监控
Runner生成详细的执行日志,管理员可以使用这些日志来监视状态、诊断问题并进行故障排除。
安装(如果docker搭建的gitlab需要docker容器中安装)
方法1:docker-compose 搭建(推荐)
gitlab-runner:
image: gitlab/gitlab-runner:alpine-v16.8.0
container_name: gitlab-runner
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /home/gitlab-runner/config:/etc/gitlab-runner
方法2:命令安装
# 在Debian/Ubuntu/Mint上安装
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
sudo apt-get install gitlab-runner
# 在RHEL/CentOS/Fedora上安装
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
sudo yum install gitlab-runner
# 启动GitLab Runner
sudo gitlab-runner start
# 注册Runner
sudo gitlab-runner register
写CI/CD任务脚本
cpu_memory_info_job:
script:
- echo "Job 开始"
- pip3 install psutil -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip3 install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip3 install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip3 install pyyaml -i https://pypi.tuna.tsinghua.edu.cn/simple
- python3 cpu_memory_plot.py
- cp /mnt/nas/share/report/cpu内存剩余率图.png $CI_PROJECT_DIR/
artifacts:
paths:
- cpu内存剩余率图.png
timeout: 1h # 这里是超时设置
aliddns_ipv6_job:
script:
- pip3 install aliyun-python-sdk-core-v3 -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip3 install aliyun-python-sdk-domain -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip3 install aliyun-python-sdk-alidns -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip3 install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
- python3 aliddns.py $accessKeyId $accessSecret $DomainPrefix
timeout: 1h
加入stage
stages:
- cpu_memory_info_job
- aliddns_ipv6_job
cpu_memory_info_job:
stage: cpu_memory_info_job
script:
- echo "Job 开始"
- pip3 install psutil -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip3 install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip3 install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip3 install pyyaml -i https://pypi.tuna.tsinghua.edu.cn/simple
- python3 cpu_memory_plot.py
- cp /mnt/nas/share/report/cpu内存剩余率图.png $CI_PROJECT_DIR/
artifacts:
paths:
- cpu内存剩余率图.png
timeout: 1h # 这里是超时设置
aliddns_ipv6_job:
stage: aliddns_ipv6_job
script:
- pip3 install aliyun-python-sdk-core-v3 -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip3 install aliyun-python-sdk-domain -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip3 install aliyun-python-sdk-alidns -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip3 install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
- python3 aliddns.py $accessKeyId $accessSecret $DomainPrefix
timeout: 1h
注册和配置
1. 注册Runner
在GitLab项目中,管理员可以通过设置页面生成用于注册Runner的URL和token(16版本可以直接创建)。
-
运行以下命令生成注册Runner所需的URL和token:
sudo gitlab-runner register
-
按照提示提供以下信息:
- GitLab实例的URL: 输入你的GitLab项目的URL。
- 注册token: 从GitLab项目设置页面获取。
- Runner的描述: 给你的Runner取一个描述性的名字,以便在GitLab中识别。
- Runner的标签: 可选,可以为Runner添加标签以便于作业匹配规则选择特定的Runner执行。
- Executor: 选择Runner的执行器,例如shell、docker等(如果docker容器搭建gitlab-runner也要选shell)。
- Executor镜像(仅对于docker执行器): 如果选择docker执行器,输入执行器的镜像名称。
-
完成注册后,你应该能够在GitLab项目的CI/CD设置中看到新注册的Runner,并且它将准备好用于你的项目。
-
登录到GitLab项目,导航至设置(Setting)→CI/CD→Runners。
-
在页面中找到并复制注册Runner所需的URL和token。
2. 修改设置(旧版本)
点击编辑按钮(不选这个任务回一直卡住)
选中 「运行未标记的作业(Indicates whether this runner can pick jobs without tags)」
确认 「启用、未标记的作业、锁定到当前项目」都被选中后保存修改
如果还有其他问题,可以查看GitLab Runner的日志以获取更多详细信息:
sudo cat /var/log/gitlab-runner/gitlab-runner.log
设置环境变量
在 GitLab CI/CD 中,你可以通过两种主要的方法添加变量:
-
通过项目设置页面添加环境变量:
- 进入你的项目的 Settings > CI/CD,并展开 Variables 部分。
- 选择 Add variable 并填写详细信息。
- 这种方式设置的环境变量仅在该项目内有效。
-
在 .gitlab-ci.yml 文件中定义变量:
- 在 .gitlab-ci.yml 文件中,使用
variables
关键字定义变量和对应的值。 - 如果变量在顶层定义,它在全局范围内可用,所有作业都可以使用。
- 如果变量在作业中定义,那么只有该作业可以使用它。
- 这种方式适用于定义全局或特定作业的变量。
- 在 .gitlab-ci.yml 文件中,使用
这两种方法提供了灵活性,使你能够根据需要选择将变量限定在项目内或者全局范围。确保妥善管理敏感信息,将其存储在安全的环境变量中。
在GitLab CI/CD中查看图片的步骤及常见解决方案
在 .gitlab-ci.yml
文件中,paths:
部分应该包含你想要作为构建工件保存的文件或目录的路径。这些路径应该是相对于项目目录的。
例如,如果你已经将 cpu内存剩余率图.png
文件复制到项目目录中,你可以这样设置 paths:
:
build:
script:
- cp /mnt/nas/share/report/cpu内存剩余率图.png $CI_PROJECT_DIR/
- other commands...
artifacts:
paths:
- cpu内存剩余率图.png
-
当
job
执行完毕后,可以在GitLab的界面上查看这些构建工件。导航到项目的CI/CD > Jobs
页面,找到对应的job
,发现多了Job artifacts一栏。 -
在弹出的菜单中,选择
Browse
来查看构建工件的文件结构,或者选择Download
来下载所有构建工件。
卸载
# 在Ubuntu上卸载GitLab Runner
sudo apt autoremove --purge gitlab-runner
# 删除存储库
sudo rm -rf /etc/apt/sources.list.d/runner_gitlab-runner.list
# 删除Runner创建的用户和目录
sudo deluser --remove-home gitlab-runner
sudo rm -rf /etc/gitlab-runner
希望这次的排版满足你的需求。
运行久了会报错
已重新初始化已存在的 Git 仓库于 /home/gitlab-runner/builds/kwSt1xNq/0/root/mobile/.git/ error: 对象文件 .git/objects/29/602a0ae33bf5151f39e8080258c1af0de97355 为空 fatal: 松散对象 29602a0ae33bf5151f39e8080258c1af0de97355(保存在 .git/objects/29/602a0ae33bf5151f39e8080258c1af0de97355)已损坏 ERROR: Job failed: exit status 1
解决办法,删除搭建gitlab电脑的.git或者整个文件夹,然后重新运行CI/CD
rm -rf /home/gitlab-runner/builds/kwSt1xNq/0/root/mobile/.git/
15.1 用本地 镜像作为 GitLab Runner 的构建环境
如何使用本地 Python 3.11 镜像作为 GitLab Runner 的构建环境
-
配置GitLab:在GitLab的配置文件(通常位于
/etc/gitlab/gitlab.rb
)中,你需要确保nginx['listen_addresses']打开,去掉#
,这样Nginx就会监听IPv6地址。
nginx['listen_addresses'] = ['[::]', '0.0.0.0']
-
重启GitLab:最后,使用
gitlab-ctl reconfigure
命令应用你的更改,并使用gitlab-ctl restart
命令重启GitLab。
GitLab 容器升级指南:一次从 17.4.x 升级到 17.9.x经历
yys@localhost:~/script$ free -h
total used free shared buff/cache available
内存: 13Gi 10Gi 225Mi 76Mi 2.8Gi 2.7Gi
交换: 0B 0B 0B
接下来继续添加以下配置减少内存的占用
/etc/gitlab/gitlab.rb
# 禁用 puma cluster 模式, 可以减少 100-400 MB占用,默认2
puma['worker_processes'] = 0
# Sidekiq 是一个后台处理守护进程。默认情况下使用 GitLab 配置时,它以50. 这确实会影响它在给定时间可以分配多少内存。建议将其配置为使用明显更小的值5或10(首选)。17版本以上sidekiq['concurrency'] = 10
sidekiq['max_concurrency'] = 10
# GitLab 默认启用所有服务,无需任何额外配置即可提供完整的 DevOps 解决方案。一些默认服务,如监控,对于 GitLab 的运行不是必需的,可以禁用以节省内存。
# 禁用监控
prometheus_monitoring['enable'] = false
# GitLab 由许多组件(用 Ruby 和 Go 编写)组成,其中 GitLab Rails 是最大的组件,并且消耗最多的内存(好像没有找到这个,需自己添加最下面)。
gitlab_rails['env'] = {
'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000'
}
上面四个设置,前三个默认被注释,第四个不存在
gitlab-ctl reconfigure
发现能省六七G内存
yys@localhost:/home/gitlab/etc/gitlab$ free -h
total used free shared buff/cache available
内存: 13Gi 3.9Gi 5.3Gi 54Mi 4.6Gi 9.6Gi
交换: 0B 0B 0B
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
5b4c98a03caa gitlab 2.22% 3.02GiB / 27.3GiB 11.06% 0B / 0B 580MB / 1.89GB 224
要恢复到 Git 仓库的指定版本,可以使用以下几种方法,具体取决于你想要的恢复方式:硬性恢复(彻底回到某个版本)或软性恢复(暂时切换到某个版本以查看或测试)。
1. 硬性恢复(彻底回到某个版本)
如果你想让你的仓库永久性地回到某个版本,可以使用 git reset
:
使用哈希值
假设你想恢复到的版本的哈希值是 abc123
,可以使用以下命令:
git reset --hard abc123
这将使你的工作目录和暂存区都回到指定的提交,并且丢弃在此之后的所有提交。
使用分支名称
如果你想恢复到某个分支的最新提交,比如 main
分支,可以使用以下命令:
git reset --hard origin/main
这会将你的工作目录和暂存区回到 main
分支的最新提交,并且丢弃在此之后的所有提交。
2. 软性恢复(暂时切换到某个版本)
如果你只是想暂时查看或测试某个版本,可以使用 git checkout
:
使用哈希值
git checkout abc123
这将使你的工作目录切换到 abc123
提交,但这会将你的 HEAD 分离(detached),使得你处于一个分离的 HEAD 状态。如果你想进行更改并创建新分支,可以:
git checkout -b new-branch abc123
这将在 abc123
提交上创建一个新的分支 new-branch
。
使用分支名称
git checkout main
这将使你的工作目录切换到 main
分支的最新提交。
3. 使用 git revert
(保留历史记录)
如果你想恢复到某个版本,但保留所有提交的历史记录,可以使用 git revert
:
git revert --no-commit abc123..HEAD
git commit -m "Reverted to commit abc123"
这将生成逆向提交来撤销从 abc123
到 HEAD
的所有更改,并创建一个新的提交,保持历史记录的完整性。
总结
选择适合你的恢复方式:
- 硬性恢复:使用
git reset --hard
彻底回到某个版本,丢弃所有后续的提交和更改。 - 软性恢复:使用
git checkout
暂时切换到某个版本,进行查看或测试。 - 历史保留恢复:使用
git revert
保留所有提交的历史记录,同时撤销指定范围内的更改。
请根据你的需求选择合适的命令,并在操作前备份或确保了解命令的影响。
.gitlab-ci.yml 的tag要一致,搭建时候默认没勾选Run untagged jobs
如
tags:
- java
本文作者: 永生
本文链接: https://yys.zone/detail/?id=274
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
发表评论
评论列表 (0 条评论)
暂无评论,快来抢沙发吧!