git push over sshfs завершается с ошибкой «ошибка при закрытии файла sha1: неверный дескриптор файла» - PullRequest
3 голосов
/ 27 января 2011

Мы монтируем файловую систему через SSH с помощью sshfs и используем ее в качестве удаленного хранилища для совместной работы с репозиторием git.

Mac OSX 10.6.6 на SSHFS сервера RHEL 3 версии 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

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

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.

Есть идеи или предложения?

Ответы [ 2 ]

4 голосов
/ 27 января 2011

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

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

Если это работает, просто измените ваш удаленный источник на gituser@gitserver.ourdomain.com:/path/to/directory вместо ~/git

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

0 голосов
/ 14 марта 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://myuser@server.domain.com/home/myuser/path/to/repo.git
git push myremote branchnamehere
...