You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker GitLab旧容器数据迁移至新容器及Git仓库存储路径查询

Docker版GitLab仓库实际存储路径说明

你配置的宿主机挂载卷/srv/gitlab/data对应容器内GitLab的数据根目录/var/opt/gitlab,Git仓库的实际存储宿主机路径为:

/srv/gitlab/data/git-data/repositories/@hashed/

为什么查询的组名目录为空

你看到的devops这类以组/项目名命名的目录是GitLab早期传统存储(Legacy Storage)的遗留路径:

  • GitLab 10.0版本后默认启用哈希存储机制,所有项目仓库数据都存放在@hashed目录下,不再按组/项目名的目录结构存储,因此传统路径下的目录为空是正常现象
  • @hashed目录下采用两级哈希值命名的子目录结构,不会直接显示项目、组的可读名称,这种设计可以避免项目重命名、转移组时产生大量文件移动操作
  • 同路径下的@snippets目录存储代码片段数据,+gitaly是Gitaly服务的内部工作目录,.gitaly-metadata是Gitaly服务的元数据标记文件,均不需要单独手动迁移

跨主机迁移注意事项

  • 新服务器部署的GitLab版本必须和旧实例故障前最后正常运行的版本完全一致,禁止直接部署最新版跨大版本导入数据,否则会出现数据结构不兼容的问题
  • 迁移时不要单独只拷贝仓库目录,建议完整迁移三个挂载卷的全量数据,操作流程如下:
    • 停止新旧服务器上的所有GitLab容器,避免拷贝过程中有数据写入导致文件损坏
    • 用保留权限的方式全量拷贝旧服务器/srv/gitlab/下的config、logs、data三个目录到新服务器的同路径下,推荐使用rsync -avz /srv/gitlab/ root@新服务器IP:/srv/gitlab/命令拷贝,自动保留文件的UID/GID权限,避免容器启动后出现权限报错
    • 拷贝完成后启动新服务器的GitLab容器,等待服务初始化完成后,进入容器执行gitlab-ctl reconfigure和gitlab-rake gitlab:check SANITIZE=true校验数据完整性即可
  • 如果你之前在gitlab.rb配置文件中自定义过git_data_dirs参数修改了仓库存储路径,需要先查看/srv/gitlab/config/gitlab.rb内的自定义配置,对应到宿主机挂载路径查找数据即可,默认配置下仓库都在前面提到的@hashed目录下

内容的提问来源于stack exchange,提问作者uberrebu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:06:22