14

我有我的 dotfiles 的存储库,然后去从一个分支推送更改只是遇到......

$ git push
Enumerating objects: 46, done.
Counting objects: 100% (46/46), done.
Writing objects: 100% (46/46), 3.20 MiB | 1.52 MiB/s, done.
Total 46 (delta 0), reused 0 (delta 0)
To gitlab.com:auser/dotfiles.git
 ! [remote rejected] kimura -> origin/kimura (deny updating a hidden ref)
 ! [remote rejected] master -> origin/master (deny updating a hidden ref)
error: failed to push some refs to 'git@gitlab.com:auser/dotfiles.git'

该线程表明它是因为在来源上提出的拉取请求和指向博客文章的链接以及如何跳过此问题的解决方案,尽管我没有明确地refs/pull在被拒绝的路径中,所以这可能是一个不同的问题,但我找不到太多这方面的信息所以我想我尝试提出的解决方案并将我的配置更新为......

    [core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = git@gitlab.com:auser/dotfiles.git
        fetch = +refs/heads/*:refs/heads/*
        fetch = +refs/tags/*:refs/tags/*
        fetch = +refs/change/*:refs/change/*
        pushurl = git@gitlab.com:auser/dotfiles.git
        push = +refs/heads/*:refs/remotes/origin/*
[submodule "oh-my-zsh/.oh-my-zsh"]
        url = https://github.com/robbyrussell/oh-my-zsh
        active = true
[branch "master"]
        remote = origin
        merge = refs/heads/master
        pushRemote = origin
[branch "kimura"]
        remote = origin
        merge = refs/heads/kimura
        fetch = +refs/heads/*:refs/heads/*
        fetch = +refs/tags/*:refs/tags/*
        fetch = +refs/change/*:refs/change/*

但问题仍然存在。我的树枝是...

$ git branch -a
* kimura
  master
  remotes/origin/kimura
  remotes/origin/master

我试图从中推送的主机是我在镜像到 Gitlab 之前启动 repo 的地方。

4

2 回答 2

0

我有同样的错误[remote denied] origin/myBranch (deny update a hidden ref)

问题是:

我将远程 repo手机克隆到一个文件夹中,然后,我对代码进行了修改,当我尝试推送时,我没有将本地 repo手机推送到远程手机,而是尝试推送其父手机

在此处输入图像描述

正确的方法是在您克隆的本地仓库中打开 git bash 并执行正确的命令,这也可能是您的问题。

在此处输入图像描述

于 2021-05-22T16:12:07.947 回答
0

您引用的 SO 线程涉及克隆为--mirror. 这很可能不是你的情况。

克隆是一个旨在成为本地推送中心的mirror克隆,而不是直接工作(例如,它没有工作树、活动分支等)。常规 repo 克隆将分支 xyz 提取到,例如,origin/xyz - 以避免从脚下更改您正在处理的分支。在镜像克隆中,您想直接将 xyz 提取到 xyz 中。我怀疑你得到的“受保护的分支”错误正是由于这个原因:git 正在保护你免于进入你当前正在处理的分支。

我猜你的正确配置是 -

[remote "origin"]
        url = git@gitlab.com:auser/dotfiles.git
        fetch = +refs/heads/*:refs/remotes/heads/*
        fetch = +refs/tags/*:refs/remotes/tags/*
        fetch = +refs/change/*:refs/remotes/change/*
        pushurl = git@gitlab.com:auser/dotfiles.git
        push = +refs/heads/*:refs/heads/*
...
[branch "kimura"]
        remote = origin
        merge = refs/heads/kimura
        fetch = +refs/heads/*:refs/remotes/heads/*
        fetch = +refs/tags/*:refs/remotes/tags/*
        fetch = +refs/change/*:refs/remotes/change/*

请确认您确实需要push密钥。我不明白为什么默认值对于常规克隆来说是不够的。

于 2022-01-12T09:24:39.763 回答