git - 如何重建 packed-refs 文件

标签 git github

上下文

我正在编写一个脚本来镜像并定期刷新 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

给出类似 的错误! [远程拒绝] refs/pull/22/head -> refs/pull/22/head 因为 packed-refs 仍然列出 refs/pull/* 分支机构。

问题

如何修复 packed-refs 的内容?我可以简单地删除所有匹配“refs/pull”的行吗?

后者似乎可行,但人们永远无法确定是否没有潜伏的小 Sprite 。

最佳答案

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

    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

关于git - 如何重建 packed-refs 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28044784/

相关文章:

git - 如何创建反射(reflect)另一个(发散)分支状态的提交?

git - 过滤器分支后相同提交的不同 SHA,当我 merge 到 dev 或 master 时它不会失败吗?我怎样才能防止这种情况发生?

javascript - 如何使用 gulp 添加特定更改

Git:从现有存储库创建 Git 子模块并将父更改反射(reflect)到子存储库

git - 致命的 : remote server hung up unexpectedly

eclipse - 从 Egit eclipse 提交失败

Docker 构建在 Github Actions 中失败 - 无法读取 dockerfile

git - 如何将分支快进到头部

Git merge 内部

更改svn repo地址后git svn错误