liuhui998's new blog

using octopress

Git 私有仓库配置中的一些问题

| Comments

Git 私有仓库配置中的一些问题

git upload-pack git receive-pack command not found

Git Communtiy Book中,我们说可以通过ssh协议来建立自己的私有仓库。但是一般自己在公网上的有服务器的朋友并不多,一般是在有一个带ssh帐号虚拟主机,如bluehost、hostmonster之类。

但是我按照前文配好后,在用git clone远程的私有仓库时会出现:

1
2
bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedly

Git over ssh的clone, push, fetch 等操作会调用git-upload-pack或git-receive-pack。

我用ssh帐号登录到服务器上,发现在 ~/.bashrc 里配了git-upload-pack和git-receive-pack的路径;在命令行下也能执行这两个命令。

后来我了解了到是因为主机商把openssh服务器从4升级到5。这时我用自己的用户名登录ssh服务器时,它就不会加载用户(我)的 .bashrc 文件,那么它就自己找不到这两个命令。

因为在虚拟主机上,我们没有root权限,不能把git-upload-pack,git-receive-pack这些命令放到 /usr/bin 下。

最简单的办法就是把git-upload-path 和 git-recieve-path 这两命令的路径放到你本地项目的 .git/config中 [remote “origin”] 之下。

下面这是一个例子:

.git/config 原来的内容:

1
2
3
[remote "origin"]
      url = <the repo address>
      fetch = +refs/heads/*:refs/remotes/origin/*

.git/config 修改之后的内容:

1
2
3
4
5
[remote "origin"]
     url = <the repo address>
     fetch = +refs/heads/*:refs/remotes/origin/*
     uploadpack = <path to git-upload-pack>
     receivepack = <path to git-receive-pack>

Action In Detail

我把我的一个作法说一下:

假设你根据这个在你的ssh服务器上把git仓库配好了。

下面这些命令就是在本地的操作:

1
2
3
4
5
mkdir repo
cd repo
git init
git remote add origin <remote git over ssh address> # 添加远程仓库的ssh地址
                                            # 例如: username@hostname.com:/path/repo.git

按前面的格式修改 .git/config 文件内容

1
2
git fetch origin  
git merge origin/master

Comments