簡體   English   中英

可以在git中看到遙控器的遙控器嗎?

[英]Is it possible to see a remote's remotes in git?

我有一個本地git clone回購git clone 我當然可以看到我的本地遠程, origin使用git remote 不過,我可以看到我的遙控器,遙控器的origin 我可以看到有關這些遙控器的任何詳細信息嗎,例如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/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但首先在錯誤的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並出現“安靜”故障。 (實際的name-or-SHA-1無關緊要,除了全零的“ null hash”表示“不存在”(通常在Git中就是這種情況)。)

關於創建,我們可以期望使用null哈希來確保我們是創建引用的嗎?

$ 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哈希; 沒有使用null哈希的atomic-delete操作,只有atomic-create。 (如果我們提供了其他有效但不是$mastersha hash,則git update-ref -d正確失敗;因此原子刪除是一個兩步操作:解析以獲取哈希,然后嘗試使用該哈希進行刪除。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM