Ошибка git push over sshfs с ошибкой при закрытии файла sha1: неверный файловый дескриптор

Мы монтируем файловую систему через SSH с помощью sshfs и используем ее в качестве удаленного хранилища для совместной работы с репозиторием 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 [email protected]:/path/to/directory ~/git

Вот как мы создаем наши репозитории, работаем с ними локально, а затем пытаемся отправить их обратно на сервер:

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/'

Что странно, так это то, что небольшие изменения в репозитории успешно отправляются, но большие коммиты с несколькими новыми файлами или большим количеством правок не работают.

Мы новички в sshfs и MacFuse, но промежуточные пользователи git.

Любые идеи или предложения?


person John Kary    schedule 27.01.2011    source источник
comment
Я забыл сказать: двоичные файлы git НЕ установлены на нашем удаленном сервере, поэтому нам нужно было монтировать поверх sshfs, чтобы мы могли использовать инструменты на наших локальных машинах.   -  person John Kary    schedule 01.02.2011
comment
Вам удалось это решить? У меня такая же проблема с использованием macfusion, и я не могу использовать прямую версию git ssh, потому что на сервере нет двоичных файлов git.   -  person Hugo    schedule 16.02.2011
comment
Реального решения пока нет. Проблема усугубляется, когда мы подключаемся через VPN из удаленного места. Проблемы появляются реже при подключении через гигабитную локальную сеть. Нам интересно, не является ли это также сложностью настройки нашей VPN +, возможно, некоторыми проблемами с задержкой. У нас также были некоторые проблемы с памятью на нашем сервере, которые могут только усугубить происходящее. Иногда ветка удаленного репо повреждается, тогда нам нужно убить ветку и повторно отправить ее, и она работает. Озадачены мы.   -  person John Kary    schedule 16.02.2011
comment
У меня была точно такая же проблема. Единственное решение, которое я нашел, — это установить git локально на целевой машине и запустить его через терминал.   -  person bjornl    schedule 02.10.2013


Ответы (2)


Git может использовать SSH изначально, без необходимости монтировать сервер в локальную файловую систему. Я бы рекомендовал попробовать это:

git push [email protected]:/path/to/directory master

Если это работает, просто измените исходный удаленный код на [email protected]:/path/to/directory вместо ~/git.

Если это не сработает, то, по крайней мере, скажет нам, что MacFuse или sshfs не виноваты.

person jonescb    schedule 27.01.2011
comment
Мы попытались пройти через SSH изначально, прежде чем идти по маршруту sshfs, и дали тот же результат ниже. Это ошибка при попытке ввести вашу команду: bash: line 1: git-receive-pack: command not found - person John Kary; 28.01.2011
comment
Я просмотрел несколько других тем, связанных с этой ошибкой, в которых предлагалось добавить export PATH=$PATH:/usr/local/bin к ~/.bashrc или /etc/rc.common на моем локальном компьютере, но это не решило проблему. Я также попробовал which git-receive-pack на своем локальном компьютере, что привело к /usr/local/bin/git-receive-pack. - person John Kary; 28.01.2011
comment
Также я должен отметить, что двоичные файлы git НЕ установлены на нашем удаленном сервере, поэтому нам нужно было монтировать через sshfs, чтобы мы могли использовать инструменты на наших локальных машинах. - person John Kary; 28.01.2011

Мы так и не нашли решения проблем, с которыми мы столкнулись при монтировании сервера через sshfs. Но мой коллега выяснил, как установить двоичные файлы git локально в одной учетной записи на сервере RHEL 3, и теперь мы можем общаться с нашими удаленными репозиториями через 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

Затем добавьте каталог bin вашей удаленной учетной записи в каталог PATH учетной записи сервера, отредактировав ~/.bashrc на сервере и добавив эту строку в конец:

export PATH=$PATH:$HOME/bin

Затем с вашего компьютера для разработки вы можете определить местоположение удаленного репозитория и нажать на него.

git add remote myremote ssh://[email protected]/home/myuser/path/to/repo.git
git push myremote branchnamehere
person John Kary    schedule 14.03.2011