我有一个本地git clone
的回购。我当然可以使用origin
查看我的本地远程git remote
。但是,我可以看到我的遥控器origin
的遥控器吗?我可以看到有关这些遥控器的任何细节,例如URL吗?
答案 0 :(得分:5)
一般情况下,除了通过评论中的方法(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/bar
)。事实上,它并没有,因为我在此之前手动创建了远程跟踪分支:
$ 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 遥控器现在可以隐藏特定的引用;你实际上只看到他们允许的那些。 默认是允许所有人。
顺便说一下,在我发现git update-ref -d
成功退出的过程中,即使它没有删除任何内容(我使用git update-ref -d
删除refs/remotes/foo/bar
但首先在错误的回购中运行它)。这导致发现另一个小错误:
$ 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中就是这种情况。)
创建怎么样,我们可以期望一个空哈希来确保我们是创建ref的那个吗?
$ 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
糟糕,我们能够删除它!所以不要为此目的尝试使用null-hash;没有使用空哈希的原子删除操作,只有原子创建。 (git update-ref -d
如果我们提供一些其他有效但不是$mastersha
哈希,则会正确失败;因此原子删除是一个两步操作:解析得到哈希,然后尝试使用该哈希删除。)< / p>