git 如何重建packed-refs文件

yi0zb3m4  于 2023-02-14  发布在  Git
关注(0)|答案(1)|浏览(228)
    • 背景**

我正在编写一个脚本来镜像和定期刷新GitHub中的一些仓库。GitHub仓库引用了一些在外部没有意义的Pull请求分支,所以我按照Howto: Mirror a GitHub Repo Without Pull Refs中的建议过滤掉了它们。

git clone --mirror SourceGitHubRepoUrl
git remote add --mirror=push alice MyMirrorUrl
git config --local --replace-all remote.origin.fetch "+refs/heads/*:refs/heads/*" 
git config --local --add remote.origin.fetch "+refs/tags/*:refs/tags/*"

此时本地镜像具有正确的获取规则

git remote update origin

效果很好但是

git push --mirror alice

会出现类似! [remote rejected] refs/pull/22/head -> refs/pull/22/head的错误,因为packed-refs仍列出refs/pull/*分支。

    • 问题**

我如何修正packed-refs的内容?我可以删除所有匹配"refs/pull"的行吗?
后者似乎起作用,但人们永远不能确定是否有潜伏的小精灵。

iibxawm4

iibxawm41#

在类似的情况下,我能够使用git-update-refgit-pack-refs通过裸repo将远程origin增量更新为镜像远程backup

git fetch --all --prune
BRANCHES="$(git branch --remotes | grep origin/ )"
for BRANCH in $BRANCHES; do
    echo "--> setting local branch ${BRANCH#origin/} to remote branch ${BRANCH}"
    git update-ref "refs/heads/${BRANCH#origin/}" $(git rev-parse $BRANCH)
    git pack-refs --all
done
echo "--> pushing to backup"
git push --mirror backup

相关问题