Git工作在http但不是ssh

Dem*_*tor 6 git ssh

我有一个远程存储库,当我通过http进行通信时工作正常,但是如果我使用ssh,它会在尝试推送时给出错误.

目标:让repo在ssh上工作

我可以直接ssh直接进入远程机器,git repo和git工作目录中的所有文件夹和文件都有771权限,所有者是apache,group是'test'(用户我正在使用'test' '是其成员).我也尝试将所有者和群组更改为"测试",但这没有帮助.我已经确认用户帐户能够通过ssh从git目录中读/写/执行.

由于使用了virtualmin,我有一个非标准的目录设置:
/ home/test(用户主页)
/ home/test/public_html(web root)
/ home/test/public_html/git(gitweb目录)
/ home/test/public_html/git/git.git(repo目录)

当我在本地执行任何git命令(直接在远程服务器上)时,这会导致与下面相同的错误消息(没有这样的文件或目录),除非我指定--git-dir和--work-tree,但是,因为http正在工作并推送到远程服务器应该不需要知道远程工作目录,我不知道这将是如何问题(并且也看不到如何修复它).

此外,如果它是相关的,我使用密码验证而不是密钥.

有没有人想过如何解决/进一步诊断这个问题?

错误

git push origin:

Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 309 bytes, done.
Total 3 (delta 2), reused 0 (delta 0)
error: unable to create temporary sha1 filename ./objects/1d: No such file or directory

fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To test@test.local:/home/test/public_html/git/git.git/
! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to 'test@test.local:/home/test/public_html/git/git.git/'
Run Code Online (Sandbox Code Playgroud)

更多信息

git push origin(当使用HTTP到http://test@test.local/git/git.git/时):

Password: 
Password: 
Fetching remote heads...
  refs/
  refs/heads/
  refs/tags/
updating 'refs/heads/master'
  from 425f5c3810b1c9e4ecc7ee7df3cd1bb8818b2115
  to   65d2358df3035689116339a14f504f34a6212a27
    sending 3 objects
    done
Updating remote server info
To http://test@test.local/git/git.git/
   425f5c3..65d2358  master -> master
Run Code Online (Sandbox Code Playgroud)

(我有点困惑为什么http和ssh之间的区别很大; http会问我两次密码,然后开始提取远程头,而ssh会问我一次密码,然后开始计算对象.)

git pull origin:

Already up-to-date
Run Code Online (Sandbox Code Playgroud)

git远程显示来源:

* remote origin
  Fetch URL: test@test.local:/home/test/public_html/git/git.git/
  Push  URL: test@test.local:/home/test/public_html/git/git.git/
  HEAD branch: master
  Remote branches:
    master  tracked
    release tracked
  Local branches configured for 'git pull':
    master  merges with remote master
    release merges with remote release
  Local refs configured for 'git push':
    master  pushes to master  (fast-forwardable)
    release pushes to release (up to date)
Run Code Online (Sandbox Code Playgroud)

如果有任何用处,我的本地配置文件:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = test@test.local:/home/test/public_html/git/git.git/
[branch "master"]
    remote = origin 
    merge = refs/heads/master
[branch "release"]
    remote = origin
    merge = refs/heads/release
Run Code Online (Sandbox Code Playgroud)

和远程配置文件:

[core] 
   repositoryformatversion = 0
   filemode = true
   bare = false
   worktree = /home/test/public_html
   sharedRepository = true
Run Code Online (Sandbox Code Playgroud)

进一步的调查

在Jan的评论之后,我进一步调查了这个问题.我假设在推送ssh期间只使用'test'帐户(和http推送使用的apache),但我认为它必须是两者.

我已经通过非工作仓库返回并设置所有权与工作仓库中的相同(一些文件/文件夹是apache.test,其他是test.test,配置文件是root.test).

我没有完全检查所有内容,但是repo目录中的文件,以及对象,引用和信息下的所有文件和文件夹在工作和非工作中都具有相同的所有权和权限,并且用户帐户设置在同样的方式(我之前在故障排除中尝试过777).

我能想到的主要区别是,在非工作仓库中,我开始使用http然后切换到ssh,而在工作仓库中,我直接使用ssh,之前repo是空的.也许有一个奇怪的文件在哪里有错误的权限打破了一切,或者在实际文件中有些奇怪的事情我使用不同的协议而烦恼,或者可能因为我试图让它工作的时间而腐败昨天.

Dem*_*tor 1

我在不同的用户帐户下设置了一个全新的远程存储库,它现在工作正常。所有设置或多或少都是相同的(这次权限不太严格),所以我不确定问题是什么。