2012-09-04 34 views
40

Tôi đang cố gắng khởi tạo repo GIT mới từ Debian (thực ra là VM trên VirtualBox, được cài đặt và chạy trên Mac OS X):GIT gây tử vong: đối số mơ hồ 'HEAD': không sửa đổi hoặc đường dẫn không có trong cây đang hoạt động

[[email protected]:~ $] mkdir test 
[[email protected]:~ $] cd test 
[[email protected]:test $] git init 
Initialized empty Git repository in /home/david/test/.git/ 
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree. 
Use '--' to separate paths from revisions 
[[email protected]:test (master #) $] 

Sự cố là gì?

+0

Điều này không nên xảy ra ... Phiên bản git là gì? Nó được cài đặt như thế nào? – CharlesB

+2

Git được cài đặt thông qua apt-get và phiên bản là 1.7.2.5. – David

+4

Có vẻ như tôi đang sử dụng một số lệnh git trong dấu nhắc trình bao của bạn - tôi nghĩ thông báo lỗi đến từ đó. – ebneter

Trả lời

20

Như những người khác đã chỉ ra, thông báo này đến từ dấu nhắc trình bao của bạn. Vấn đề là trong một kho lưu trữ mới được tạo ra HEAD (.git/HEAD) trỏ đến một ref chưa tồn tại.

% git init test 
Initialized empty shared Git repository in /Users/jhelwig/tmp/test/.git/ 
% cd test 
% cat .git/HEAD 
ref: refs/heads/master 
% ls -l .git/refs/heads 
total 0 
% git rev-parse HEAD 
HEAD 
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree. 
Use '--' to separate paths from revisions 

Có vẻ như rev-parse đang được sử dụng mà không kiểm tra lỗi đầy đủ trước. Sau khi cam kết đầu tiên được tạo .git/refs/heads trông hơi khác một chút và git rev-parse HEAD sẽ không còn thất bại nữa.

% ls -l .git/refs/heads 
total 4 
-rw------- 1 jhelwig staff 41 Oct 14 16:07 master 
% git rev-parse HEAD 
af0f70f8962f8b88eef679a1854991cb0f337f89 

Trong chức năng cập nhật thông tin Git cho phần còn lại của dấu nhắc shell của tôi (phiên bản sửa đổi nặng nề của wunjo theme nhắc cho ZSH), tôi đã phần sau đây để làm được việc này:

zgit_info_update() { 
    zgit_info=() 

    local gitdir=$(git rev-parse --git-dir 2>/dev/null) 
    if [ $? -ne 0 ] || [ -z "$gitdir" ]; then 
     return 
    fi 

    # More code ... 
} 
+1

Phiên bản cũ hơn của git (ít nhất tôi biết điều này đúng với 1.6.4.4) không sử dụng 'head' làm từ đồng nghĩa cho' HEAD'. Trong trường hợp của tôi, tôi bị mắc kẹt với phiên bản cũ hơn của git và có thể giải quyết vấn đề bằng cách tham khảo 'HEAD' trong nỗ lực của tôi thay vì' đầu'. –

2

Jacob Helwig đề cập in his answer rằng:

Dường như rev-phân tích cú pháp đang được sử dụng mà không kiểm tra đầy đủ lỗi trước tay

Commit 62f162f từ Jeff King (peff) cần cải thiện sự vững mạnh của git rev-parse trong Git 1.9/2.0 (Q1 2014) (ngoài của commit 1418567):

Đối với trường hợp chúng tôi không phù hợp (ví dụ, "doesnotexist..HEAD") , sau đó chúng tôi muốn thử xử lý đối số dưới dạng tên tệp.
try_difference() nhận được quyền này và luôn không được hiển thị trong trường hợp này.
Tuy nhiên, try_parent_shorthand() bao giờ unmunges, dẫn đến thông báo lỗi không chính xác, hoặc kết quả thậm chí không chính xác:

$ git rev-parse foobar^@ 
foobar 
fatal: ambiguous argument 'foobar': unknown revision or path not in the working tree. 
Use '--' to separate paths from revisions, like this: 
'git <command> [<revision>...] -- [<file>...]' 
5

Tôi có vấn đề này khi có một màn hình tùy chỉnh trong thiết bị đầu cuối của tôi khi tạo một dự án git mới (Tôi có tôi hiển thị chi nhánh trước tên đường dẫn, ví dụ:/current/path). Tất cả những gì tôi cần làm là thực hiện cam kết ban đầu với chi nhánh chính của mình để nhận được thông báo này.

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