gpt4 book ai didi

git - 服务器损坏后仅使用本地副本是否可能恢复远程 git 存储库?

转载 作者:太空狗 更新时间:2023-10-29 14:41:05 27 4
gpt4 key购买 nike

出于某种原因,远程 git 存储库 已损坏且没有备份,但开发人员计算机中有很多本地存储库。每个开发人员机器都有一些他们使用的分支,但任何人都可以在本地存储库中 checkout 所有分支。

建议使用本地仓库重建远程仓库吗?

我们尝试将所有本地分支推送到远程存储库中,但是有几个分支在本地没有。对于这些分支,我们构建了一个shell脚本来 check out 和推送,但我不确定它是否是正确的方式。

这是创建的 shell 脚本:

#!/bin/bash
clear

echo "*****************************************"
echo "Disaster Recovery. "
echo "Script for massive Git checkout and push."
echo "*****************************************"

for i in $(git branch -r)
do
find="origin/";
replace="";
branch=${i//$find/$replace}

echo "Init checkout" $branch
exec git branch -d $branch | git checkout -b $branch --track origin/$branch
echo "End checkout" $branch
done;

echo "Init push -all"
echo exec git push --all
echo "End push -all"

所有分支都恢复了,但有些分支因为长时间的差异而过时了。在这种情况下,搜索并推送了最新的本地开发人员分支。 一些分支仍然过时,因为没有人拥有最近的本地分支

还有其他方法可以在没有 git 服务器备份的情况下重建所有远程 git 存储库吗?感谢您的宝贵时间,社区

最佳答案

假设 git branch -r 确实显示了所有(或大部分)分支的副本,推送远程分支的本地副本的命令应该如下所示。这假定“origin”是用户用于远程存储库的名称。如果不是,请更改出现 origin 的两个地方的命令。

git push origin --tags 'refs/remotes/origin/*:refs/heads/*'

现在您很可能没有最新的 repo 副本,也不清楚谁拥有。但假设远程仓库有默认设置,即阻止所谓的“非快进”,所有用户都可以安全地运行相同的命令,并且只有当它们的副本比服务器上已有的副本更新时,他们才会更新分支。

--tags 确保也将任何标签推送到远程仓库。

如果您已经将分支推送到您的存储库,您最终可能会得到一些额外的分支。如果你最终弄得一团糟,你可以尝试将远程仓库重命名为其他名称(作为备份以防万一一切都失败了)并创建一个新的远程仓库并使用我上面的命令重新开始。

您在示例中使用的 git branch -d 命令是完全错误的,它们最终只会删除您的本地副本,不要那样做!此外,您指定的 checkout 命令可能也不是一个好方法。除了上面的 git push 命令之外,您不需要任何其他命令来恢复远程存储库。

关于git - 服务器损坏后仅使用本地副本是否可能恢复远程 git 存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57330819/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com