GIT - 无法推送,因为我的路径是由git解释的

时间:2012-11-22 06:35:41

标签: git ssh

在我的服务器上“源代码”我这样做:

cd /home/AyamJ/pbGIT
git --bare init

在我的本地笔记本上:

git push AyamJ@sourcecode:/home/AyamJ/pbGIT master

我收到了错误:

git:'/home/AyamJ/pbGIT' is not a git command. See 'git --help'
fatal: the remote end hung up enexpectedly

在我的〜/ .ssh / config

Host sourcecode
user AyamJ
port 31313
Host localhost
user Dell
port 22

为什么这条路径是由git解释的?

== UPDATE ==

我有2台服务器(通过git --bare init)“localhost”和“sourcecode”

我做

GIT_TRACE=1 git push sourcecode:/home/AyamJ/pbGIT master

got 

trace: built-in : git 'push' 'sourcecode:/home/AyamJ/pbGIT' 'master'
trace: run_command : 'ssh' 'sourcecode' 'git-receive-pack '\''/home/AyamJ/pbGIT'\'''

AyamJ@sourcecode's password:
git: '/home/AyamJ/pbGIT' is not a git command. See  'git --help'
fatal: The remote end hung up unexpectedly

GIT_TRACE=1 git push localhost:/home/Dell/pbGIT master

got 

trace: built-in : git 'push' 'localhost:/home/Dell/pbGIT' 'master'
trace: run_command : 'ssh' 'localhost' 'git-receive-pack '\''/home/Dell/pbGIT'\'''

Dell@sourcecode's password:
Everything up-to-date

两个服务器都有类似的cygwin和包。

2 个答案:

答案 0 :(得分:2)

如果您有配置文件,则应使用:

git push sourcecode:/home/AyamJ/pbGIT master

之后,尝试一下:

GIT_TRACE=1 git push sourcecode:/home/AyamJ/pbGIT master

并查看“GIT: clone works, remote push doesn't. Remote repository over copssh”:
添加--receive-pack='git receive-pack'可能有所帮助 或者至少是git config --global remote.origin.receivepack "git receive-pack" 并检查您是否设置了GIT_SSH variable

请务必使用最新的Git版本进行尝试,看看问题是否仍然存在。

答案 1 :(得分:1)

使用相对路径

使用相对路径它可能会起作用:

git push AyamJ@sourcecode:pbGIT master

我不确定原因,但是使用abs路径测试它对我来说失败了,所以这可能是你的错误的一部分。 这不是使用git的正常方式。

正常

首先确保设置ssh配置,以便您不需要用户名和密码,即这应该有效:

(notebook)$ ssh sourcecode
...
(server)$

在本地git repo上 - 创建一个指向远程服务器存储库的remote

(notebook)$ git remote add sourcecode:pbGIT origin
(notebook)$ git push

故意最后一个命令没有参数 - 使用最新版本的git它会给出如下错误信息:

fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use
   git push --set-upstream origin <current branch name>

错误消息告诉您如何创建它以便您可以在没有参数的情况下进行推/拉,因此执行该命令。使用旧版本的git命令是相同的,没有错误消息。执行此命令后,例如:

git push --set-upstream origin master

从这一点开始,没有必要使用git pushgit pull的参数

反过来说

从头开始,或者如果远程存储库已经存在,实际上更容易以相反的方式执行这些操作

(notebook)$ ssh sourcecode
...
(sourcecode)$ mkdir x.git
(sourcecode)$ cd x.git
(sourcecode)$ git init --bare
(sourcecode)$ exit
(notebook)$ git clone sourcecode:x.git
Cloning into 'x'...
warning: You appear to have cloned an empty repository.

注意上面,远程git存储库已在名为whatever.git的文件夹中创建 - 这仅仅是识别git文件夹/存储库的惯例,它没有任何特殊含义,尽管它可能是在所有的例子中。

如果之后您查看.git/config文件,您会看到以下内容:

(notebook)$ cd x; more .git/config
    [core]
    repositoryformatversion = 0 
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = sourcecode:x.git
[branch "master"]
    remote = origin
    merge = refs/heads/master

表示远程源指向源代码服务器,并且存在的一个分支master跟踪远程origin