2010-03-23 29 views
16

Tôi muốn hiển thị nội dung của tệp được cung cấp bởi một đường dẫn tại một trạng thái cụ thể của một repo git. Tôi đã không thực hiện được điều này:Làm cách nào để hiển thị nội dung của tệp ở trạng thái cụ thể của repo git?

git show f825334150cd4bc8f46656b2daa8fa1e92f7796d:Katana/source/Git/GitLocalBranch.h 
fatal: ambiguous argument 
'f825334150cd4bc8f46656b2daa8fa1e92f7796d:Katana/source/Git/GitLocalBranch.h': unknown revision or path not in the working tree. 
Use '--' to separate paths from revisions 

Cam kết được đề cập không sửa đổi tệp được chỉ định. Làm thế nào tôi có thể hiển thị nội dung của một tập tin tại một trạng thái nhất định (được chỉ định bởi một băm cam kết) bất kể sự tham gia của tập tin trong cam kết?

Trả lời

4

Cú pháp bạn đang sử dụng khớp mà thể hiện trong những ví dụ cho git show manpage, nhưng git dường như được gợi ý rằng bạn nên xác định như thế này:

# I _don't_ think this is your answer... 
git show f825334150 -- Katana/source/Git/GitLocalBranch.h 

mà tôi đã chắc chắn sử dụng cho git log và có trong manpage của nó.

Đường ruột của tôi, tuy nhiên, cho tôi biết rằng bạn sử dụng đường dẫn tuyệt đối chứ không phải đường dẫn bên trong đỉnh của cây làm việc git của bạn. Bạn cần phải chắc chắn rằng nếu thư mục .git của bạn đang ở Katana/source/Git/.git, sau đó bạn chop off tất cả mọi thứ trước khi .git, như vậy:

git show f825334150:GitLocalBranch.h 

Nếu bạn đang cố gắng để hiển thị một blob git từ ngoài git làm việc khu vực, bạn cần phải làm một cái gì đó như thế này:

GIT_DIR=Katana/source/Git git show f825334150:GitLocalBranch.h 

Điều này sẽ cho git nơi nó có thể tìm thấy dữ liệu cho kho lưu trữ của bạn.

Đường dưới cùng: kiểm tra kỹ đường dẫn của bạn và đảm bảo chúng đúng. Bạn có thể cần phải thiết lập một GIT_DIR nếu bạn không chạy lệnh của bạn từ bên trong khu vực làm việc git.

+0

Katana/nguồn/Git/GitLocalBranch.h là một đường dẫn tương đối từ git cơ sở thư mục – richcollins

+0

Vâng, đúng vậy, sau đó. 'F82533' là một cam kết? Bạn có thể kiểm tra kiểu của nó bằng cách chạy 'git cat-file -t f82533'. – MikeSep

+1

Chỉ cần kiểm tra rằng 'git show commitHash: path/to/file' hoạt động tốt cho tôi khi đề cập đến một tập tin không thay đổi trong cam kết. – MikeSep

23

Đây có thể là sự cố với đặc điểm đường dẫn của bạn.

này hoạt động, cho thấy phiên bản của Makefile trong phạm b1b22df407417...

git show b1b22df407417:Makefile 

Hoặc phiên bản hiện tại chi nhánh chủ

git show master:Makefile 

Hoặc phiên bản hiện tại chi nhánh exper:

git show exper:Makefile 

Hoặc phiên bản trước trên nhánh exper:

git show exper^:Makefile 

Và vân vân

+0

Tôi khá chắc chắn rằng nó không phải là một vấn đề với đường dẫn. Tôi nghĩ rằng vấn đề là tập tin không được sửa đổi bởi cam kết. Tôi nhận được kết quả tương tự cho bất kỳ tệp nào không được sửa đổi bởi cam kết. – richcollins

+0

Ồ, tôi cho rằng bạn đã chọn phiên bản cụ thể vì bạn biết rằng tệp đã được sửa đổi trong đó. – stefanB

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