通过SSH克隆时,Git提交丢失

时间:2013-02-18 06:18:42

标签: git

我负责公司的Git存储库。我们使用Gitosis来管理Git存储库。我通过git clone git@gitserver:repo克隆了一个存储库,根本找不到一些提交。 git show <commit>会返回fatal: bad object f723e2ea9af0e380158d90c36e21a60991760d31

对象在下面,只有一个包文件:

$ 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 个答案:

答案 0 :(得分:1)

由于您可以在服务器上进行克隆,请尝试 git bundle ,这将为您提供一个文件。

然后在本地计算机上复制该文件,并从该捆绑包中克隆。

你可以在那之后检查&#34;捆绑&#34;克隆,如果可以的话:

  • 将遥控器添加回gitosis repo
  • 从上游gitosis repo推/拉。

(注意:当您在损坏的仓库中找到提交时,check if their size is 0,并尝试delete itrestore it from another clone