web-dev-qa-db-ja.com

Gitのindex.lockからindexへの名前変更に失敗しました

GitHub Windowsクライアントを使用してsyncを実行して、ローカルのマシンにリモートの変更をプルしましたが、同期を完了する前にディスク領域が不足し、同期に失敗しました。今、私は実際にOriginから引き出された変更であるローカルな変更の束を持っているようです。私はgit pullを実行しようとしましたが、得られました:

C:\Users\Tom\SourceLog [master +4 ~26 -0 !]> git pull
Updating b3a86e1..5afd74f
error: Your local changes to the following files would be overwritten by merge:
        SourceLog.Interface/IChangedFile.cs
        SourceLog.Interface/ILogEntry.cs
        ...
Please, commit your changes or stash them before you can merge.
error: The following untracked working tree files would be overwritten by merge:
        Lib/MSBuildExtensionPack/4.0.6.0/Ionic.Zip.dll
        Lib/MSBuildExtensionPack/4.0.6.0/MSBuild.ExtensionPack.dll
        ...
Aborting

だから今、私はローカルの変更を破棄しようとしていますが、私は得ています:

C:\Users\Tom\SourceLog [master +4 ~26 -0 !]> git checkout -- .
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) y
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) n
fatal: unable to write new index file

どうすればきれいにできますか? (同期を開始する前にローカルの変更はありませんでした。)

更新

頭をリセットできないようです。

C:\Users\Tom\SourceLog [master +4 ~0 -0 !]> git reset head
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) y
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) n
error: Could not write new index file.
fatal: Could not reset index file to revision 'head'.
32
Tom Hunter

次のプロセスが.git\indexファイルをロックしていたようです:

ssh-agent.exe
C:\Users\Tom\AppData\Local\GitHub\PortableGit_8810fd5c2c79c73adcc73fd0825f3b32fdb816e7\bin\ssh-agent.exe

プロセスを強制終了し、git reset HEADを実行しましたが、今は正常に戻っているようです。

27
Tom Hunter

私の場合、これは、管理コマンドプロンプトと非管理コマンドプロンプトの両方から同じGitリポジトリを使用したことが原因です。最後のgit pullはadmin cmdからのものであり、indexはそれによって作成され、非admin cmdはそれを変更するための十分な許可を持っていませんでした。

私の解決策はindexを再作成することでした(ワークツリーはそのままに):

del .git\index
git reset --mixed head
11
Dimagog

私はこれを見ていましたRename from '.git/index.lock'...実行しようとしたときのメッセージ

git checkout -b my-branch

私にとっての修正は、コマンドラインをadminとして実行することでした。

具体的には、優れた cmder アプリケーションを非管理者として使用していたため、名前変更メッセージが表示されました。 cmder を管理者として実行してから、再度チェックアウトを実行すると、正常に機能しました。

2
Jason Evans

indexindex.lock.gitフォルダー内)を削除し、git checkout .を実行して変更を元に戻し、解決しましたが、変更をコミットする場合は実行しますgit add -Agit commit -m "description"の後

1
krekto

Git 2.10(2016年第3四半期、4年後)はWindowsの状況を改善するはずです

commit 05d1ed6 (2016年8月23日)by Ben Wijen(Ben を参照してください。

mingw:一時ファイルハンドルが子プロセスに継承されないようにする

インデックスがロックされ、子プロセスがそのロックへのハンドルを継承し、親プロセスが子プロセスが終了する前にロックを削除したい場合、Windowsには問題があります:プロセスが保持されるとファイルを削除できないため機能しませんそれらのハンドル。

症状:

Rename from 'xxx/.git/index.lock' to 'xxx/.git/index' failed.
Should I try again? (y/n)

bInheritHandles==FALSEを使用して子プロセスを生成すると、ファイルハンドルが継承されないため、hStdXxx(stdin/stdout/stderr)のSTARTUPINFOハンドルも継承されないため、機能しません。

O_NOINHERITですべてのファイルを開くことも、たとえばgit-upload-packは、継承されたファイルハンドルを想定しています。

これは、O_NOINHERITフラグを使用して一時ファイルを作成する唯一の方法です。ただし、このフラグはWindows固有です。
ここでは、O_CLOEXEC(Windowsには存在しません)と同等であるため、 O_CLOEXECフラグを使用して一時ファイルを開きます および- WindowsではO_NOINHERITにフラグをマップ

1
VonC

ファイルをロックしているプロセスを強制終了するか、新しいリポジトリである場合は、.gitフォルダーを削除しますrm -rf .gitそしてgit init

0
Robot Boy

Gitでも同様の問題がありました。私にとっての解決策は、Windowsエクスプローラーを使用してローカルでソリューションを削除し、リポジトリを再クローンすることでした。これにより、マシンにローカルに保存されていたすべてのファイルが削除され、

Rename from '.git/..' to '.git/..' failed. Should I try again? (y/n) y

離れて行く。リポジトリのクローンを作成した後、コマンドを再試行し(私の場合はGIT COMMIT)、失敗は再発しませんでした。

この問題は、機能ブランチを開発ブランチにマージした後に発生したマージ競合を解決しようとしたときに発生しました。

0
joey

ブランチをマスターでリベースしたときに問題が発生したようです。私の解決策は、ブランチを開いてOriginにハードリセットし、リベースするすべてのソリューションをオフにして、再びリベースすることです。

0
Tiffany Chau

それは正しい問題である可能性があります。ユーザーの代わりに管理者としてターミナルを実行してみてください。私のために働いた

0
HamzDiou

Tortoise Gitを使用しています。新しいWindowsエクスプローラーを開いたところ、これが修正されました。 (コマンドラインの場合、Gitは新しいシェルを開くだけの場合があります)。

0
Mark Seagoe

Googleドライブフォルダに保存されたプロジェクトでgit reset HEADを実行すると、このエラーが数回連続して発生しましたが、数分後には問題はなくなりました。

0
Brian Burns

ローカルの変更を破棄するには、

git reset HEAD

次に、古いコミットをチェックアウトし、新しいコミットを削除して、もう一度プルします。

git checkout "hashOld"
git branch -d "hashNew"
git pull
0
James McDonnell