2012-06-20 14 views
17

Czytałem tę odpowiedź o osiem-pięć razy, ale jest coś nie mam zrozumienia poprawnie:git-upload-pack: polecenie nie znaleziono

git-upload-pack: command not found, how to fix this correctly

Kiedy próbuję sklonować repozytorium na moim serwerze, mam następujące:

bash: git-upload-pack: command not found 

Ale kiedy sklonować dając możliwość -u /usr/local/bin/git-upload-pack klon, wszystko dobrze działa.

Myślę, że to ma sens, ponieważ to jest pozycja pakietu git-upload-pack na moim serwerze.

Górna odpowiedź sugeruje, że mój plik .bashrc na serwerze musi zostać zaktualizowany, aby to odzwierciedlić, ponieważ wynik ssh [email protected] echo \$PATH nie zwraca /usr/local/bin. (Zwraca /usr/bin:/bin:/usr/sbin:/sbin).

Ale kiedy patrzę na mojego pliku .bashrc, zawiera:

export PATH=/usr/local/bin:$PATH 

Więc teraz jestem zdezorientowany.

Co muszę zrobić, aby za każdym razem nie używać opcji -u /usr/local/bin/git-upload-pack? Dlaczego ssh [email protected] echo \$PATH nie zwraca /usr/local/bin? Czy ma to coś wspólnego z powłokami logowania i bez logowania?

Proszę pomóc! Z góry dziękuję.

+0

Zobacz [tę część podręcznika 'bash'] (http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files) – kostix

Odpowiedz

23

Wiąże się z tym problemem:

https://serverfault.com/questions/130834/svnssh-getting-bash-to-load-my-path-over-ssh

Ciii nie ładuje środowisko domyślnie podczas wysyłania polecenia bez przechodzenia do trybu interaktywnego.

dobrym rozwiązaniem jest jeden z pliku .ssh/Środowisko:

w/etc/ssh/sshd_config dodać:

PermitUserEnvironment yes 

Następnie wystarczy utworzyć .ssh/katalog i zrzucić envronment do.ssh/środowisko:

cd ~/ 
mkdir .ssh 
env > .ssh/environment 

Restart SSH

/etc/init.d/sshd restart 

Teraz, kiedy to zrobić z lokalnym komputerze:

ssh [email protected] "which git-upload-pack" 

ty s'd dostać

/usr/local/bin/git-upload-pack 

i git clone s'd work.

+1

Próbowałem uzyskać dostęp do repozytorium git na moim macu przy użyciu ssh. Musiałem edytować plik/etc/ssh/sshd_config i dodać "PermitUserEnvironment yes", a następnie ponownie uruchomić sshd poprzez Preferencje systemowe-> Udostępnianie-> Usuń login. Nie musiałem tworzyć pliku .ssh/environment – user674669

+0

Wygląda jak literówka w poleceniu restartu. Nie powinno to być: /etc/init.d/ssh restart? – javydreamercsw

11

Tak, ma to związek z powłokami logowania i bez logowania. Plik .bashrc jest ładowany tylko do powłok niezalogowanych. Możesz użyć .bash_profile dla powłok logowania. Po prostu dodaj tę samą modyfikację do swojego PATH w pliku .bash_profile i powinieneś być dobry.

export PATH=/usr/local/bin:$PATH 

można znaleźć this is an interesting article on the difference between .bashrc and .bash_profile, and login and non-login shells.

+0

Dzięki! Ma sens - ale nie działa dla mnie. Zarówno mój '.bash_profile' i' .bashrc' zawierają kod 'export PATH =/usr/local/bin: $ PATH', ale to nie działa. 'ssh ty @ remotemachine echo \ $ PATH' nadal zwraca'/usr/bin:/bin:/usr/sbin:/sbin'. Możliwe przyczyny? (Guesses.) 1. Znajduję się na serwerze Temple Mediów i istnieje plik .bash_mt_profile. (Ale dodałem 'export PATH =/usr/local/bin: $ PATH' dla dobrej miary i nie działało.) 2. Jestem zalogowany jako root. 3. Nie używam bash (ale kiedy się loguję, mówi, że mogę edytować mój '.bash_profile', aby usunąć wiadomości systemowe. – Chris

+0

@Chris: Out of interest, czy twój' .bash_profile'/'.bashrc 'plik ma perms ustawiony na 644, jest własnością właściwego użytkownika i nie ma zestawu wykonywalnego bitów? Plik jest pobierany, nie jest wykonywany, ale musi należeć do użytkownika, który próbuje źródła i musi mieć 644 (lub więcej) perms. Jeśli po wykonaniu tych czynności ciągle się nie udaje, zawsze możesz spróbować dodać zmianę PATH do '/ etc/profile' lub'/etc/profile.d/* '(w zależności od twojej dystrybucji). –

+0

Jeszcze raz dziękuję Tak, perms to 644. Zresetowałem je mimo to Nie zadziałało Dodałem plik o nazwie git.sh do '/ etc/profile.d /' z kodem 'export PATH =/usr/local/bin: $ PATH' (czy to jest właściwa rzecz do d o?) i to też nie zadziałało. Mogę tylko założyć, że nie zrobiłem czegoś oślepiająco oczywistego. – Chris

0

byłem coraz następujące błędy: git-credential-osxkeychain died of signal 11 Kiedy robiłam git pull, chciałbym uzyskać fatal: https://github.com/.../../info/refs?service=git-upload-pack not found: did you run git update-server-info on the server?

zgaduję że miał do czynienia z moich poprzednich nieprawidłowych poświadczeń GitHub w pęku kluczy.

  • Otwarty narzędzie Dostęp do pęku kluczy używając przestrzeni polecenia
  • wyszukiwane github w narzędziu dostępu Brelok
  • usunięte wszystkie wpisy związane z github (ponieważ już nie potrzebował)
  • następnie konfigurację hasła git sekcja buforowanie ponownie setup git
  • pracował

Okrywać któregokolwiek z powyższych odpowiedzi nie pomaga .

1

Moje rozwiązanie tego problemu

  1. Sprawdź ścieżkę do git-upload-pack na zdalnej maszynie:

    ssh [email protected] 'which git-upload-pack' 
    

Jeśli daje ścieżkę - skopiuj go (bez git-upload-pack i ukośnego ukośnika Przykłady: /usr/bin, /home/yourname/bin, /whatever/gituploadpack/path itp.).

  1. Sprawdź swoją ścieżkę na zdalnym komputerze podczas logowania skorupy:

    ssh [email protected] 'echo $PATH' 
    

Nie ma takiej ścieżki (/whatever/gituploadpack/path), prawda? Dobry!

  1. Zaloguj się na zdalnym komputerze:

    ssh [email protected] 
    
  2. Otwórz.bashrc_profile:

    nano /home/yourname/.bashrc_profile 
    
  3. Znajdź te linie jeżeli występuje:

    if [ -f ~/.bashrc ]; then 
        ~/.bashrc 
    fi 
    

... i zmień je na:

if [ -f ~/.bashrc ]; then 
     source ~/.bashrc 
    fi 
  1. Otwarte .bashrc:

    nano /home/yourname/.bashrc 
    
  2. Dodaj te 4 linie:

    if [ -d "/whatever/gituploadpack/path" ] ; then 
        PATH="$PATH:/whatever/gituploadpack/path" 
    fi 
    export PATH 
    
  3. Wyjście zdalne urządzenie:

    exit 
    
  4. Sprawdź ścieżkę na zdalnym komputerze podczas logowania skorupy:

    ssh [email protected] 'echo $PATH' 
    

Czy widzisz /whatever/gituploadpack/path? Gratulacje!

Uwaga teraz rozwiązałeś już nie tylko problem git-upload-pack, ale także git-receive-pack i inne pliki wykonywalne na twoim /whatever/gituploadpack/path!

2

Rozwiązałem ten problem w moim przypadku logując się do zdalnego komputera, skrzynki Ubuntu i robiąc sudo apt-get install git. Nie jestem pewien, czy to przesada, czy nie, ale natychmiast rozwiązałem problem.

Powiązane problemy