是否可以在git中看到遥控器的遥控器?

时间:2016-06-15 21:19:36

标签: git

我有一个本地git clone的回购。我当然可以使用origin查看我的本地远程git remote。但是,我可以看到我的遥控器origin的遥控器吗?我可以看到有关这些遥控器的任何细节,例如URL吗?

1 个答案:

答案 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>