git-data中有类似project.a.git的仓库目录。我尝试将一个命名为.git,并在shell中输入“git status”,但得到“此操作必须在工作树中运行”。我没有备份tar文件,有没有办法从data目录恢复gitlab仓库?
csbfibhn1#
我们想通过复制.git文件夹来复制GitLab数据以进行恢复。由于您的GitLab服务器可能位于远程服务器上,因此您可以使用scp通过SSH进行复制。
scp
*远程GitLab
src=~/gitlab server=server.local mkdir -p "$src" scp -r "$server:/var/opt/gitlab/git-data/repositories/@hashed" "$src"
*本地GitLab
src=~/gitlab server= mkdir -p "$src" cp -r /var/opt/gitlab/git-data/repositories/@hashed "$src"
请务必更改;
server.local
/var/opt/gitlab
由于GitLab安装现在可能已损坏。你需要perform a fresh install。
注意:您需要重新创建任何您想要导入的组。你可以找到所有的组,你需要用下面的脚本。
#!/bin/bash src=~/gitlab repos() { for repo in $(printf "%s\n" "$src/@hashed"/*/*/* | grep -Pv '\.wiki\.git$'); do readarray -d "/" -t segments <<< $(git config --file "$repo/config" --get gitlab.fullpath) echo ${segments[0]} done } repos | sort | uniq
"$src/@hashed"/*/*/*
.wiki.git
-v
printf "%s\n" "$src/@hashed"/*/*/* | grep -Pv '\.wiki\.git$'
for repo in $(printf "%s\n" "$src/@hashed"/*/*/* | grep -Pv '\.wiki\.git$'); do # interact with each repo done
config
path=$(git config --file "$repo/config" --get gitlab.fullpath) echo $path # peilonrayz/repository
.git
dest=/data/repositories mkdir -p $dest/$path/.git cd $dest/$path cp -r $repo/* .git
git --work-tree . reset --hard HEAD
origin=ssh://$server/$path.git git remote add origin "$origin" git push -u origin --all git push -u origin --tags
注意:如果您使用的是Windows;你需要run Bash on Windows。
#!/bin/bash # Change to your values data=/var/opt/gitlab src=~/gitlab dest=/data/repositories server=server.local mkdir -p "$src" scp -r "$server:$data/git-data/repositories/@hashed" "$src" ssh "$server" # reinstall GitLab for repo in $(printf "%s\n" "$src/@hashed"/*/*/* | grep -Pv '\.wiki\.git$'); do path=$(git config --file "$repo/config" --get gitlab.fullpath) origin=ssh://$server/$path.git mkdir -p $dest/$path/.git cd $dest/$path cp -r $repo/* .git git --work-tree . reset --hard HEAD if [ "$server" != "" ]; then git remote add origin "$origin" git push -u origin --all git push -u origin --tags fi done
kulphzqa2#
实际的存储库位于git-data/repositories中。理想情况下,您可以通过从backups目录导入备份来恢复整个GitLab安装。
git-data/repositories
backups
n53p2ov03#
答案来自@Peilonrayz,但我仍然不得不做一些尝试和错误,以获得我的本地存储库,所以这里是简短的格式:
#!/bin/bash src=./data/git-data/repositories dst=./gitlab-repos_bk for repo in $(printf "%s\n" "$src/@hashed"/*/*/* | grep -Pv '\.wiki\.git$'); do # interact with each repo path=$(git config --file "$repo/config" --get gitlab.fullpath) echo path: $path echo repo: $repo mkdir -p $dst/$path/.git cp -r $repo/* $dst/$path/.git git -C $dst/$path --work-tree . reset --hard HEAD done
3条答案
按热度按时间csbfibhn1#
我们想通过复制.git文件夹来复制GitLab数据以进行恢复。由于您的GitLab服务器可能位于远程服务器上,因此您可以使用
scp
通过SSH进行复制。*远程GitLab
*本地GitLab
请务必更改;
server.local
到您的服务器的域名或IP地址,以及/var/opt/gitlab
指向GitLab数据的路径。如果您使用的是Docker,则需要从安装说明中调用您的位置。您可能需要以root用户身份登录,或使非root用户可以访问文件夹。注意:确保您对目录有读权限。
由于GitLab安装现在可能已损坏。你需要perform a fresh install。
注意:您需要重新创建任何您想要导入的组。你可以找到所有的组,你需要用下面的脚本。
.wiki.git
目录,似乎包含项目的wiki。我们不需要这些,所以我们可以使用grep过滤掉任何不以.wiki.git
结尾的(-v
)config
获取GitLab路径。.git
文件夹复制到本地存储库目录。TL;DR
注意:如果您使用的是Windows;你需要run Bash on Windows。
kulphzqa2#
实际的存储库位于
git-data/repositories
中。理想情况下,您可以通过从
backups
目录导入备份来恢复整个GitLab安装。n53p2ov03#
答案来自@Peilonrayz,但我仍然不得不做一些尝试和错误,以获得我的本地存储库,所以这里是简短的格式: