gpt4 book ai didi

git - 是否可以在 git 中查看 Remote 的 Remote ?

转载 作者:太空狗 更新时间:2023-10-29 13:21:36 27 4
gpt4 key购买 nike

我有一个仓库的本地 git clone。我当然可以使用 git remote 查看我的本地远程 origin。但是,我可以看到我的 Remote origin 的 Remote 吗?我可以查看有关这些 Remote 的任何详细信息,例如 URL 吗?

最佳答案

一般不会,除了通过注释中的方法(ssh 到服务器并在那里运行 git remote)。

但是,您可以查看所有1 的远程引用,包括它自己的远程跟踪分支,并且根据这些信息您可以做出一些很好的猜测:

$ git ls-remote
From ssh:[redacted]
d1574b852963482d4b482992ad6343691082412f HEAD
222c4dd303570d096f0346c3cd1dff6ea2c84f83 refs/heads/branch
d1574b852963482d4b482992ad6343691082412f refs/heads/master
d1574b852963482d4b482992ad6343691082412f refs/remotes/foo/bar
d41117433d7b4431a188c0eddec878646bf399c3 refs/tags/tag-foo

上面暗示有问题的机器必须有一个名为foo的远程(它从中得到分支bar,重命名为refs/remotes/foo/栏)。事实上,它并没有,因为我在此之前手动创建了那个远程跟踪分支:

$ cd ~/tmp/t
$ git update-ref refs/remotes/foo/bar master
$ git for-each-ref
222c4dd303570d096f0346c3cd1dff6ea2c84f83 commit refs/heads/branch
d1574b852963482d4b482992ad6343691082412f commit refs/heads/master
d1574b852963482d4b482992ad6343691082412f commit refs/remotes/foo/bar
d41117433d7b4431a188c0eddec878646bf399c3 commit refs/tags/tag-foo

1 Remote 现在可以 stash 特定的引用;您实际上只能看到他们允许的那些。不过,默认 是允许所有。

错误!嗯,有点。

顺带一提,一路上我发现 git update-ref -d 即使不删除任何内容也会成功退出(我使用 git update-ref -d 来删除 refs/remotes/foo/bar 但首先在错误的 repo 中运行它)。这导致发现了另一个小错误:

$ nullsha=0000000000000000000000000000000000000000
$ git update-ref -d refs/remotes/foo/bar $nullsha || echo bug

(没有输出,很好:我们成功地“删除”了它,同时期望它首先不存在)。

$ git update-ref -d refs/remotes/foo/bar master && echo bug
error: cannot lock ref 'refs/remotes/foo/bar': unable to resolve
reference refs/remotes/foo/bar: No such file or directory

奇怪:删除应该(并且确实)失败,因为 ref 不存在,更不用说匹配 master,但这是一个非常奇怪的消息。 (顺便说一下,为了发布目的,我正在打破排长队。)

$ mastersha=$(git rev-parse master)
$ git update-ref -d refs/remotes/foo/bar $mastersha

同样的失败信息;似乎您无法提供非零预期 SHA1 并出现“安静”故障。 (实际的名称或 SHA-1 无关紧要,除了全零“空哈希”表示“不存在”,这在 Git 中通常是这种情况。)

关于创建,我们可以期待一个空哈希来确保我们是创建引用的人吗?

$ git update-ref refs/remotes/foo/bar $mastersha $nullsha || echo bug

没有输出,很好:它应该只在新的时候创建,所以让我们再试一次并确保创建报告非零状态:

$ git update-ref refs/remotes/foo/bar $mastersha $nullsha && echo bug
fatal: update_ref failed for ref 'refs/remotes/foo/bar': cannot
lock ref 'refs/remotes/foo/bar': ref refs/remotes/foo/bar is at
11ae6ca18f6325c858f1e3ea2b7e6a045666336d but expected
0000000000000000000000000000000000000000

没有真正的错误,而是另一个奇怪的消息。不过,这至少是有道理的。

如果我们要求删除它,当我们希望它被删除但它没有被删除时会发生什么?

$ git update-ref -d refs/remotes/foo/bar $nullsha && echo bug
bug

糟糕,我们能够删除它!所以不要尝试为此目的使用空哈希;没有空散列的原子删除操作,只有原子创建。 (git update-ref -d 如果我们提供一些其他有效但不是 $mastersha 的散列,则正确失败;因此原子删除是一个两步操作:解析以获取哈希,然后尝试使用该哈希删除。)

关于git - 是否可以在 git 中查看 Remote 的 Remote ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37845962/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com