2013-02-18 186 views
3

我照顧了公司的Git存儲庫。我們使用Gitosis來管理Git存儲庫。我通過git clone [email protected]:repo克隆一個存儲庫,並且根本找不到一些提交。 git show <commit>返回fatal: bad object f723e2ea9af0e380158d90c36e21a60991760d31當通過SSH進行克隆時,Git提交失敗

的對象是以下,只有一包文件:

$ tree .git/objects/ 
.git/objects/ 
|-- info 
| `-- packs 
`-- pack 
    |-- pack-4d930eca23ad902fc4a4809d01b86c4217b0b262.idx 
    `-- pack-4d930eca23ad902fc4a4809d01b86c4217b0b262.pack 

2 directories, 3 files 

我找不到在包文件中的承諾:

$ git verify-pack -v .git/objects/pack/pack-4d930eca23ad902fc4a4809d01b86c4217b0b262.idx | grep f723e2e 
$ 

當我使用克隆庫Git的服務器上本地文件系統,提交在那裏,可以檢出。

我能找到的承諾(第一個):

$ ls .git/objects/f7/ 
23e2ea9af0e380158d90c36e21a60991760d31 84f33d44863cbe6ca4ae03cddcc673048f04bb 
3b1ef7031d634b4aa443925dd29cc779356caa 9807359a1c65f312a1d4642e5191416443e20b 
6fbd26fccc5a8e89f221c9196eb8083e73632e 

如何通過SSH克隆時,我的用戶得到的所有提交?

+1

檢查遠程回購的一致性,這似乎是莫名其妙地壞了(錯誤消息說片缺失)。 – vonbrand 2013-02-18 06:25:04

回答

1

既然你可以在服務器上克隆,嘗試git bundle,它會給你一個文件

然後將該文件複製到本地計算機上,然後從該軟件包中克隆。

您可以檢查,即「捆綁」克隆後,如果可以的話:

  • 添加遠程回Gitosis的回購
  • 推/從所述上游Gitosis的回購拉。

(注:當你發現提交的腐敗回購,check if their size is 0,並嘗試delete it,或restore it from another clone

+0

我使用'git bundle create poi --branches --tags'創建了這個包。然後從bundle文件中克隆,'.git/objects'的內容與通過SSH克隆的庫相同,即我的OP中的兩個包文件,它們仍然遺漏了一些提交。 – fossilet 2013-02-18 08:19:53

+0

@fossilet請注意,您可以複製捆綁包並在本地克隆(以消除SSH的任何影響)。關於丟失的對象,你可以在服務器端的克隆上找到它們嗎? – VonC 2013-02-18 08:24:40

+0

是的,我從包中克隆,但最後一條消息是'警告:遠程HEAD是指不存在的裁判,無法結帳。 '。當從本地文件系統克隆時,提交可以通過'git show'顯示,但是它們在'git log'中丟失,儘管FishEye可以顯示提交。 – fossilet 2013-02-18 08:35:49