web-dev-qa-db-ja.com

プッシュ時にgitエラー「リ​​モート:エラー:一時ファイルを作成できません:そのようなファイルまたはディレクトリはありません」が表示されるのはなぜですか?

この問題は奇妙になっています。

私の元の投稿は続きますが、ここに私が発見した新しいものがあります:

私は実行しました

git Push

そしてそれは私にいつものエラーを与えました:

Counting objects: 9, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 588 bytes, done.
Total 5 (delta 4), reused 0 (delta 0)
remote: error: unable to create temporary file: No such file or directory
remote: fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To USER@REMOTE:/git/PROJECT.git
 ! [remote rejected] master -> master (unpacker error)
error: failed to Push some refs to 'USER@REMOTE:/git/PROJECT.git'

そのため、楽観的になりすぎて、「-verbose」オプションを使用すると詳細がわかると思ったので、すぐに再試行しました。

git Push --verbose

今回はうまくいきました:

Pushing to USER@REMOTE:/git/PROJECT.git
Counting objects: 9, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 588 bytes, done.
Total 5 (delta 4), reused 0 (delta 0)
To USER@REMOTE:/git/PROJECT.git
    87d6996..1cae8b3  master -> master
updating local tracking ref 'refs/remotes/Origin/master'

だから、完全にフレーク状です。私はgitがLDAPを好きではないのではないかと疑い始めています。

元の投稿:

私たちはcvsからgitに移行しています。LDAPでユーザーを認証するgitサーバーがあり、それをREMOTEと呼び、次に自分のマシンをLOCALと呼びます。どちらのマシンもMacです。会社のすべての従業員(私を含む)は、賢くGROUPと呼ぶグループのメンバーです。

私はsshでリモートにアクセスし、cvs2gitを使用して/git/PROJECT.gitという名前のフォルダーにgitリポジトリを作成しました。

次に、ローカルに戻って、私はしました:

git clone USER@REMOTE:/git/PROJECT.git

大丈夫だった。 Mac(「ローカル」)で、いくつかのファイルを編集し、いくつかを削除して、

git -a FILES
git rm FILES
git commit -m 'COMMENT'

そして人生は良かった。

それから(まだローカルのまま)私は実行しました:

git Push

変更をローカルからリモートにプッシュしてこれを取得するには:

Counting objects: 19, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (10/10), 1.46 KiB, done.
Total 10 (delta 8), reused 0 (delta 0)
remote: error: unable to create temporary file: No such file or directory
remote: fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To [email protected]:/git/PROJECT.git
 ! [remote rejected] master -> master (unpacker error)
error: failed to Push some refs to '[email protected]:/git/PROJECT.git'

私はこの問題を調査し、$ TMPDIRが間違っている可能性があるように思えたので、REMOTEにsshして、/ git/tmpという名前のディレクトリを作成し、書き込み権限があることを確認し、.bashrcを編集して$を設定しましたTMPDIRを/ git/tmpに。

実行すると、ローカルに戻ります

ssh USER@REMOTE echo \$TMPDIR

私は正しく応答を見ます

/git/tmp

REMOTEにsshしてファイルのアクセス許可を確認すると、次のようになります。

ls -l /git
drwxrwxrwx  USER GROUP   tmp
drwxrwsr-x  USER  GROUP   PROJECT.git

ls -l /git/PROJECT.git

すべてのファイルは、所有者(me)とグループのrwです。

このエラーの原因は他に何ですか?

pS Macの標準と同じように、私が実行すると:

ssh ADMIN@REMOTE
cd /
ls -l

シンボリックリンクが表示されます:tmp->/private/tmp、var->/private/varなど->/private/etc。権限と所有権を調整して、次のように設定しました。

lrwxr-xr-x   USER   GROUP   etc -> /private/etc
lrwxr-xr-x   USER   GROUP   tmp -> /private/tmp
lrwxr-xr-x   USER   GROUP   var -> /private/var

実際のフォルダのアクセス許可も更新したので、実行すると:

cd /private
ls -al

そうですか:

drwxr-xr-x   USER   GROUP   etc
drwxrwxrwt   USER   GROUP   tmp
drwxr-xr-x   USER   GROUP   var

そして最後に、私が:

cd /private/var
ls -al

そうですか:

drwxrwxrwt    USER   GROUP   tmp
2
Betty Crokker

最初に、最初の試行で「エラー:一時ファイルを作成できません:そのようなファイルまたはディレクトリはありません」が表示される理由を確認します。最初の$ TMPDIRは何でしたか?/tmpまたは/ var/tmpとは異なりましたか?これら2つのディレクトリの権限を確認できますか?詳細を確認するために、gitのコマンドに「-v」を追加することを検討しましたか?本当に別のTMPDIRを使用したい場合は、この変数を.profileなどの他の「ドットファイル」に追加することを検討してください。

1
plluksie

ファイルの追加中に、次のエラーも発生しました:error: unable to create temporary file: Not a directory.。 (git add filename.ext

.gitフォルダをチェックインしたところ、不審なファイルe4が見つかりました(破損している可能性があります)。 e4はディレクトリである必要がありますが、そうではありませんでした。そのため、.git/objects/からファイル(私の場合はe4)を削除しました

rm -rf .git/objects/e4

その後、エラーは再び発生しませんでした。

1
Ashish