我的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
)。