Git 链接:来自本地更新的远程的 Git 推送的远程参考。为什么以及如何可能?



我的repo面临着奇怪的(IMO)问题,并开始质疑我的假设。这就是回购链。Web搜索"git链接"给出了https://serverfault.com/questions/186161/possible-to-chain-git-repos其中的答案"是,理所当然"。

现在我只是在本地(第一次回购)做了git push origin HEAD:refs/remotes/origin/main,在第一次的.git/config中有origin(第二次回购)的URL。

.git/config的第二个repo中,有第三个repo的URL为origin。但是在push输出了几个delta对象之后,我没有看到git reflog在2号输出的对象。相反,我在refs/remotes/origin/main文件哈希中看到了从第一个repo推送的最后一次提交。

你认为那是怎么发生的?也许是回购的内部"损坏"?其他导致我调查的问题是git取回&拒绝&;git拉取&;强制更新;取回更新的当前分支头部&;。本地比远程早2次提交。TIA

git version 2.25.1

补充道:

昨天的repos似乎很好,我记得我首先同步了第一和第二,然后是第二和第三,今天我想同步第一和第二。

我记得今天唯一不寻常的事情是从第2点拉到第1点后,有一个冲突,我在第1点为有冲突的文件做了git reset FILE,并从git外的备份中替换(复制到repo文件夹)文件。

git做了它被告知的事情,推送到origin HEAD:refs/remotes/origin/main,这是远程对远程。

当故障排除时,我注意到.git/config中的main条目不同,额外的remotes。显然,它将main设置为在remote的remote上跟踪main(在链的更下面)。

我还记得我看到git-branch --set-upstream-to=main main产生了设置main分支来跟踪origin的main的效果,git-branch --set-upstream-to=origin/main main产生了上面描述的config变化。我是因为我用git clone --mirror做了repo,它将.git/config中的refs翻译设置为fetch = +refs/*:refs/*,而常规clone:fetch = +refs/heads/*:refs/remotes/origin/*

我认为一个人需要仔细观察命令的输出才能知道结果。

为了找出问题的原因,包括我运行strace,看到代码只读取.git/config在用户家,.git/config,.git/HEAD,.git/refs/heads/main,然后实现.git/config条目与其他repo条目不同(额外的/remotes)。

最新更新