【问题标题】:git push over sshfs failing with "error when closing sha1 file: Bad file descriptor"git push over sshfs 失败并显示“关闭 sha1 文件时出错:错误的文件描述符”
【发布时间】:2011-01-27 17:40:31
【问题描述】:

我们正在使用 sshfs 通过 SSH 安装文件系统,并将其用作 git 存储库协作的远程存储。

Mac OSX 10.6.6 到 RHEL 3 服务器 SSHFS 2.2 版 (MacFUSE SSHFS 2.2.0)
MacFUSE 库版本:FUSE 2.7.3 / MacFUSE 2.0.3

sshfs -o workaround=rename gituser@gitserver.ourdomain.com:/path/to/directory ~/git

这是我们如何创建我们的 repo,在本地使用它们,然后尝试推送回服务器:

cd ~/git/mypersonaluser
git init --bare --share mynewrepo.git
git clone ~/git/mypersonaluser/mynewrepo.git ~/Desktop/mynewrepo
cd ~/Desktop/mynewrepo
... make a few edits to the repo ...
git push origin master

Counting objects: 7, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 20.82 KiB | 23 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0)
fatal: error when closing sha1 file: Bad file descriptor
error: unpack failed: unpack-objects abnormal exit
To /Users/joebob/git/mypersonaluser/mynewrepo.git/
 ! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to '/Users/joebob/git/mypersonaluser/mynewrepo.git/'

奇怪的是,对 repo 的小幅编辑似乎成功推送,但带有多个新文件或大量编辑的较大提交不起作用。

我们是 sshfs 和 MacFuse 新手,但是是中级 git 用户。

有什么想法或建议吗?

【问题讨论】:

  • 我忘了说:我们的远程服务器上没有安装 git 二进制文件,这就是为什么我们需要挂载在 sshfs 上,以便我们可以在本地机器上使用工具。
  • 你解决了吗?我在使用 macfusion 时遇到了同样的问题,也无法使用直接 git ssh 版本,因为服务器上没有 git 二进制文件。
  • 还没有真正的解决方案。当我们从远程位置通过 VPN 连接时,问题似乎更加严重。通过千兆 LAN 连接时,这些问题似乎不太频繁出现。我们想知道如何设置我们的 VPN 是否也存在困难 + 可能还有一些延迟问题。我们的服务器上也存在一些内存问题,这可能只会加剧正在发生的事情。有时远程仓库分支被破坏,然后我们必须杀死分支并重新推送它并且它可以工作。我们很困惑。
  • 我遇到了完全相同的问题。我发现的唯一“解决方案”是在目标机器上本地安装 git 并通过终端提示符运行它。

标签: git macos rhel sshfs


【解决方案1】:

Git 可以本地推送 SSH,而无需将服务器挂载到本地文件系统。 我建议尝试一下:

git push gituser@gitserver.ourdomain.com:/path/to/directory master

我这行得通,只需将您的原始遥控器更改为 gituser@gitserver.ourdomain.com:/path/to/directory 而不是 ~/git

如果它不起作用,它至少会告诉我们 MacFuse 或 sshfs 不是罪魁祸首。

【讨论】:

  • 在使用 sshfs 的路由之前,我们尝试过原生地通过 SSH,并在下面给出了相同的结果。这是尝试发出命令时的错误:bash: line 1: git-receive-pack: command not found
  • 我查找了一些与该错误相关的其他线程,这些线程建议在我的本地计算机上将export PATH=$PATH:/usr/local/bin 添加到~/.bashrc/etc/rc.common,但这并没有解决问题。我还在本地机器上尝试了which git-receive-pack,结果是/usr/local/bin/git-receive-pack
  • 另外我应该注意 git 二进制文件没有安装在我们的远程服务器上,这就是为什么我们需要挂载在 sshfs 上,以便我们可以在本地机器上使用工具。
【解决方案2】:

在通过 sshfs 安装服务器时遇到的问题,我们从未找到解决方法。但我的一位同事确实想出了如何在 RHEL 3 服务器上的单个帐户中本地安装 git 二进制文件,我们现在可以通过 SSH 与我们的远程存储库通信,现在可以完美运行。

这是他使用的安装命令,通过 SSH 登录到您的服务器时应该使用:

curl -O http://kernel.org/pub/software/scm/git/git-1.7.4.1.tar.gz
tar xvfz git-1.7.4.1.tar.gz
cd git-1.7.4.1
./configure --prefix=$HOME CFLAGS='-I/usr/kerberos/include'
make SHELL="/bin/bash" install

接下来,通过在服务器上编辑 ~/.bashrc 并将此行添加到末尾,将远程帐户的 bin 目录添加到服务器帐户的 PATH

export PATH=$PATH:$HOME/bin

然后,您可以在您的开发机器上定义一个远程存储库位置并将其推送到该位置。

git add remote myremote ssh://myuser@server.domain.com/home/myuser/path/to/repo.git
git push myremote branchnamehere

【讨论】:

    猜你喜欢
    • 2014-06-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多