2011-11-16 32 views
13

Tôi muốn tìm hiểu thêm về các hoạt động bên trong của git vì vậy tôi chạy các lệnh này:'git mèo-file -p <sha1>': 'chết người: Không phải là một tên đối tượng hợp lệ' trên các đối tượng ngẫu nhiên từ .git/đối tượng

cd .git/objects/62 

ls 
00cb2f01089db22aca24675272a16712e89747 
0ee798881329430bfef6c558be7b14c1f0676f 
1087f408e2f2bd782d53a1211a7418fee4f6a7 
a6a71f3bd5a3af882f3f0ec4fad4c672055746 
f95e69f344b52c5038d922260189475626e69a 

git cat-file -p 00cb2f01089db22aca24675272a16712e89747 

và đã nhận lỗi sau:

fatal: Not a valid object name 00cb2f01089db22aca24675272a16712e89747 

Tại sao tôi lại nhận được nó?

Tôi đã thử 10 lần (đối với các tệp khác nhau từ các thư mục khác nhau bên trong .git/objects) và gặp lỗi tương tự.

Làm cách nào để xem nội dung thực tế của các tệp (có thể là blob, cây hoặc cam kết)?

Trả lời

15

Bạn không cần phải cd vào cửa hàng đối tượng .git, nhưng bạn phải cung cấp các sha1 hash đầy đủ:

git cat-file -p 621087f408e2f2bd782d53a1211a7418fee4f6a7 

Git lưu trữ đối tượng của nó trong .git/objects, phân phối trên 256 thư mục để giữ kích thước của thư mục xuống. Hai charactors đầu tiên của mỗi băm được sử dụng làm tên thư mục, 38 ký tự còn lại được sử dụng làm tên tệp.

+0

ok, nhưng không phải cd'ing vào đối tượng .git không trả lời được câu hỏi của tôi ... Tại sao tôi gặp lỗi? và làm cách nào để xem nội dung thực tế của đối tượng? –

+1

@IgorPopov: Nó trả lời câu hỏi của bạn. Bạn đã cố gắng hiển thị một đối tượng không tồn tại. Có một cái nhìn gần gũi về băm của bạn và tại băm từ câu trả lời của tôi - xem sự khác biệt? – knittl

+0

Tôi đã thêm vào câu hỏi đầu ra thực tế từ "ls". Như bạn có thể thấy có ** NO ** file với tên bắt đầu bằng "** 62 **". Tệp cat-git không thành công với mỗi tệp này. Nếu nó nằm trong đầu ra "ls" thì tôi đoán nó tồn tại ... –

Các vấn đề liên quan