Các đối tượng lỏng lẻo của NỮA mà GUI Git đề cập đến là gì?


219

Khi tôi mở GUI Git , tôi nhận được một thông báo bật lên đề cập đến loose objects. Tôi đã làm git gcvà điều đó đã loại bỏ tin nhắn.

Cái gì loose objectsvà làm thế nào tôi có thể ngăn điều này xảy ra lần nữa?


Bạn có thể chỉ cần nhấp vào "Có" trong thông báo bật lên khi nó hỏi liệu các đối tượng lỏng lẻo có nên được đóng gói ngay bây giờ không. GUI Git sẽ chạy git gccho bạn, với một thanh tiến trình GUI đẹp (mặc dù được hiển thị là bị kẹt hầu hết thời gian).
ADTC

Câu trả lời:


144

Một đối tượng (đốm, cây và cam kết) với SHA nói - 810cae53e0f622d6804f063c04a83dbc3a11b7ca sẽ được lưu trữ tại

.git/objects/81/0cae53e0f622d6804f063c04a83dbc3a11b7ca

(sự phân chia trong hai ký tự đầu tiên để cải thiện hiệu năng của hệ thống Tệp vì hiện tại không phải tất cả các đối tượng được lưu trữ trong cùng một thư mục)

Các đối tượng được lưu trữ như trên được gọi là các đối tượng lỏng lẻo.

Khi bạn bắt đầu với repo của bạn, bạn chủ yếu có các đối tượng lỏng lẻo. Khi số lượng tăng cao, nó trở nên không hiệu quả và chúng được lưu trữ trong một tệp gói. Những đối tượng như vậy được gọi là đối tượng đóng gói.

 git gc

là những gì bạn chạy để đóng gói các đối tượng (Thông thường các đối tượng lỏng lẻo không cần thiết và vài tuần tuổi cũng bị xóa và với --prune=<date>tùy chọn, bạn có thể buộc xóa các đối tượng lỏng lẻo không còn cần thiết. Giống như khi bạn sửa đổi một cam kết. Đối tượng cam kết cũ là không cần lâu hơn.)


3
Các --prunetùy chọn được kích hoạt theo mặc định, và kể từ khi git gcđược tự động kích hoạt bởi việc sử dụng chung (ví dụ commit), bạn thường không cần phải lo lắng về việc này. Tôi không sử dụng git gui và tôi không thể tìm thấy chính xác nơi nó được kích hoạt trong nguồn, nhưng nó sẽ tự kiểm tra hoặc chỉ chặn lệnh gcđược kích hoạt bằng lệnh được gọi. Tuy nhiên, chắc chắn không có gì phải lo lắng về việc sử dụng thông thường.
Cascabel

21
Có bất kỳ nhược điểm để đóng gói các đối tượng lỏng lẻo? Nếu không, tại sao Git không tự động làm điều đó?
Louis Rhys

13
Tôi không nghĩ đúng là nó tự động xảy ra. Tôi cam kết thường xuyên nhưng 'git gui' đã đề cập có 50.000 đối tượng lỏng lẻo (và đã tự hỏi tại sao git quá chậm, dự án lớn trong hơn 4 năm không có gc thủ công)
Kevin

1
@Kevin Hiệu suất của dự án lớn của bạn có cải thiện sau khi chạy git gcthủ công không? Tôi nghĩ rằng nó nên được cải thiện, bởi vì các đối tượng lỏng lẻo là không hiệu quả, và 50.000 là một con số rất lớn. Tôi cũng phát hiện ra rằng việc đóng gói cũng làm giảm đáng kể không gian sử dụng của .gitthư mục.
ADTC

3
@LouisRhys, "Khi các đối tượng được ghi vào đĩa, nó thường ở định dạng lỏng lẻo, vì định dạng đó ít tốn kém hơn để truy cập. Tuy nhiên, cuối cùng bạn sẽ muốn tiết kiệm dung lượng bằng cách đóng gói các đối tượng" - từ Git Book liên kết trong câu trả lời dưới đây
chris

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.