Nếu bạn có quyền truy cập hệ thống tập tin với hay bất kỳ kho nguyên vẹn khác từ xa chứa đối tượng này, bạn sẽ có thể đến đó và chạy:
git cat-file tree af9ed8 > 9ed8...
Lưu ý rằng điều này chỉ đòi hỏi phải truy cập chỉ đọc để repo (bạn có thể viết tập tin ở nơi khác) vì vậy nó phải rất an toàn, và bạn thậm chí có thể làm điều đó như một người dùng không có quyền ghi vào hệ thống tập tin. Sau đó bạn có thể chuyển/sao chép nó vào nơi thích hợp trong repo của bạn:
cp path/to/9ed8... .git/objects/af/9ed8...
đối tượng Loose được lưu trữ trong thư mục với hai chữ số đầu tiên của băm; tên tệp là phần còn lại của băm.
Chỉnh sửa: Nếu đối tượng bị lỏng trên đầu từ xa, bạn cũng có thể trực tiếp sao chép nó ra khỏi .git/objects
, nhưng nếu nó được đóng gói, bạn phải giải nén nó với git unpack-objects
và tôi tưởng tượng các gói trong repo đó cực lớn. Cách tốt nhất để làm điều đó sẽ là sao chép packfile vào repo bị hỏng của bạn, xóa bất kỳ đối tượng bị hỏng, và sau đó sử dụng git unpack-objects < packfile
, mà sẽ không giải nén bất kỳ đối tượng nào đã tồn tại.
Tôi không chắc chắn cách thực hiện thông qua các lệnh từ xa thông thường; ngay cả mức độ thấp hơn git fetch-pack
vẫn hoạt động ở cấp độ ref, tìm nạp một gói với các cam kết cần thiết để hoàn thành ref. Tôi nghi ngờ rằng bạn có thể làm điều gì đó lén lút như xóa tất cả các đối tượng cam kết tham chiếu đến cây đó (git fsck
có thể giúp bạn tìm thấy chúng). Tôi đã thực sự hy vọng bạn có thể tạo một thẻ trỏ đến đối tượng đó, đẩy nó vào điều khiển từ xa, sau đó thử lấy thẻ từ xa (coaxing nó vào tìm nạp đối tượng) nhưng có vẻ như Git khá cẩn thận không cho phép bạn thực hiện hoặc thao tác một thẻ trỏ đến một đối tượng không tồn tại.
Tôi biết điều này không trả lời câu hỏi của bạn, nhưng bạn có thể xem xét đề xuất chia nhỏ tài khoản đó! Nếu nó lớn đến mức bây giờ, nó sẽ trở nên to hơn, và wow, phải mất nhiều thời gian để sao chép. – Cascabel
Điều gì sẽ xảy ra nếu bạn chạy 'git fetch origin'? Liệu nó có cố gắng tìm nạp quá nhiều đối tượng không? – Cascabel
@Jefromi Về cơ bản thì không thể nói được ^^. Các thủ tục chỉ là đồng bản sao nguyên repo. Tôi rất muốn làm cho nó bị chia cắt, nhưng đó sẽ là một công việc địa ngục, làm tê liệt cả nhóm và không phải những gì mà những kẻ phụ trách sẽ làm. Tôi không chịu trách nhiệm cho nó (tôi là kinda mới ...). Họ chỉ được sử dụng để đối phó với nó: thở dài: ... –