Git '致命的:新しいインデックスファイルを書き込めません'


128

私はこれについて他の多くのスレッドを見てきましたが、助けにはなりません。

私は非常に単純なリポジトリを持っています-2つのJavaScriptファイルです。Macbookに100 GB以上あります。ファイルをサブディレクトリに移動してローカルでステージングしようとすると、得られる変更が...

致命的:新しいインデックスファイルを書き込めません

これは、ターミナルですべてのアクションを実行する場合でも、SourceTreeなどのGUIを使用する場合でも発生します。さらに、ファイルの1つがロックされ、ログオフして再度ログインするまで作業ディレクトリを削除できません。

なぜこうなった?ロックによってステージングが妨げられていますか?その場合、OS Xで問題のあるファイルのロックを解除するにはどうすればよいですか?リモートリポジトリはGoogle Codeですが、違いがある場合は、まだリモートにプッシュしていません。すべてローカルです。


これが代わりにSuperUserに送られるべきかどうかわからない?
MMM 2013

おそらくアクセス権に問題があります(gitを実行しているユーザーはすべてのリポジトリへの書き込み権限を持っていません)
Nevik Rehnel

SOとSUにはこれに関するスレッドがあります。質問はどちらでも同じように機能すると思います。Nevik、レポのアクセス許可は、./gitフォルダーを含めて777 です。
ジェフ

この問題はいつわかりますか?「git mv」または「git add」を実行するときですか?
Mayur Nagekar 2014年

回答:


221

私の場合、ディスクの容量が足りなくなったため、ハードドライブからファイルを削除して容量を確保する必要がありました。


64

私は過去数日間、これと同じ問題を抱えています。基本的に、私の知識がなければ、リポジトリ全体が新しいファイルシステムに移動されていたため、git statusを実行しようとすると、リポジトリ内のすべてのファイルが更新されたと突然報告されました。

可能な解決策

それで、多くのグーグル精練の後、私は以下を試しました:

  • .git権限の変更(同じ問題)
  • .git / index権限の変更(同じ問題)
  • コミットするすべての変更をgit adding(同じ問題)
  • git rm-ingはファイル名が長すぎるというエラーを報告していたため、ファイルを削除しました(同じ問題)
  • git reset(soft | Head | Hard)(同じ問題)
  • git clean(同じ問題)
  • Windows Defenderをオフにする(同じ問題)
  • gitの更新(同じ問題)
  • 異なるgitクライアント(私はgitbashを使用しています)(同じ問題)
  • 1つではなく2つのコーヒーを飲む(同じ問題)

tl:dr-ダーティソリューション

この問題を解決できたのは、インデックスファイルをコピーして、元のファイルを削除し、コピーの名前を変更することだけでした。

私はそれが本当に「解決策」ではないことを知っていますが、今ではすべてのファイル/ブランチがそのままで、魔法のように機能します> < これがうまくいくかもしれない理由を誰かが知っているなら、教えてください。


82
さらに別の原因が見つかりました:ディスク容量が不足している可能性があります。
lennartcl 2014年

21
私の場合、Googleドライブがファイルをアップロード(バックアップ)していて、処理中にロックされました。アップロードが完了すると、コミットが機能しました。
クリスチャンO.

3
Googleドライブに関するヒントをありがとう。同じ問題がありましたが、Dropboxでした。
hgolov

1
再起動は私のために働いた。半分空の22 TB共有ドライブで作業しているため、スペースは問題になりませんでした。
ウェインF.カスキー

1
あなたの「汚い解決策」は私のために働きました(以前のインデックスファイルに戻り、それ以降のすべての変更を再度追加してコミットしました)
trust_words '11年


17

Macでも同じ問題が発生しました。ファイルシステムACLが原因のようです。chmod -RN /path/to/repoACLをクリアしてみてください。これを行った後、変更をコミットすることができました。トリックを使用してインデックスファイルをコピーし、元のファイルを削除して、コピーを元に戻し、同じ結果を達成しました。


ユーザーアカウントに最近権限の問題があった場合、この問題が発生する可能性があります。私の場合、問題のあるACLを残したのはActive Directory統合の問題でした。
クリス、

17

githubがgoogleドライブやドロップボックスなどのオンライン同期サービスでセットアップされている場合、同期サービスを無効にしてみてください。正しく。


これは私のために働いたソリューションです。ありがとう!
Macondo

7

たまたま.git / indexファイルが別のプロセス(私のローカル開発Webサーバー)で使用されていました。私はプロセスをシャットダウンし、それが機能しました。


6

Visual Studioコード(私の場合は、ファイル保存時に自動アップローダーバックグラウンドジョブが実行されています)を閉じると、問題が解決しました。

ソリューションの功績:友人であり同僚でもあるアーネル。


angularJsアプリが実行されていて、インデックスがロック解除されていたnodeJsサーバーを閉じました
Radu Linu


6

私の場合、解決策は新しいユーザーに権限を追加することだけでした。

新しいOSをインストールしてリポジトリを移動したところ、この正確なエラーが表示されました。ルートフォルダを選択し、認証済みのユーザーを追加してすべてを確認しました ここに画像の説明を入力してください


3

.gitフォルダー内のすべてのファイルに(どういうわけか)ACLを添付しました。

ls -le.gitフォルダで確認してください。

chmod -N(フォルダー/ファイルの場合)またはchmod -RN(再帰的)でACLを削除できます


3

Googleバックアップや同期などのバックグラウンドバックアップソリューションは、インデックスファイルへのアクセスをブロックしていると思います。アプリケーションを閉じましたが、Sourcetreeにはまったく問題がありませんでした。Dropboxも同じことをしているようです(@tonymayoral)。


2

私の場合、それはEGitの同時実行でした。Eclipseを再起動すると、通常どおり機能します。


問題は、「エラーメッセージが発生する理由」です。そしてこの答えは別の潜在的な原因を説明しています。
robm 2016年

2

Windowsボックスを使用している場合は、使用しているプログラムが、ソースツリーであってもgitターミナルであっても、管理者として実行されていることを確認してください。同じ正確なエラーメッセージが表示されました。プログラムを右クリックして管理者として実行するか、そのプロパティを変更して常に管理者として実行することができます。



2

私も同じ問題を抱えていました。コンピュータを再起動し、問題は解決しました。


1

「git add」を試しましたか 。それはすべての変更でしょうか?(git reset HEADで不要な追加ファイルを削除できます)


1

エラーメッセージfatal: Unable to write new index fileは、新しいコンテンツをgitインデックスファイルに書き込めなかったことを意味します.git\index(gitインデックスの詳細については、こちらを参照してください)。この質問に対するすべての回答を確認した後、以下の根本原因を要約します。

  • 新しいコンテンツのサイズが、ディスクの使用可能な容量を超えています。(解決策:ディスクスペースをクリーンアップします)
  • ユーザーにはこのファイルへのアクセス権がありません。(解決策:許可を与える)
  • ユーザーには権限が.git\indexありますが、他のユーザーまたはプロセスによってロックされています。(解決策:ファイルのロックを解除します)

Windowsでファイルまたはフォルダーをロックしているプロセスを見つけるリンクは、特定のファイルをロックしているプロセスを見つけるための次のアプローチを指定します。

SysInternals Process Explorer-[検索]> [ハンドルまたはDLLを検索]に移動します。[ハンドルまたはDLLサブストリング:]テキストボックスに、ファイルへのパスを入力し(例: "C:\ path \ to \ file.txt")、[検索]をクリックします。そのファイルへのオープンハンドルを持つすべてのプロセスがリストされます。

上記のアプローチを使用して、ロックされているプロセスを見つけ.git\index、ロックしている実行可能ファイルを停止します。これでロックが解除され.git\indexます。

たとえば、Process Explorer Searchは、.git\indexによってロックされていることを示していvmware-vmx.exeます。VMWare Player仮想マシン(共有フォルダーを介してgitリポジトリにアクセス)を一時停止すると、問題が解決しました。


このリンクで質問に答えることができますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。- レビューより
Al Sweigart 2017年

@Al、私はあなたの提案に従って私の答えを更新しました。
ファン

0

リベース中にこれを取得した場合:

これは、バックアップソフトウェア、アンチウイルス、IDE、その他のgitクライアントなど、リポジトリのインデックスファイルをロックしているソフトウェアが原因である可能性が高いです。

ほとんどの場合、ロックはほんの一瞬であるため、タイミングの悪さと運の悪さから発生します。

ただし、git rebase --continue次のコマンドが空のコミットであると文句を言うでしょう:

The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

これを修正するには、実行git resetしてもう一度試してくださいgit rebase --continue


0

問題:変更したファイルをgitでチェックアウトすると、このエラーが発生しました。ABCとXYZという2人のユーザーがいました。ファイルにはABCのuid:gidがありますが、gitアクセスがなく、同じファイルをチェックアウトしようとしています。

私が試した解決策:XYZはgitアクセスがあり、sudoでファイルをチェックアウトしてみましたが、うまくいきました。


0

これが私のために働いたものです:

環境:

  1. サーバーでプロジェクトをビルドする

  2. git status を返す HEAD detached at <commit-SHA>

  3. ローカルで行った操作で、このエラーが発生しました。すなわち:

    • gitチェックアウト
    • git reset HEAD --hard

解決

  1. 単にファイルを削除しました<work-dir>/.git/index
  2. A git statusは、プロジェクト内のすべてのファイルが追跡されていないことを示します(ここでは意外ではありません)。
  3. git reset HEAD --hard
  4. を実行するHEAD detached at <commit-SHA>ときに戻りgit statusますが、その後、
  5. git checkout <some-branch>

そして、あなたは軌道に戻っています!

!! 重要!!

これは、私が「陽気に」構築しているためにのみ機能します。コードに対して貴重な変更は行われていません。実際に「開発時」にいる場合は、まず作業を保存するか、別の方法をとることをお勧めします。

それが役に立てば幸い:)。


0

WindowsでGitExtensionsを使用すると、この問題が発生しました。リポジトリを含むフォルダーの現在のユーザー(me)に完全なアクセス許可を与えることで修正されました。

別の機会に、Git Extensionsからエラーが発生したにもかかわらず、Visual Studio 2015から同じファイルをコミットできました。

もう一度、「インデックス」ファイルを.gitフォルダから削除する必要がありました


0

私の場合は少し興味深いです:

特定のコミットを確認するためにgit logを実行しましたが、適切に終了しませんでした。ctrl+ cを押して終了します。

その後、インデックスはロックされているようです。もう一度git logを実行し、Qを押して終了します。

問題が修正されました。:)


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.