2012-01-25 6 views
14

Tôi có bản sao cục bộ của kho lưu trữ không còn có bất kỳ từ xa nào được liên kết với nó. Tôi đang cố gắng để đẩy repo này thành một từ xa mới tuy nhiên mỗi lần tôi nhận được tin nhắn này:Cách sửa đối tượng cây git xấu

error: Could not read 9eefe9305253b2c039a54cbc8aa22f7f8e6e8790 
fatal: bad tree object 9eefe9305253b2c039a54cbc8aa22f7f8e6e8790 

Tôi đọc trong câu hỏi tương tự ở đây là một cách để sửa chữa nó được lấy đối tượng này từ các bản sao khác của kho hoặc tiến hành khôi phục cài đặt gốc. Tôi không thể làm gì cả vì tôi không có một bản sao của repo này nữa.

Có cách nào để chỉ cần loại bỏ cam kết này hoặc một số loại giải pháp khác sẽ cho phép tôi đẩy repo vào lịch sử lưu giữ từ xa mới không?

+0

Bạn không cần điều khiển từ xa hoặc "bản sao khác của repo này" để thực hiện 'git reset --hard'. – vcsjones

+0

Cảm ơn, không biết điều đó. Tôi chỉ làm điều đó nhưng vấn đề vẫn còn tồn tại, cam kết đó là đưa ra các vấn đề nó là một vấn đề rất cũ. – Flupkear

+0

hai cách: một - xem trực tiếp tệp (giải nén nội dung) và xem bạn có thể sửa nó không. hai - tìm cam kết tham chiếu đến cây được đề cập và thực hiện khôi phục cài đặt gốc cho phụ huynh của cam kết đó. Tùy thuộc vào cam kết đó là tham chiếu đến cây có liên quan, bạn có thể mất rất nhiều dữ liệu. –

Trả lời

2

Để thực sự sửa chữa các vấn đề và không mất bất kỳ dữ liệu (với điều kiện là cây đó là đối tượng duy nhất còn thiếu, mà tôi nghi ngờ), bạn có thể thử này:

  1. thanh toán phụ huynh cam kết của cam kết với liên quan cây
  2. thử git mèo-file -p với tên của các vấn đề cam kết để xem những gì cam kết thông báo nói (hy vọng nó sẽ cho bạn biết những gì đã thay đổi)
  3. bây giờ bạn có thể có thể để xác định những thay đổi mà là thực hiện và từ cấu trúc thư mục này hy vọng có thể suy ra.
  4. nếu 3 làm việc, sau đó bạn có thể tạo cây của mình theo cách thủ công bằng cách sử dụng trình soạn thảo văn bản và máy nén zlib. Các mục trong tệp tee sẽ là các đối tượng cây hoặc các đốm màu khác. Hy vọng rằng hầu hết các tập tin và thư mục được chia sẻ (không có thay đổi) giữa hai cam kết. Điều này sẽ cho phép bạn sử dụng lại hầu hết các mục từ đối tượng cây của cam kết đã kiểm xuất.
+1

Vấn đề là tệp bị thiếu, khi tôi chạy * git cat-file -p ... * Tôi nhận được điều này: lỗi: không thể tìm thấy 9e108293be3997c2d922b4c473a5a28cc737e446 – Flupkear

+0

Vâng, bạn có thể xem xét cam kết theo cách thủ công ... nhưng rất có thể bạn sẽ phải viết một tập lệnh sẽ làm điều đó cho bạn. Kiểm tra trang này để biết tổng quan về cách định dạng tệp trông như thế nào: http://book.git-scm.com/1_the_git_object_model.html –

+0

Làm cách nào để bạn tạo cây của mình theo cách thủ công? – MikeKusold

0

Tôi gặp sự cố này. Khởi động lại máy tính của tôi thực sự cố định nó vì vậy hãy thử nó trước khi làm bất cứ điều gì khác. Hoặc có lẽ tôi chỉ có may mắn nhưng đáng để bắn!

+1

tính năng này không hoạt động đối với tôi :( – rfcoder89

0

Chỉ cần thoát khỏi applcation mà bạn truy cập vào git và khởi động lại. Làm việc cho tôi cho xcode-iOS.

+2

"Bạn đã thử tắt và bật lại chưa?" – Martin

0

Tôi có lệnh git repo trong một thư mục cũng nằm trong thư mục OneDrive trên máy tính của tôi. Nếu bạn sử dụng OneDrive trên một máy khác, hãy đẩy từ repo trên máy tính đó và sau đó kéo/đẩy từ máy của riêng bạn một lần nữa.