Domanda

Uso git per sincronizzare due copie del mio progetto, una è la mia casella locale, l'altra il server di prova. Questo è un problema che si verifica quando accedo al nostro server di sviluppo remoto usando ssh;

git clone me@me.mydevbox.com:/home/chris/myproject
Initialized empty Git repository in /tmp/myproject/.git/
Password:
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedly
fetch-pack from 'me@me.mydevbox.com:/home/chris/myproject' failed.

(i nomi dei file sono stati cambiati per proteggere i colpevoli ...!)

Entrambe le caselle eseguono Solaris 10 AMD. Ho fatto qualche ricerca, se aggiungo --upload-pack = $ (quale git-upload-pack) il comando funziona (e dimostra che $ PATH contiene il percorso a 'git-upload-pack' come per la soluzione RTFM) ma questo è davvero fastidioso, inoltre 'git push' non funziona, perché non penso che ci sia un --unpack = opzione.

Per inciso, tutti i comandi git funzionano bene dalla mia casella locale, è la stessa versione del software (1.5.4.2), installata sullo stesso mount NFS su / usr / local / bin .

Qualcuno può aiutare?

È stato utile?

Soluzione

Assicurati che git-upload-pack sia sul percorso da una shell non di accesso. (Sulla mia macchina è in / usr / bin ).

Per vedere come appare il tuo percorso sul computer remoto da una shell non di accesso, prova questo:

ssh you@remotemachine echo \$PATH

(Funziona in Bash, Zsh e tcsh, e probabilmente anche in altre shell.)

Se il percorso che restituisce non include la directory che ha git-upload-pack , è necessario correggerlo impostandolo in .bashrc (per Bash), .zshenv (per Zsh), .cshrc (per tcsh) o equivalente per la tua shell.

Dovrai apportare questa modifica sul computer remoto.

Se non sei sicuro di quale percorso devi aggiungere al tuo PATH remoto, puoi trovarlo con questo comando (devi eseguirlo sul computer remoto):

che git-upload-pack

Sulla mia macchina che stampa / usr / bin / git-upload-pack . Quindi, in questo caso, / usr / bin è il percorso necessario per accertarsi che si trovi nella shell remota non di accesso PATH .

Altri suggerimenti

Puoi anche utilizzare " -u " opzione per specificare il percorso. Lo trovo utile su macchine in cui il mio .bashrc non proviene da sessioni non interattive. Ad esempio,

git clone -u /home/you/bin/git-upload-pack you@machine:code

Basandosi su Brian's risposta , il percorso del pacchetto di caricamento può essere impostato in modo permanente eseguendo i seguenti comandi dopo la clonazione, il che elimina la necessità di --upload-pack nelle successive richieste pull / fetch. Allo stesso modo, l'impostazione di ricezione-pacchetto elimina la necessità di --receive-pack su richieste push.

git config remote.origin.uploadpack /path/to/git-upload-pack
git config remote.origin.receivepack /path/to/git-receive-pack

Questi due comandi equivalgono all'aggiunta delle seguenti righe al .git / config di un repository.

[remote "origin"]
    uploadpack = /path/to/git-upload-pack
    receivepack = /path/to/git-receive-pack

Gli utenti frequenti di clone -u potrebbero essere interessati ai seguenti alias. myclone dovrebbe essere autoesplicativo. myfetch / mypull / mypush può essere utilizzato su repository la cui configurazione non è stata modificata come descritto sopra sostituendo git push con git mypush e così via.

[alias]
    myclone = clone --upload-pack /path/to/git-upload-pack
    myfetch = fetch --upload-pack /path/to/git-upload-pack
    mypull  = pull --upload-pack /path/to/git-upload-pack
    mypush  = push --receive-pack /path/to/git-receive-pack

Ho trovato e usato (con successo) questa correzione:

# Fix it with symlinks in /usr/bin
$ cd /usr/bin/
$ sudo ln -s /[path/to/git]/bin/git* .

Grazie a Paul Johnston .

Mac OS X e alcuni altri Unix hanno almeno il percorso dell'utente compilato in sshd per motivi di sicurezza, quindi quelli di noi che installano git come / usr / local / git / {bin, lib, ...} possono avere problemi poiché gli eseguibili git non si trovano nel percorso precompilato. Per ignorare questo, preferisco modificare il mio / etc / sshd_config cambiando:

#PermitUserEnvironment no

a

PermitUserEnvironment yes

e quindi creare i file ~ / .ssh / environment secondo necessità. I miei utenti git hanno i seguenti nel loro file ~ / .ssh / environment:

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin

Nota l'espansione della variabile non si verifica quando il file ~ / .ssh / environment viene letto così:

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

non funzionerà.

Per bash, deve essere inserito in .bashrc e non .bash_profile (.bash_profile è anche solo per shell di login).

La soluzione di Matt non ha funzionato per me su OS X, ma quella di Paul.

La versione breve dal link di Paul è:

Creato / usr / local / bin / ssh_session con il seguente testo:

#!/bin/bash
export SSH_SESSION=1
if [ -z "$SSH_ORIGINAL_COMMAND" ] ; then
    export SSH_LOGIN=1
    exec login -fp "$USER"
else
    export SSH_LOGIN=
    [ -r /etc/profile ] && source /etc/profile
    [ -r ~/.profile ] && source ~/.profile
    eval exec "$SSH_ORIGINAL_COMMAND"
fi

Esegui:

  

chmod + x / usr / local / bin / ssh_session

Aggiungi quanto segue a / etc / sshd_config :

  

ForceCommand / usr / local / bin / ssh_session

Ho riscontrato questi errori con la versione MsysGit.

Dopo aver seguito tutti i consigli che ho trovato qui e altrove, sono finito:

  

installazione della versione Cygwin di Git

sul server (Win XP con Cygwin SSHD), questo finalmente risolto.

Uso ancora il lato client della versione MsysGit

  

..in effetti, è l'unico modo in cui funziona   per me, dal momento che ottengo errori POSIX con   il Cygwin Git ne trae lo stesso   server sshd

Sospetto che un po 'di lavoro sia ancora necessario da questo lato dell'uso di Git .. (ssh + facilità di pull / push in Windows)

Come Johan ha sottolineato molte volte il suo .bashrc che è necessario:

ln -s .bash_profile .bashrc

Devi aggiungere

export PATH=/opt/git/bin:$PATH

prima di questa riga in .bashrc:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

Altrimenti non verranno eseguite tutte le istruzioni di esportazione ( vedi qui ).

Per zsh devi metterlo in questo file: ~ / .zshenv

Ad esempio, su OS X usando il pacchetto git-core di MacPorts:

$ echo 'export PATH = / opt / local / sbin: / opt / local / bin: $ PATH' > ~ / .Zshenv

Ho riscontrato problemi di connessione a un repository Gitolite usando SSH da Windows e ho scoperto che il mio problema era PLINK! Continuava a chiedermi una password, ma ssh gitolite @ [host] restituiva bene l'elenco dei repository.

Controlla la variabile di ambiente: GIT_SSH. Se è impostato su Plink, provalo senza alcun valore (" set GIT_SSH = ") e vedi se funziona.

Aggiungi la posizione del tuo git-upload-pack al file .bashrc dell'utente git remoto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top