2011-01-27 5 views
3

sshfsを使用してSSH上にファイルシステムをマウントし、gitリポジトリのコラボレーションのリモートストレージとして使用しています。 RHEL 3サーバー SSHFSバージョン2.2へgit push sshfsが "sha1ファイルを閉じるときにエラーが発生しました:ファイルディスクリプタが正しくありません"

マックOSX 10.6.6(MacFUSEのSSHFS 2.2.0)
MacFUSEのライブラリのバージョン:2.7.3 FUSE/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ユーザーです。

アイデアや提案はありますか?

+0

私は忘れてしまいました:gitバイナリがリモートサーバにインストールされていないため、ローカルマシン上でツールを使用できるようにsshfsをマウントする必要がありました。 –

+0

これを解決できましたか?私はmacfusionを使って同じ問題を抱えていますし、直接git sshバージョンを使うこともできません。これは、サーバーにgitバイナリがないからです。 – Hugo

+0

まだ実際の解決策はありません。遠隔地からVPNを介して接続すると、問題は悪化するようです。ギガビットLANを介して接続すると、問題の頻度が低くなるようです。私たちは、VPNのセットアップの難しさか多少の待ち時間の問題があるのか​​どうか疑問に思っています。また、私たちのサーバ上にはメモリ上の問題がありました。これは何が起こっているのかだけを複雑にするかもしれません。リモートのRepoブランチが破損した場合、ブランチを終了して再度プッシュしなければならない場合があります。私たちは困惑しています。 –

答えて

0

sshfs上にサーバーをマウントしたときに発生した問題を修正したことはありませんでした。しかし、私の共同作業者は、RHEL 3サーバ上の単一のアカウントにgitバイナリをローカルにインストールする方法を見つけ出しました。今は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を編集することで、サーバーのアカウントのPATHに自分のリモートアカウントのbinディレクトリを追加し、:ここで

は、SSH経由でサーバーにログインするときに使用する必要があり、彼が使用し、インストールするコマンドであり、サーバーと最後に次の行を追加:開発マシンから

export PATH=$PATH:$HOME/bin 

、あなたは、リモートリポジトリの場所を定義し、それにプッシュすることができます。

git add remote myremote ssh://[email protected]/home/myuser/path/to/repo.git 
git push myremote branchnamehere 
4

Gitは、サーバーをローカルファイルシステムにマウントすることなく、ネイティブにSSHをプッシュすることができます。 私はこれを試してみることをお勧めします:

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

私はこの作品、それが少なくともMacFUSEのかsshfsのISNことを私たちに教えてくれるのいずれかに動作しない場合は、単に[email protected]:/path/to/directory代わりの~/git

にリモートあなたの原点を変更責任を負わない。

+0

私たちはsshfsのルートに行く前にSSHをネイティブに使いこなそうとしましたが、同じ結果が得られました。 'bash:行1:git-receive-pack:コマンドが見つかりませんでした。 ' –

+0

このエラーに関連する他のいくつかのスレッドを調べました。これは' export PATH = $ PATH:/usr/local/bin'をローカルマシン上の '〜/ .bashrc'や'/etc/rc.common'にコピーしても問題は解決しませんでした。私は '/ usr/local/bin/git-receive-pack'というローカルマシン上で' which git-receive-pack'を試しました。 –

+0

また、gitバイナリがリモートサーバにインストールされていないので、私たちはローカルマシン上のツールを使うことができるようにsshfsをマウントする必要があります。 –

関連する問題