2009-09-23 6 views
13

ja niedawno zmodernizowane moim MacBook Pro Snow Leopard i "git pull" powroty:"git pull" złamane

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 

Próbowałem ponownej instalacji poprzez DarwinPorts, ale bezskutecznie. Potem zobaczyłem to, co mnie zaskoczyło, ponieważ ten katalog nie istnieje, ani nigdy go nie istniał. Google nie pomaga tutaj. Mam nadzieję, że możesz :)

+0

Wpadłem na ten sam problem, kiedy próbowałem zhakować plik binarny git z pakietu Xcode. 'ln -s /Applications/Xcode.app/Contents/Developer/usr/bin/git ~/bin/git' – shakthi

Odpowiedz

23

Patrząc w źródle git, jest to komentarz w 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. 
*/ 

Jeśli zadzwonisz git --exec-path, skończyć się nazywając const char *git_exec_path(void) w exec_cmd.c. To wygląda tak:

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); 

Teraz _argv_exec_path_ jest ustawiony kiedy mówisz --exec-path=/some/where więc mogą być dyskontowane. Stwierdziłeś, że zmienna środowiskowa nie jest ustawiona. GIT_EXEC_PATH jest zdefiniowany podczas kompilacji w Makefile. Idąc w tył, wydaje się, że jest zdefiniowany jako libexec/git-core. Musimy więc spojrzeć na to, co robi system_path().

Nie jestem pewien, czy dla Ciebie zdefiniowano RUNTIME_PREFIX. Ale podczas korzystania z Makefile zauważyłem, że domyślnie prefix to $(HOME). Podejrzewam, że to może być przyczyną twoich problemów.

Odpowiedź jest prosta: aby umieścić to w ~/.bashrc:

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

Jeśli chcesz dowiedzieć się więcej o tym, co się dzieje, prawdopodobnie będziesz musiał przekompilować git przy użyciu port -d upgrade -f git-core (lub podobny) i przyjrzeć w dzienniku kompilacji, aby zobaczyć, gdzie ustawia się prefiks. Nawiasem mówiąc, port cat git-core pokazuje duże użycie ${prefix}, więc powinno (miejmy nadzieję) być oczywiste.

+0

Doskonale! To naprawiło to. – Ovid

+3

Po prostu wyjaśnienie dla każdego, kto to znajdzie: ścieżka do poleceń gita jest rzeczywiście ustawiona na czas kompilacji (chociaż może być modyfikowana przez GIT_EXEC_PATH, a następnie przez --exec-path). Najprawdopodobniej jest ustawiony podczas kompilacji przez 'make prefix =/path/to/git ...'. Mam nadzieję, że wszystkie wersje gotowe poprawnie to zrobią! – Cascabel

+1

Gdybym tylko wiedział, że potrzebujesz rozwiązania, a nie poprawki ;-) –

2

Interesujące. spróbuj echo $GIT_EXEC_PATH, which git. Jest mało prawdopodobne, aby był powiązany ze śnieżną bestią ...

+0

$ GIT_EXEC_PATH nie jest ustawiony i" który git "zwraca/opt/local/bin/git, tak jak ja ' spodziewam się. – Ovid

+0

To jest dziwne. Nie miałem żadnych problemów z 'git' i śniegiem, ale nie używam tego komputera. Kiedy wrócę do domu, wypróbuję "git" komputera macport i zobaczę, czy źle działa ... –

+0

Cóż, git Macporta zwraca '/ opt/local/libexec/git-core' exec-path dla mnie ... –

1

Czy próbowałeś już kroków na ports Migration wiki page? To było bolesne, ale po odinstalowaniu i ponownym zainstalowaniu --force nie miałem żadnych problemów z żadnym z moich portów, który zawiera git (z prawie każdym włączonym wariantem).

+0

Tak, zrobiłem to kilka dni temu, gdy okazało się, że wiele z moich portów nie działa. To było, jak wspomniałeś, bolesne. To też nie rozwiązało mojego problemu z git :) – Ovid

0

Git tak łatwo się komplikuje, że nie ma powodu, by zawracać sobie głowę szałanią. Pozbądź się tego, co jest w/opt i spróbuj zbudować to w normalny sposób. Szanse są dobre, że będzie działać.

0

Inną opcją jest pobranie ze strony pomocnego na GitHub:

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

Mają instalatora autonomicznego (choć druga opcja jest MacPorts ...)

Używali mieć bardzo fajny samouczek na całej stronie, który wydaje się teraz rozbity. Jaka szkoda.

2

W moim systemie libexec/git-core jest w postaci /usr/local, a nie /opt/local. Katalog /usr/local/libexec miał tylko root dostępnych uprawnień dla mnie, i to naprawić problem:

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

Ten też zadziałał dla mnie. Zainstalowałem (configure, make, sudo make install) na Mac OS X i najwyraźniej wprowadziłem tam złe uprawnienia. – danwood

0

Dla mnie to był problem tylko specjalnie istotne dla mojego wywaru instalacji. Na OSX 10.9.2, miałem napar zainstalowany pod root, więc to działa dla mnie:

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