1

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

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 解释?

== 更新 ==

我有 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 和包。

4

2 回答 2

2

如果你有一个配置文件,那么你应该使用:

git push sourcecode:/home/AyamJ/pbGIT master

之后,尝试:

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

并查看“ GIT:克隆有效,远程推送无效。通过 copssh 远程存储库”:
添加一个--receive-pack='git receive-pack'可能会有所帮助。
或者至少,一个git config --global remote.origin.receivepack "git receive-pack".
并检查您是否设置了GIT_SSH变量

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

于 2012-11-22T06:47:24.347 回答
1

使用相对路径

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

git push AyamJ@sourcecode:pbGIT master

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

保持正常

首先确保设置了 ssh 配置,这样您就不需要用户名和密码,即这应该可以工作:

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

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

(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 pushand一起使用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.

于 2012-11-22T08:54:04.190 回答