在我的服务器上“源代码”我这样做:
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和包。
答案 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 push
和git 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
。