Git

git 從已刪除的儲存庫中保留遠端資訊

  • July 9, 2016

我不能再複製任何儲存庫了。

$ git clone git@bitbucket.org:myaccount/myrep.git
Cloning into 'myrep'...
conq: repository does not exist.
fatal: Could not read from remote repository.

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

問題是我的 sshid_rsa密鑰還是一樣的。無論如何,我重新創建了它,在我BitBucket的帳戶的 ssh 密鑰中更新了它,當我嘗試複製我的儲存庫時出現了同樣的錯誤。我在另一台機器(redhat)上嘗試了相同的過程,並且 git clone 工作。所以發生了一些事情git

然後我進入另一個 git 版本化項目:

$ cd share-repo

$ ls -a
./          ../         .git/       .gitignore* f1*         f2*

我列印git config文件:

$ cat .git/config
[core]
   repositoryformatversion = 0
   filemode = true
   bare = false
   logallrefupdates = true
[remote "origin"]
   fetch = +refs/heads/*:refs/remotes/origin/*
   url = git@bitbucket.org:myaccount/share-repo.git
[branch "master"]
[user]
   name = myaccount

我嘗試一個pull

$ git pull -v
conq: repository does not exist.
fatal: Could not read from remote repository.

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

好吧,讓我們試試推?

$ git push -v origin master
Pushing to git@bitbucket.org:myaccount/p2.git
conq: repository does not exist.
fatal: Could not read from remote repository.

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

嗯?Git嘗試推送到儲存庫 p2?它應該嘗試推送到share-repo…它到底是如何嘗試推送到名稱為 p2 的儲存庫?p2事實上,我今天早上有一個名為 repo ,但我BitBucket在做一些測試時從我的帳戶中刪除了它,然後我p2從我的電腦中刪除了相關文件夾。是如何git保留資訊的p2?最重要的是,它儲存在哪裡,我該如何重置它?

$ git remote -v
origin  git@bitbucket.org:myaccount/p2.git (fetch)  # ?!
origin  git@bitbucket.org:myaccount/p2.git (push)   # ?!
origin  git@bitbucket.org:myaccount/share-repo.git (push)

奇怪的是,正如我們之前看到的,該git config文件僅包含有關 repo 的資訊share-repo。我還嘗試在整個文件夾中定位字元串 p2:

$ grep -Rin p2 ../share-repo/
# Nothing

我手動重新創建了一個名為p2. Bitbucket我試圖複製它:

$ cd ..

$ git clone git@bitbucket.org:myaccount/p2.git
Cloning into 'p2'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

$ cd p2

$ cat .git/config 
[core]
   repositoryformatversion = 0
   filemode = true
   bare = false
   logallrefupdates = true
   ignorecase = true
   precomposeunicode = true
[remote "origin"]
   url = git@bitbucket.org:myaccount/p2.git
   fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
   remote = origin
   merge = refs/heads/master

$ git remote -v
origin  git@bitbucket.org:myaccount/p2.git (fetch)
origin  git@bitbucket.org:myaccount/p2.git (push)
origin  git@bitbucket.org:myaccount/p2.git (push)

好的,git clone工作正常,但現在它為遙控器引用了兩條額外的線,其中一條是重複的。在使用 repo 時還記得那些額外的行share-repo嗎?這是關於那些仍然與我已刪除的舊 p2 儲存庫相關的前兩行。

讓我們嘗試推動一些變化:

$ git touch .gitignore

$ git add .gitignore

$ git commit -m "first commit"

$ git push -v origin master
Pushing to git@bitbucket.org:myaccount/p2.git
Counting objects: 3, done.
Writing objects: 100% (3/3), 216 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@bitbucket.org:myaccount/p2.git
* [new branch]      master -> master
updating local tracking ref 'refs/remotes/origin/master'
Pushing to git@bitbucket.org:myaccount/p2.git
To git@bitbucket.org:myaccount/p2.git
= [up to date]      master -> master
updating local tracking ref 'refs/remotes/origin/master'
Everything up-to-date

所以 git 推送到 repo p2,並嘗試第二次這樣做,因為這兩個 repos 在我的bitbucket帳戶上具有相同的名稱和相同的位置,所以它顯然發現一切都是最新的。

現在我可以複製我想要的任何儲存庫,前提是我的帳戶p2中存在該儲存庫。Bitbucket如果我想進行push一些更改,比如說share-repo,它會起作用,但 git 也會嘗試將相同的更改推送到儲存庫p2。我把自己弄得一團糟,我不知道如何解決它。

總而言之,我今天早上有一個名為的儲存庫p2,我從中bitbucket刪除了它,然後我從我的電腦中刪除了它的文件夾。從那時起,無論我cd進入哪個 git 項目,git remote -v它都會向我展示它已經儲存了 - 在某處 - 與後期 repo 相關的資訊p2,位於我正在處理的目前 repo 之上。Git 更新命令 - 複製、推送、拉取 - 除非我p2Bitbucket. 一旦我這樣做了,git 更新命令會將命令應用到我正在處理的目前 repo 以及 repo p2。

p2不是我今天刪除的唯一儲存庫,所以我很想知道這裡發生了什麼。

我很樂意接受我能得到的所有幫助。

解決了。我無語。我使用 bash 自動完成(選項卡)對文件進行了快速檢查~/.git-whatever,但它不起作用,所以我盲目地認為問題出在其他地方。帕特里克的評論揭示了:我仔細檢查了使用ls -a ~/~/.gitconfig他寫的真的在這裡,它包含有關遙控器的資訊:

$ cat ~/.gitconfig
[user]
  name = myaccount
  email = me@domain.com
[remote "origin"]
  push = git@bitbucket.org:myaccount/p2.git

現在我記住了造成這種情況的原因:在試驗時,我使用了該命令git config --global remote.origin it@bitbucket.org:myaccount/p2.git並更改了其他全域配置。我只是不明白做了什麼,--global因為我發現repo/.git/config文件中沒有任何更改。


關於 git 配置的附加文件:https ://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration

引用自:https://unix.stackexchange.com/questions/294780