[英]git chaining: git push from local updated remote's remotes ref. Why and how was it possible?
我的回购协议面临着奇怪的 (IMO) 问题,并开始质疑我的假设。 那就是回购链。 网络搜索“git chaining repos”给出了https://serverfault.com/questions/186161/possible-to-chain-git-repos答案“是的,原因”。
现在我只是在本地(第一个回购)中执行了git push origin HEAD:refs/remotes/origin/main
,在第一个的.git/config
中有origin
(第二个回购)的 URL。
在.git/config
的第二个回购中,有第三个回购的 URL 作为origin
。 但是在 delta 中输出了几个对象的push
之后,我在 2nd 没有看到git reflog
的那些。 相反,我在refs/remotes/origin/main
文件哈希中看到了从第一个 repo 推送的最后一次提交的第二个。
你认为这是怎么发生的? 也许对回购协议有一些内部“损害”? 导致我调查的其他问题在git fetch - “拒绝”,git pull “强制更新,获取更新的当前分支头”。 Local 比 remote 提前 2 次提交。 TIA
git 版本 2.25.1
添加:
昨天回购似乎还不错,我记得我先同步了 1st 和 2nd,然后是 2rd 和 3nd,今天我想同步 1st 和 2nd。
我今天记得的唯一不寻常的事情是,从第 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
分支以跟踪原点的 main 和git-branch --set-upstream-to=origin/main main
产生如上所述的config
更改的效果. 我是因为我已经使用git clone --mirror
进行了回购,它将.git/config
中的 refs 翻译设置为fetch = +refs/*:refs/*
而使用常规clone
: fetch = +refs/heads/*:refs/remotes/origin/*
。
我认为需要仔细查看命令的输出才能知道结果。
为了找出问题的原因,我运行了strace
,看到代码只读取用户主目录中的 .git/ .git/config
、 .git/config
、 .git/HEAD
、 .git/refs/heads/main
然后实现.git/config
条目不同于其他回购的条目(额外的/remotes
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.