簡體   English   中英

ssh -vT git@github.com工作正常,代理位於github ssh密鑰中。 問題出在哪里?

[英]`ssh -vT git@github.com` works fine, and agent is in github ssh keys. Where is the issue?

我剛買了一台新機器,正在開發一個新的github存儲庫。 我將其克隆到我的機器上

git clone git@github.com:<username>/<exact-repo-name>.git

它克隆很好:

Cloning into '<exact-repo-name>'...
remote: Counting objects: ###, done.
remote: Total ### (delta 0), reused 0 (delta 0), pack-reused ###
Receiving objects: 100% (###/###), ### KiB | 0 bytes/s, done.
Resolving deltas: 100% (###/###), done.
Checking connectivity... done.

並且,我通過執行for remote in git branch -r; do git checkout -b $remote; done本地添加所有遠程分支: for remote in git branch -r; do git checkout -b $remote; done for remote in git branch -r; do git checkout -b $remote; done

然后,當我嘗試從任何分支中拉出時,使用

git pull origin/<branch-name> 

我收到了一個非常常見的錯誤:

origin/<branch-name> does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

因此,我完成了所有步驟:

ssh -vT git@github.com
ssh-add -l
eval "$(ssh-agent -s)"

這些都成功了,我檢查了ssh-add -l的輸出,發現它在我的github帳戶的列表ssh項中。 我進入設置-> ssh鍵,在那里看到代理。

除了ssh ,還有某些用戶權限嗎?

我同意@Felix的觀點,盡管這可能是偽裝的,但這很可能不是SSH問題。 相反,我認為您的路徑有問題。 您可以嘗試像這樣運行git clone

git clone https://username@github.com/username/exact-repo-name.git

這里的username是您的GitHub用戶名。 Git會提示您輸入密碼,因此您不必以純文本形式輸入密碼。 請閱讀這篇SO文章以獲取更多信息。

這可能不是ssh問題,因為ssh問題通常會導致顯示如下消息

fatal: The remote end hung up unexpectedly

最有可能是路徑問題:遠程路徑中有多余的斜線或空格(或者如果應該有空格,則命令行中缺少引號),或者大小寫錯誤。 仔細檢查URL的其余部分。 這也可能正是它所說的,是一個權限問題-您確定要以該存儲庫的正確用戶身份進行連接嗎?

編輯:從您添加的詳細信息來看,您似乎只是弄混了pull命令的語法。 如果這樣做,是否有效?:

git checkout <branch-name>
git pull # Edit: don't do this without reading all of 'git help pull'

另外, git fetch --all可行嗎? git pull只是git fetch然后是git merge 。)

進一步編輯:我可以重現您的錯誤; 這是命令語法問題。 這里有更多示例:

“源”是本地文件夾中的git存儲庫; 我將其克隆到一個名為“ dest”的文件夾中:

$ git clone source dest
$ cd dest

現在,我在您的for循環中執行git branch命令:

$ git branch -r
  origin/HEAD -> origin/master
  origin/branch1
  origin/branch2
  origin/master

我希望第一行會引起問題,因為這將導致這些命令在for循環中運行:

git checkout -b "origin/HEAD"
git checkout -b "->"
...

(請注意,您的示例缺少`git branch -r`周圍的反引號,因此,如果您發布的內容實際上是您正在運行的內容,則最終將得到名為“ git”,“ branch”和“ -r”的分支,這實際上不是您想要的...如果您難以將反引號放入內聯代碼塊中,請參閱https://meta.stackexchange.com/questions/55437/how-can-the-backtick-character-be-包含在代碼中

然后,如果我嘗試使用pull命令,則會收到與您相同的錯誤:

$ git pull origin/branch1
fatal: 'origin/branch1' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

這是因為git pull將遠程存儲庫名稱(origin)和遠程分支名稱(branch1)作為兩個單獨的參數,並用空格分隔。 所以這工作:

$ git pull origin branch1
From /tmp/source
 * branch            branch1    -> FETCH_HEAD
Already up-to-date.

但是,這可能並不是您想要的,因為您似乎想創建一堆本地分支以跟蹤起源上的相同命名分支(例如,您想要一個名為“ branch1”的本地分支來跟蹤“ origin / branch1”) 。 您的本地分支創建命令不包括設置跟蹤,因此您實際得到的是一個名為“ origin / branch1”的本地分支和一個遠程存儲庫“ origin”上的一個分支,也稱為“ branch1”,即在運行您的for循環, git branch -a的輸出是:

$ git branch -a
  master
  origin/HEAD
  origin/branch1
* origin/branch2
  origin/master
  remotes/origin/HEAD -> origin/master
  remotes/origin/branch1
  remotes/origin/branch2
  remotes/origin/master

...因此有兩個分支稱為“ origin / branch1”,唯一使它們與眾不同的是,在一種情況下,存儲庫是您的本地分支,分支的字面全名是“ origin / branch1”,而在在另一種情況下,存儲庫是遠程存儲庫(命名為origin),而分支的字面全名是“ branch1”,記為“ origin / branch1”-使用它可能會非常混亂(在某些命令中, git會抱怨說“ origin / branch1不明確”,您會遇到問題)。

還請注意,您的for循環創建的每個新分支實際上只是master的副本(或原始的任何默認/選定分支),因為您沒有為它們指定從遠程分支開始。 也就是說,在您的克隆命令中,您選擇了一個分支(可能是主分支)來設置本地存儲庫。 然后,您為for循環中的每一行告訴git“從現在所在的位置創建新分支”,因此盡管這些新分支中的每一個都在遠程上具有所有不同的名稱,但它們都是對您選擇的第一個分支的引用克隆。 這可能不是您想要的。

我認為您真正想要的是為每個遠程分支運行的命令:

$ git checkout --track origin/branch1
Branch branch1 set up to track remote branch branch1 from origin.
Switched to a new branch 'branch1'

實際上,如果您剛剛進行了新的克隆,則git checkout branch1 [不帶-b ]會產生與我相同的效果-由於沒有名為branch1的本地分支,因此git會在您克隆的存儲庫中查找一個分支從並設置跟蹤(如果找到)。

...所以我想這整個帖子可以歸結為:

  • 在初始簽出命令中-b
  • 在您的pull命令中使用空格而不是斜杠

:)

參見https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches ,而git help pull的輸出可獲取有關遠程跟蹤和拉git help pull的更多信息。 其中有些有些微妙(甚至比我提到的所有警告還多:))。

暫無
暫無

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

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