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 reconfigure

For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md

Help 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

1.2 使用docker搭建

在 Docker 中安装和使用 GitLab,你可以按照以下步骤进行¹²³⁴⁵:

  1. 首先,拉取 GitLab 镜像:

    docker pull gitlab/gitlab-ce
  2. 创建挂载目录:

    mkdir -p /home/gitlab/etc/gitlab
    mkdir -p /home/gitlab/var/log
    mkdir -p /home/gitlab/var/opt
  3. 启动 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
  4. 配置 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
  5. 使用浏览器打开 GitLab,URL 为 http://你的IP地址:8081

  6. 获取root密码

    docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

     

 

 

2.上传

步骤如下:

  1. 在 GitLab 上创建一个新项目,选择 "Create blank project",编辑项目名称。

  2. 在本地电脑上创建一个空的文件夹,用于存放 GitLab 项目。你可以右键点击文件夹,选择 "Git Bash Here"。

  3. 在 Git Bash 中输入以下命令,克隆 GitLab 项目到本地文件夹。注意替换 <服务器IP地址> 为实际的服务器 IP 地址。

    git clone http://<服务器IP地址>/root/mobile.git

    执行命令后,输入你的 GitLab 用户名和密码。

  4. 将要上传的所有代码和文件复制到刚才克隆的本地项目文件夹中。

  5. 在 Git Bash 中进入该目录,如果需要切换分支,确保分支存在于 GitLab 上。

    cd 本地项目目录

    如果需要上传到其他分支,可以在 GitLab 上先创建该分支,例如 master

  6. 执行以下命令,将本地的代码上传到 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 

(输完之后,可能会弹出框,输入邮箱和密码)

3.下载和删除

  • 下载

       gie clone 地址

  • 删除,如删除文件test_fanqie.py
git rm path/to/test_fanqie.py
git commit -m "删除 test_fanqie.py 文件"
git push origin <your-branch-name>



 

4.Git之从远程仓库更新代码到本地

多台电脑上进行开发的时候需要用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


 

5.git fetch origin每次输入密码怎么取消

方法1:

如果你在使用Git时,每次push或pull都需要输入用户名和密码,这可能是因为你使用的是HTTPS方式与Git远程仓库交互。你可以通过以下步骤解决这个问题:

在服务器端或者本地PC上运行以下命令:

git config --global credential.helper store


这个命令会在本地生成一个文本来存储相关信息¹²。

当你再次执行git push或者pull时,它会提示你输入账号密码。这一次之后就不需要再次输入密码了¹²。

 

方法2:

  1. 配置 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 密钥不在默认位置。

你可以通过以下步骤来解决这个问题:

  1. 启动 SSH 代理

在终端中运行以下命令启动 SSH 代理:

eval "$(ssh-agent -s)"

这将在当前 shell 中启动 SSH 代理。

  1. 添加 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替换成你的本地分支名。

8.Omit --global to set the identity only in this repository. fatal: unable to auto-detect email address

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身份信息。以下是具体的步骤:

  1. 打开终端(命令提示符或终端窗口)。

  2. 运行以下命令,将你的电子邮件地址和用户名设置为Git的默认身份信息。请将以下命令中的"you@example.com"和"Your Name"替换为你的电子邮件地址和用户名:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"
 

确保你输入的电子邮件地址和用户名是你在Git中使用的有效信息。

  1. 重新运行你的 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"

 

9.windows的Jenkins报错stderr: fatal: detected dubious ownership in repository at C:/Users/yys53/OneDrive/python/bestscript

当 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 仓库(在不同的分区)时可能会遇到此问题。

为了解决这个问题,你可以按照以下步骤操作:

  1. 在 Jenkins 上运行 whoami 命令,以获取当前 Jenkins 进程的用户信息,例如 "system"。

  2. 右键点击仓库文件夹,选择"属性",然后选择"安全性",接着选择"高级"选项。

  3. 在"所有者"行上,点击"更改"按钮。

  4. 找到你的用户(你可以点击"高级...",然后点击"现在查找",最后选择你的用户)。

  5. 确认更改。

  6. 在更改屏幕上,启用"替换子容器和对象的所有者"选项。

这些步骤应该能够解决这个错误。通过运行 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 阻止了合并操作。你需要执行以下步骤来解决这个问题:

  1. 备份未跟踪的文件:首先,你应该备份这些未跟踪的文件,以确保不会丢失任何重要数据。你可以将它们复制到其他目录中,或者使用 Git 的 stash 功能来保存它们,以便稍后还原。
git stash save "未跟踪文件备份"
  1. 删除未跟踪的文件:一旦你确保了备份,可以删除这些未跟踪的文件。你可以使用下面的命令删除它们:
git clean -f

这将删除未跟踪的文件,使你的工作目录变得干净。

  1. 执行合并操作:现在,再次尝试将远程分支合并到本地分支:
git merge origin/main

这次应该能够成功合并,因为本地工作目录不再包含会被覆盖的未跟踪文件。

  1. 恢复备份(如果需要):如果你在第一步中备份了未跟踪的文件,现在可以使用 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 仓库中存在一些损坏的对象。你可以尝试以下步骤来解决这个问题:

  1. 首先,你可以运行 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

 

12.备份和恢复

12.1备份

搭建自己的GitLab实例后,确保数据备份是非常重要的,以防服务器硬件故障、数据损坏或其他问题。以下是备份GitLab数据的一般步骤:

  1. 定期备份数据:定期执行备份操作以确保数据的安全性。您可以设置备份计划,每天或每周自动运行备份任务。

  2. 使用GitLab提供的备份工具:GitLab提供了内置的备份工具,使数据备份变得容易。默认情况下,备份数据将存储在GitLab服务器的/var/opt/gitlab/backups目录中。

  3. 手动备份:您可以手动执行备份操作,使用以下命令:

    sudo gitlab-rake gitlab:backup:create

    这将创建一个备份文件,文件名格式通常为<timestamp>_gitlab_backup.tar,并将其保存在备份目录中。

  4. 数据存储位置:确保备份数据存储在安全位置,最好是在另一个物理服务器或云存储中。这可以通过将备份数据复制到远程位置来实现。

  5. 恢复测试:定期测试备份的可用性和有效性。尝试还原备份数据以确保它们可以成功还原到GitLab实例。

  6. 备份配置文件:除了GitLab数据,还应该备份GitLab的配置文件,以确保在灾难恢复时可以还原系统设置。通常,GitLab配置文件存储在/etc/gitlab目录下。

  7. 版本控制备份脚本:将备份脚本和配置文件存储在版本控制系统中,以确保备份策略和配置更改的历史记录。这可以使用Git或其他版本控制工具来实现。

  8. 文档记录:记录备份和恢复过程,包括备份位置、计划、还原步骤和联系人信息。这有助于简化灾难恢复。

  9. 加密和访问控制:确保备份数据的存储和传输是加密的,并且只有授权的人可以访问备份数据。

  10. 监控备份健康:设置监控系统来检查备份任务的状态,并及时报警,以确保备份任务正常运行。

请注意,上述步骤可能需要根据您的具体环境和需求进行调整。保持数据备份的可用性和完整性对于维护GitLab实例的可靠性至关重要。

12.2 恢复

注:同版本gitlab才可以恢复

要还原GitLab备份,您可以使用GitLab提供的 gitlab-rake 命令。以下是一般的还原步骤:

  1. 确保备份文件可用: 在进行还原之前,请确保备份文件是可用的,它通常是以 .tar 格式的文件。确保备份文件存储在一个安全且可访问的位置。

  2. 停止GitLab服务: 在还原过程中,您需要停止GitLab服务,以确保数据库和存储区不受新数据更改的影响。使用以下命令停止GitLab:

    sudo gitlab-ctl stop
  3. 执行还原操作: 使用 gitlab-rake 命令执行还原操作。以下是还原命令的示例,以gitlab2_gitlab_backup.tar名字为例子:

    sudo gitlab-rake gitlab:backup:restore BACKUP=gitlab2

    其中,backup_file_name 是要还原的备份文件的名称。请将其替换为实际备份文件的名称。

  4. 启动GitLab服务: 在还原完成后,启动GitLab服务以让其重新运行:

    sudo gitlab-ctl start
  5. 清理缓存: 在还原后,建议清理GitLab的缓存以确保一切正常运行:

    sudo gitlab-rake cache:clear
  6. 重启服务器: 在某些情况下,可能需要重启服务器以确保所有更改生效。

请注意,还原操作会将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. 确认文件权限

确保备份文件在容器内的权限设置正确。可以通过以下步骤来修复权限问题:

  1. 进入 GitLab 容器
    使用以下命令进入 GitLab 容器的 bash shell:

    docker exec -it gitlab /bin/bash
  2. 检查备份文件的权限
    进入 /var/opt/gitlab/backups 目录并查看文件权限:

    cd /var/opt/gitlab/backups
    ls -l
  3. 更改文件权限
    如果文件的所有者不是 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 数据库备份时,系统出现了连接数据库的问题,提示数据库连接失败,通常是由于以下几个原因造成的:

可能的原因与解决方法

  1. PostgreSQL 服务未启动

    • 确保 PostgreSQL 数据库服务正在运行。可以使用以下命令检查并启动 PostgreSQL 服务:

      gitlab-ctl start postgresql
    • 然后再次确认 PostgreSQL 服务是否正常运行:

      gitlab-ctl status
  2. 数据库配置文件错误

    • 检查 GitLab 的数据库配置文件,确保 gitlab.yml 中的数据库用户名和密码设置正确。配置文件通常位于 /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
  3. 数据库目录权限问题

    • 确保 GitLab 的数据库文件夹 /var/opt/gitlab/postgresql/ 的权限设置正确,允许 GitLab 用户访问。可以通过以下命令修改权限:

      sudo chown -R gitlab-psql:gitlab-psql /var/opt/gitlab/postgresql/
  4. 重启 GitLab

    • 如果 PostgreSQL 已经启动,但仍然出现问题,可以尝试重启 GitLab 服务:

      gitlab-ctl restart
  5. 确认备份文件的完整性

    • 确保备份文件(gitlab_gitlab_backup.tar)完整且没有损坏。可以尝试解压该文件检查内容是否正确。
  6. 检查日志文件

    • 查看 PostgreSQL 和 GitLab 的日志文件以获取更多详细错误信息。日志文件通常位于 /var/log/gitlab/postgresql/ 和 /var/log/gitlab/gitlab-rails/
  7. 运行恢复命令的顺序

    • 确保您在执行恢复命令之前已经停止了所有的 GitLab 服务(包括 Puma 和 Sidekiq),如之前提到的那样。

继续执行恢复

在解决了以上问题后,可以再次尝试执行恢复命令:

gitlab-rake gitlab:backup:restore BACKUP=gitlab

如果问题仍然存在,请提供更多日志信息或错误消息,以便进行进一步的排查和诊断。

13.提交(commit 或push)更改时,没有作者(Author)信息解决

当在版本控制系统(如Git)中提交(commit)更改时,系统会记录提交的作者(Author)信息。这个信息包括用户名和电子邮件地址。

如果你看到提交历史中显示 "root authored 3 minutes ago" 而不是具体的用户名,有几个可能的原因:

  1. 缺少全局用户配置: 如果你在提交时没有设置全局的用户配置,系统可能会默认使用系统当前用户。在某些情况下,如果以 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" 为你的实际姓名和电子邮件地址。

  2. 多个用户配置: 如果你在不同的仓库中使用了不同的用户配置,可能会导致显示不同的用户名。

    解决方法:确保在每个仓库中都设置了正确的用户配置。

  3. 提交历史被重写: 如果历史提交已经被修改过,可能会导致作者信息被更改为 "root" 或其他默认值。

    解决方法:在你修改历史之前,确保了解修改历史的潜在影响。

你可以使用以下命令查看当前的当前文件配置有效:

git config user.name "Your Name"
git config user.email "your.email@example.com"

如果这些配置正确设置,提交历史应该显示相应的用户名。

14.配置邮箱

1.配置用户登陆邮箱的步骤如下:

  1. 点击头像,选择 "Preferences"。
  2. 进入 "Profile",找到 "Main settings" 下的 "Email"。
  3. 输入你的邮箱地址,然后点击 "Update profile settings"。
  4. 查看你的邮箱,你会收到一封邮件,标题为 "Confirmation instructions"。
  5. 在邮件中找到 "Confirm your email address" 链接,点击确认即可完成邮箱绑定。

 

2.配置gitlab发送的邮箱(和1没关系)

要在 GitLab 中配置 QQ 邮件服务,你需要编辑 GitLab 的配置文件,添加 QQ 邮件服务器的相关信息。下面是一个简单的步骤:

  1. 登录到 GitLab 服务器:
    你需要登录到托管 GitLab 实例的服务器,确保你有足够的权限来编辑 GitLab 的配置文件。

  2. 编辑 GitLab 的配置文件:
    找到 GitLab 的配置文件 gitlab.rb,通常位于 /etc/gitlab 目录下。

    sudo vim /etc/gitlab/gitlab.rb
  3. 配置 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'
  4. 重新配置 GitLab:
    保存并关闭 gitlab.rb 文件,然后重新配置 GitLab。

    gitlab-ctl reconfigure
  5. 测试邮件配置:
    你可以使用 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_now

    Delivered 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>>

  6. 启用 SMTP 认证码:
    请确保你的 QQ 邮箱已经启用了 SMTP 认证码功能。你可以在 QQ 邮箱的设置中找到这个选项,并且生成一个应用专用密码,用于在 GitLab 中作为 SMTP 密码使用。

完成这些步骤后,GitLab 将使用你配置的 QQ 邮件服务器来发送邮件通知。确保你已经正确配置了所有的邮箱设置,包括发件人名称、回复地址等。

需要注意的是,QQ 邮箱可能对登录地点的安全性设置了限制,如果你是在新的地点使用 QQ 邮箱进行 SMTP 认证,可能会需要通过 QQ 邮箱的验证流程。

 

15. GitLab Runner搭建

当使用纯文本进行排版时,无法直接使用一级标题、二级标题、书签等格式。但我将尽力通过简单的标记方式来实现类似的效果。请参考以下排版:

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 中,你可以通过两种主要的方法添加变量:

  1. 通过项目设置页面添加环境变量:

    • 进入你的项目的 Settings > CI/CD,并展开 Variables 部分。
    • 选择 Add variable 并填写详细信息。
    • 这种方式设置的环境变量仅在该项目内有效。
  2. 在 .gitlab-ci.yml 文件中定义变量:

    • 在 .gitlab-ci.yml 文件中,使用 variables 关键字定义变量和对应的值。
    • 如果变量在顶层定义,它在全局范围内可用,所有作业都可以使用。
    • 如果变量在作业中定义,那么只有该作业可以使用它。
    • 这种方式适用于定义全局或特定作业的变量。

这两种方法提供了灵活性,使你能够根据需要选择将变量限定在项目内或者全局范围。确保妥善管理敏感信息,将其存储在安全的环境变量中。

 

在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
  1. job执行完毕后,可以在GitLab的界面上查看这些构建工件。导航到项目的CI/CD > Jobs页面,找到对应的job,发现多了Job artifacts一栏。

  2. 在弹出的菜单中,选择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 的构建环境

16.开启ipv6

  1. 配置GitLab:在GitLab的配置文件(通常位于/etc/gitlab/gitlab.rb)中,你需要确保nginx['listen_addresses']打开,去掉#,这样Nginx就会监听IPv6地址。

        nginx['listen_addresses'] = ['[::]', '0.0.0.0']

  1. 重启GitLab:最后,使用gitlab-ctl reconfigure命令应用你的更改,并使用gitlab-ctl restart命令重启GitLab。

17.gitlib升级

GitLab 容器升级指南:一次从 17.4.x 升级到 17.9.x经历

 

18.降低gitlab资源占用

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
 

19.要恢复到 Git 仓库的指定版本

要恢复到 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 保留所有提交的历史记录,同时撤销指定范围内的更改。

请根据你的需求选择合适的命令,并在操作前备份或确保了解命令的影响。

20.卡住解决(padding):

.gitlab-ci.yml 的tag要一致,搭建时候默认没勾选Run untagged jobs

tags:

    - java