Chỉ để cho vui, tôi đang cố gắng đặt khoảng 85GB các tệp nhị phân chủ yếu là 6MB vào git. Git chugs cùng một lúc nhưng luôn thất bại về nửa chừng với thông điệp "gây tử vong: nhầm lẫn bởi dữ liệu nguồn đối tượng không ổn định" theo sau là một SHA1. Bạn có biết tại sao? Có cách nào để sửa nó k?git nói "gây tử vong: bị nhầm lẫn bởi dữ liệu nguồn đối tượng không ổn định"
Trả lời
Hoặc
- một hoặc nhiều tập tin đang được sửa đổi trong hoạt động của bạn, hoặc
- một cái gì đó đang gây ra mâu thuẫn đọc (ví dụ thất bại phần cứng).
Phiên bản ngắn: Nhà phát triển Git không có ý định sử dụng nó trên các tệp dễ bay hơi.
Do bố trí * rằng Git sử dụng cho “đối tượng lỏng lẻo” và ngữ nghĩa hệ thống tập tin giới hạn mà nó giả **, Git phải biết byte đầu tiên (hai nhân vật hex) của tên đối tượng (SHA- 1) của một đối tượng mới trước khi nó có thể bắt đầu lưu trữ đối tượng đó.
* Thư mục objects/[0-9a-f][0-9a-f]/
. Xem gitrepository-layout
.
** Cụ thể, nó cần phải có khả năng đổi tên tệp "nguyên tử".Một số hệ thống tập tin (thường là hệ thống tập tin mạng, cụ thể là AFS, tôi tin) chỉ đảm bảo đổi tên nguyên tử khi nguồn và đích của một đổi tên nằm trong cùng một thư mục.
Hiện tại, Git có hai SHA-1 chuyển qua mỗi tệp mới. Pass đầu tiên được sử dụng để kiểm tra xem liệu Git đã biết về nội dung của tệp hay chưa (cho dù tên đối tượng SHA-1 của nó đã tồn tại trong kho lưu trữ đối tượng) chưa. Nếu đối tượng đã tồn tại, vượt qua lần thứ hai không được thực hiện.
Đối với nội dung mới (đối tượng không có trong kho đối tượng), tệp được đọc lần thứ hai trong khi nén và tính toán SHA-1 của dữ liệu đang được nén. Dữ liệu nén được ghi vào một tệp tạm thời chỉ được đổi tên thành tên đối tượng lỏng lẻo cuối cùng của nó nếu kiểm tra SHA-1 ban đầu ("đã được lưu trữ?") Khớp với SHA-1 sau (băm dữ liệu được nén và ghi) . Nếu các băm SHA-1 không khớp, thì Git sẽ hiển thị thông báo lỗi mà bạn đang thấy và hủy bỏ. Kiểm tra lỗi này đã được thêm vào trong 748af44c63 được phát hành lần đầu tiên trong Git 1.7.0.2.
Hai lý thuyết:
Something được bằng văn bản cho những tập tin này trong khi bạn đang cố gắng đặt chúng vào git.
Bạn có một số loại lỗi đĩa/bộ nhớ gây hỏng dữ liệu.
Từ source, sha1 của blob được tính hai lần:
- write_sha1_file_prepare
- write_loose_object
cả gọi từ write_sha1_file (đó cũng là một con đường từ force_object_loose, nhưng nó là được sử dụng cho repacks).
Băm đầu tiên được sử dụng để kiểm tra xem đối tượng đã được biết hay chưa (mặc dù git cố gắng hết sức để đảm bảo rằng các tệp không được sửa đổi, touch
hoặc như vậy sẽ làm mất dấu); thứ hai là băm của dữ liệu thực sự được đưa vào zlib để nén, sau đó được viết.
Hàm băm thứ hai có thể tốn kém hơn một chút do tính toán zlib, có thể giải thích tại sao hai băm được tính toán (mặc dù có vẻ là tai nạn lịch sử và tôi đoán chi phí hiệu suất khi thêm đối tượng mới tác động nhiều hơn so với thắng CPU khi phát hiện các thay đổi giả). Ai đó có thể thêm một dự phòng để logic kiểm tra tồn tại write_changed_sha1 được làm lại với sha1 mới, để các tệp không ổn định đó cũng có thể được thêm vào. Điều đó sẽ hữu ích cho các bản sao lưu, khi một vài tệp đang được thêm vào đang mở.
Có khả năng khác, ngay cả khi từ xa. Đó sẽ là một tệp thực sự lớn (ví dụ: 3 hoặc nhiều hơn gb) đơn giản, git không thể xử lý nó. Chúng tôi thấy rằng lỗi khi cố gắng tạo một kho lưu trữ trong cấu trúc có các tệp lớn
Chỉ có điều này xảy ra với một số tập tin đăng nhập nhiều gigabyte mà snuck vào một cây làm việc git. – fche
Các tệp lớn (nhưng ổn định) chắc chắn gây ra lỗi này. Thực tế là thông báo lỗi là gây hiểu lầm và Git không cho bạn biết trước về kích thước là một thiếu sót, ít nhất là bây giờ, của Git. Tôi đã thử git-annex, một cách đầy hứa hẹn để xử lý các tệp lớn, nhưng cho đến nay vẫn chưa thể làm cho nó hoạt động trên OS/X. –
Nó có thể xảy ra nếu bạn cố gắng git svn clone hoặc git svn tìm nạp kho lưu trữ trên hệ thống tệp btrfs, có thể liên quan đến điều kiện chủng tộc hoặc nguyên tử bên trong btrfs bò tính năng.
Ví dụ:
git svn --authors-file=authors.map clone http://svn.example.com/svn/repo repo
hoặc
cd repo; git svn --authors-file=../authors.map fetch
Tôi tìm thấy một workaround bằng cách thiết lập bạn căn cứ thư mục làm việc mà không copy-on-write:
chattr +C .
Sau đó, bạn cần phải lặp tất cả dữ liệu của bạn (ví dụ):
cp -fr repo repo.new; rm -fr repo; mv -f repo.new repo
cp authors.map authors.map.new; mv -f authors.map.new authors.map
Sau đó, nó không nên thất bại (và chạy nhanh hơn).
- 1. Git: gây tử vong: tên đối tượng không rõ ràng: 'nguồn gốc/release_2.6'
- 2. Tôi bị nhầm lẫn bởi mã này
- 3. lỗi: tệp đối tượng trống .git/objects /../ .. rỗng - gây tử vong: đối tượng lỏng lẻo ... bị hỏng
- 4. gây tử vong: Không phải là một tên đối tượng hợp lệ: 'thầy'
- 5. git lưu trữ gây tử vong: Hoạt động không được hỗ trợ bởi giao thức
- 6. Đồng thời và gây nhầm lẫn kênh
- 7. Lỗi Git: gây tử vong: không thể kết nối ổ cắm (đối số không hợp lệ)
- 8. Giao diện tab có gây nhầm lẫn không?
- 9. gây tử vong: git-write-tree: lỗi xây dựng cây
- 10. Dịch vụ Foundation Foundation Gây tử vong khi git push
- 11. JAXB bị nhầm lẫn về các phần tử gốc?
- 12. nhầm lẫn bởi vốn tôi trong vim
- 13. thư mục bị xóa trong Git do nhầm lẫn
- 14. Git Peer to Peer chia sẻ - gây tử vong: lỗi đọc: Đối số không hợp lệ
- 15. git submodule thêm gây tử vong: Không phải là Git Repository
- 16. Toán tử điều kiện bị nhầm lẫn, nhưng tại sao?
- 17. Hành vi gây nhầm lẫn của Powershell
- 18. gây tử vong: Không phải là một kho git (hoặc bất kỳ thư mục mẹ): .git
- 19. Lỗi "từ xa: gây tử vong: đối tượng xấu: 0000000000000000000000000000000000000000` có nghĩa là gì?
- 20. gitignore - gây tử vong: không có tệp nào được thêm
- 21. Vẫn còn bị nhầm lẫn bởi Java Timestamps vv với MySQL
- 22. C++ trở về đối tượng tạm thời nhầm lẫn
- 23. PHP: Lỗi kích hoạt gây tử vong?
- 24. Có nghĩa là gây nhầm lẫn nhận xét ở trên "string.Empty" trong nguồn .NET/BCL?
- 25. git đổi tên/xóa nhầm lẫn
- 26. vấn đề git: gây tử vong: Không thể ghi tệp chỉ mục mới
- 27. Trình duyệt có PHP: gây nhầm lẫn đầu ra
- 28. clone git - gây tử vong: lỗi từ xa: Truy cập bị từ chối hoặc kho không xuất khẩu
- 29. Git 'gây tử vong: Không có tham chiếu như vậy: HEAD'
- 30. Bitmap.Lockbits nhầm lẫn
Chắc chắn rằng nó không dễ bay hơi, nhưng nó vẫn được * rất * hướng dẫn để đọc thêm về nội bộ của git. Tôi đoán bây giờ tôi phải đi và chắc chắn rằng đĩa của tôi không phải là thất bại. – jbfink
chắc chắn sẽ tốt đẹp nếu git nói "gây tử vong: bị nhầm lẫn bởi dữ liệu nguồn đối tượng không ổn định" theo sau là SHA1 VÀ THÌ SAU THEO TẬP_TIN. Khá khó chịu mà nó không cho bạn biết những gì tập tin là dễ bay hơi ... Nếu nó đã làm tôi có thể hợp lý thêm nó hoặc thư mục của tôi .gitignore –
vì vậy giải pháp cho điều này là gì? –