社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

向远程git服务器添加损坏或删除的提交

Leandros Sardinas • 5 年前 • 1453 次点击  

我的远程git服务器上的某些文件似乎已损坏,当我尝试将repo克隆到新系统时,出现以下错误。

remote: error: Could not read c168e82dd62c0cdbf3ea7c3be3a84218a12c8a03
remote: fatal: Failed to traverse parents of commit 02d8c9217333d89afd61da1788fa82329b692610
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header

当我跑步的时候 git fsck --name-objects :

broken link from  commit 02d8c9217333d89afd61da1788fa82329b692610 (~17)
              to  commit c168e82dd62c0cdbf3ea7c3be3a84218a12c8a03 (~18)

我有一个没有错误的回购协议的本地副本,有没有办法只复制丢失或损坏的文件?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/45474
 
1453 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Leandros Sardinas
Reply   •   1 楼
Leandros Sardinas    6 年前

因为我在本地PC上有一个最新的存储库,所以我最终用--bare参数克隆了存储库,并用这些文件更新了服务器。

git clone --bare <path to clone from> <path to clone to>
torek
Reply   •   2 楼
torek    6 年前

没那么多 文件夹 丢失或损坏的是内部对象(commit 02d8c9217333d89afd61da1788fa82329b692610 在服务器上)引用另一个内部对象( c168e82dd62c0cdbf3ea7c3be3a84218a12c8a03 )那东西不见了。当一些对象存储在单独的文件中时,其他对象则是 拥挤的: 一个文件中有数千个对象。

如果你有东西 c168e82dd62c0cdbf3ea7c3be3a84218a12c8a03型 您可以从自己的存储库中提取它,发送它,然后将它插入到另一个存储库中。然而,这通常比重新克隆 好的 存储库(前提是它拥有所有的东西不是每个克隆都是完整的,例如,它可能已经过时,或者它可能是 --single-branch 克隆)。

要提取一个对象,请首先查找其类型:

git cat-file -t c168e82dd62c0cdbf3ea7c3be3a84218a12c8a03

然后提取原始数据:

git cat-file -p c168e82dd62c0cdbf3ea7c3be3a84218a12c8a03 > /tmp/obj.data

复制对象数据并将其插入存储库:

scp /tmp/obj.data serverhost:/tmp/obj.data
ssh serverhost
cd ...
git hash-object -w -t $type /tmp/obj.data

在哪里? $type 类型是否来自 git cat-file -t 在存储库的好拷贝的机器上。

(添加丢失的对象可能会修复所有问题,或者只会暴露更多问题,这也是通常最好用另一个克隆完全替换坏的存储库的另一个原因。)