git-upload-pack: command not found, when cloning remote Git repo
Building on Brian's answer, the upload-pack path can be set permanently by running the following commands after cloning, which eliminates the need for --upload-pack
on subsequent pull/fetch requests. Similarly, setting receive-pack eliminates the need for --receive-pack
on push requests.
git config remote.origin.uploadpack /path/to/git-upload-pack
git config remote.origin.receivepack /path/to/git-receive-pack
These two commands are equivalent to adding the following lines to a repo's .git/config
.
[remote "origin"]
uploadpack = /path/to/git-upload-pack
receivepack = /path/to/git-receive-pack
Frequent users of clone -u
may be interested in the following aliases. myclone should be self-explanatory. myfetch/mypull/mypush can be used on repos whose config hasn't been modified as described above by replacing git push
with git mypush
, and so on.
[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
You can also use the "-u" option to specify the path. I find this helpful on machines where my .bashrc doesn't get sourced in non-interactive sessions. For example,
git clone -u /home/you/bin/git-upload-pack you@machine:code
I found and used (successfully) this fix:
# Fix it with symlinks in /usr/bin
$ cd /usr/bin/
$ sudo ln -s /[path/to/git]/bin/git* .
Thanks to Paul Johnston.
Make sure git-upload-pack
is on the path from a non-login shell. (On my machine it's in /usr/bin
).
To see what your path looks like on the remote machine from a non-login shell, try this:
ssh you@remotemachine echo \$PATH
(That works in Bash, Zsh, and tcsh, and probably other shells too.)
If the path it gives back doesn't include the directory that has git-upload-pack
, you need to fix it by setting it in .bashrc
(for Bash), .zshenv
(for Zsh), .cshrc
(for tcsh) or equivalent for your shell.
You will need to make this change on the remote machine.
If you're not sure which path you need to add to your remote PATH
, you can find it with this command (you need to run this on the remote machine):
which git-upload-pack
On my machine that prints /usr/bin/git-upload-pack
. So in this case, /usr/bin
is the path you need to make sure is in your remote non-login shell PATH
.