2009-09-23 39 views
13

Gần đây tôi đã nâng cấp MacBook Pro để Snow Leopard và "git pull" Thu nhập của tôi:"git pull" vỡ

rakudo $ git pull 
git: 'pull' is not a git-command. See 'git --help' 

Did you mean this? 
     shell 
rakudo $ git-pull 
-bash: git-pull: command not found 

Tôi đã thử cài đặt lại qua macports, nhưng vô ích. Sau đó, tôi thấy điều này

rakudo $ git --exec-path 
/Users/ovid/libexec/git-core 

Điều đó làm tôi ngạc nhiên vì thư mục đó không tồn tại và cũng chưa từng tồn tại. Google không trợ giúp ở đây. Hy vọng rằng bạn có thể :)

+0

Tôi gặp vấn đề tương tự, khi tôi cố gắng để hack git nhị phân trong gói Xcode. 'ln -s /Applications/Xcode.app/Contents/Developer/usr/bin/git ~/bin/git' – shakthi

Trả lời

23

Nhìn vào nguồn gốc của git, có một bình luận trong git.c:

/* 
* We use PATH to find git commands, but we prepend some higher 
* precedence paths: the "--exec-path" option, the GIT_EXEC_PATH 
* environment, and the $(gitexecdir) from the Makefile at build 
* time. 
*/ 

Nếu bạn gọi git --exec-path, bạn kết thúc gọi const char *git_exec_path(void) trong exec_cmd.c. Trông như thế này:

const char *env; 

if (argv_exec_path) 
    return argv_exec_path; 

env = getenv(EXEC_PATH_ENVIRONMENT); 
if (env && *env) { 
    return env; 
} 

return system_path(GIT_EXEC_PATH); 

Bây giờ, _argv_exec_path_ được thiết lập khi bạn nói --exec-path=/some/where như vậy có thể được giảm giá. Bạn đã tuyên bố rằng biến môi trường chưa được đặt. GIT_EXEC_PATH được xác định trong quá trình biên dịch trong Makefile. Đi ngược lại, có vẻ như nó được định nghĩa là chỉ libexec/git-core. Vì vậy, chúng ta cần phải nhìn vào những gì system_path() thay vào đó.

Tôi không chắc chắn liệu RUNTIME_PREFIX được xác định cho bạn hay không. Nhưng khi đang định vị trong Makefile, tôi đã nhận thấy rằng prefix mặc định là $(HOME). Tôi nghi ngờ rằng điều này có thể là nguyên nhân của vấn đề của bạn.

Câu trả lời đơn giản là đặt này trong ~/.bashrc:

export GIT_EXEC_PATH=/opt/local/libexec/git-core 

Nếu bạn muốn tìm hiểu thêm về những gì đang xảy ra, có thể bạn sẽ cần phải biên dịch git sử dụng port -d upgrade -f git-core (hoặc tương tự) và xem xét chặt chẽ tại nhật ký xây dựng để xem vị trí tiền tố đang được đặt. Ngẫu nhiên, port cat git-core cho thấy mức sử dụng nặng nề của ${prefix} vì vậy nó nên (hy vọng) là hiển nhiên.

+0

Tuyệt vời! Điều đó đã sửa nó. – Ovid

+3

Chỉ cần làm rõ cho bất kỳ ai khác tìm thấy điều này: đường dẫn đến lệnh git thực sự được đặt tại thời gian biên dịch (mặc dù nó có thể được sửa đổi bởi GIT_EXEC_PATH, và sau đó bằng --exec-path). Điều này rất có thể được đặt vào thời gian biên dịch bằng 'make prefix =/path/to/git ...'. Hy vọng rằng bất kỳ phiên bản dựng sẵn nào cũng sẽ làm được điều này! – Cascabel

+1

Nếu tôi chỉ biết bạn muốn có một cách giải quyết và không sửa chữa! ;-) –

2

Thú vị. hãy thử echo $GIT_EXEC_PATH, which git. Nó không liên quan đến con thú tuyết…

+0

$ GIT_EXEC_PATH chưa được đặt và" git "trả về/opt/local/bin/git, như tôi ' m mong đợi. – Ovid

+0

Điều này thật kỳ lạ. Tôi đã không có vấn đề với 'git' và tuyết, nhưng tôi không sử dụng macports '. Khi tôi về nhà, tôi sẽ thử 'git' của macports và xem nó có hoạt động không ... –

+0

Vâng, git trả về của macports'/opt/local/libexec/git-core' cho tôi ... –

1

Bạn đã thử các bước trên ports Migration wiki page chưa? Thật là đau đớn, nhưng sau khi thực hiện quá trình gỡ cài đặt và cài đặt lại --force, tôi chưa gặp bất kỳ sự cố nào với bất kỳ cổng nào của mình, bao gồm git (với mọi biến thể được bật).

+0

Vâng, đã làm điều đó một vài ngày trước sau khi tôi thấy rất nhiều cổng của tôi không hoạt động. Đó là, như bạn đề cập, đau đớn. Nó cũng không giải quyết vấn đề git của tôi :) – Ovid

0

Git biên dịch dễ dàng như vậy thực sự không có lý do gì để làm phiền với bất kỳ sự điên loạn nào của macports. Loại bỏ bất cứ điều gì trong/opt và cố gắng xây dựng nó theo cách thông thường. Tỷ lệ là tốt nó sẽ làm việc.

0

lựa chọn khác là tải về từ trang hữu ích trên GitHub:

http://help.github.com/mac-git-installation/

Họ có một trình cài đặt độc lập (mặc dù tùy chọn thứ hai có MacPorts ...)

Họ đã sử dụng để có một hướng dẫn rất đẹp trong một trang có vẻ như được chia nhỏ ngay bây giờ. Xấu hổ làm sao.

2

Trên hệ thống của tôi, libexec/git-core nằm trong số /usr/local và không /opt/local. Thư mục /usr/local/libexec chỉ có gốc quyền truy cập đối với tôi, và điều này cố định vấn đề:

sudo chmod a+rx /usr/local/libexec 
+0

Điều đó cũng làm việc cho tôi. Tôi đã cài đặt (cấu hình, thực hiện, sudo thực hiện cài đặt) trên Mac OS X, và dường như nó đặt các điều khoản sai ở đó. – danwood

0

Đối với tôi, đây là một vấn đề chỉ liên quan đặc biệt để brew tôi cài đặt. Trên OSX 10.9.2, tôi đã pha cài đặt dưới gốc, do đó, điều này làm việc cho tôi:

sudo su 
export GIT_EXEC_PATH=/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core 
brew update # or whatever you want from here