Git 从 index.lock 重命名为 index 失败
Posted
技术标签:
【中文标题】Git 从 index.lock 重命名为 index 失败【英文标题】:Git rename from index.lock to index failed 【发布时间】:2012-11-18 02:18:16 【问题描述】:使用 GitHub Windows 客户端,我进行了 同步 以将远程更改拉到本地计算机,但在完成同步之前,我的磁盘空间不足并且同步失败。现在我似乎有一堆本地更改,这些更改实际上是从原点提取的更改。我尝试运行 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'.
【问题讨论】:
您是否在此期间释放了一些空间?这将是重命名失败的原因之一。如果这不是重命名失败的原因,您可以尝试删除.git/index
(或将其移至其他位置,以防万一),然后再次尝试git reset --hard HEAD
是的,我清理了一些演出空间。尝试移动索引文件并发现一个进程已锁定它..
delete .git/index 为我工作。谢谢。它只是重新创建它。
一旦 GitHub for Windows 将使用 git 2.8.4(2016 年 6 月),您应该不会再看到该错误。 See my report here)
【参考方案1】:
我尝试了很多建议。有时,提交会成功,但随后会返回错误。最后,暂停 Dropbox 同步似乎成功了!我不知道 Dropbox 同步如何导致此错误持续超过几分钟(同步我的 24K .git/index
所需的时间)。
【讨论】:
【参考方案2】:就我而言,我以管理员身份完成了git pull
,而我的普通用户不再拥有足够的权限。
我的解决方案是将所有权重置为我的普通用户。
-
右键单击.git,然后打开属性。
在安全标签上,点击高级。
在高级安全设置中,点击所有者旁边的更改 strong>(即使它已经正确)。
在选择用户中,选择普通用户,然后点击确定。
在 Security 标签的 Owner 下,您现在有一个 Replace子容器和对象的所有者复选框 - 选中此项并点击确定。
【讨论】:
【参考方案3】:我更改项目权限
然后,我退出代码编辑器
【讨论】:
【参考方案4】:我将整个项目复制(在 Windows 10 中)到一个新文件夹。从那里推到原点(当时没有发出索引问题)。然后我又回到了项目目录,问题就出现在这里。删除 .git 目录。重新初始化(git init)。添加到索引 (git add . )。从远程来源获取并合并。仅此而已。
【讨论】:
【参考方案5】:我已经回答了一个类似的问题。也可以帮助其他人,在这里引用相同的内容:
“如果任何 Windows 用户偶然发现:
我遇到了同样的问题,因为我已经分配了所有权限,所以权限并没有解决它。删除 index.lock 也没有帮助。
我尝试使用 WSL,它显示了这个错误:
另一个 git 进程似乎正在此存储库中运行。
基于此,我退出了 VS Code(即我正在使用的 IDE)运行的每个进程,然后一切恢复正常。
注意:仅仅关闭 VS Code 并没有帮助,必须从任务浏览器中结束所有进程。
更重要的是,尝试结束您使用 git 的所有进程。对我来说,这只是 VS Code。”
原答案:https://***.com/a/67615831/13404308
【讨论】:
在我的情况下关闭 VSCode 修复了它。【参考方案6】:我遇到了这个问题,想为未来的搜索者发布答案。仅 Windows 确认。当我的 git 存储库位于需要提升权限的目录下时,我得到了这个,并且我从一个无权写入该文件夹的进程(cmd.exe)运行 git,因此它无法清除锁定。
答案很简单,以管理员身份运行。
【讨论】:
【参考方案7】:这可能是一个真正的问题,请尝试以管理员身份而不是用户身份运行您的终端。为我工作
【讨论】:
这是我的问题。.git
所在的位置在受保护的文件夹中【参考方案8】:
就我而言,我必须关闭 VS 代码,我从 WSL Ubuntu 终端使用code .
打开它。
【讨论】:
正是发生在我身上的事情。但是我必须关闭 vscode 才能进行 git commit 仍然很痛苦。【参考方案9】:这是在防病毒或 OS Defender(例如 Windows Defender)运行时引起的。 解决方案:关闭杀毒软件几分钟让你添加、提交和推送。 打开防病毒软件。 它会起作用的。
【讨论】:
尝试突出显示关键字并明确格式,这将有助于为其他人找到答案【参考方案10】:git init
解决了我的问题。我遇到了以下问题。
Rename from '.git/objects/pack/pack-XXXXX.pack' to '.git/objects/pack/old-XXXXX.pack' failed. Should I try again? (y/n)
【讨论】:
【参考方案11】:对我来说是这个错误:
Rename from 'D:/dev/repo/.git/refs/remotes/origin/my-branch.lock' to 'D:/dev/repo/.git/refs/remotes/origin/my-branch' failed. Should I try again? (y/n)
重命名“my-branch”文件,重试,“my-branch.lock”重命名成功,不确定是否正确,但有效。保留了 master 和 my-branch 中的本地更改。
【讨论】:
【参考方案12】:当我使用 master 重新设置我的分支时,我似乎遇到了问题。我的解决方案是关闭所有正在打开的解决方案,并将我的分支硬重置为原点并再次变基。
【讨论】:
【参考方案13】:我正在使用 Tortoise Git。我刚刚打开了一个新的 Windows 资源管理器,它解决了这个问题。 (对于命令行 Git 可能只是打开一个新的 shell)。
【讨论】:
【参考方案14】:在我的情况下,这是由于在管理员和非管理员命令提示符下使用相同的 Git 存储库造成的。当最后一个git pull
来自admin cmd时,index
是由它创建的,然后非admin cmd没有足够的权限修改它。
我的解决方案是重新创建index
(同时保持工作树完好无损):
del .git\index
git reset --mixed head
【讨论】:
通过删除 .git/index 和 .git/index.lock 为我工作 嗨,通常不需要指定--mixed
,因为它已经是标准:git-scm.com/docs/git-reset#git-reset---mixed
@A.Blesius 是的,--mixed
是默认设置,但我明确表示,因为reset
命令看起来很吓人。
@Dimagog 非常感谢您的提示。在我的情况下:Visual Studio 处于管理员模式,GitKraken 处于非管理员模式,所以我在 GitKraken 中收到了消息,因为权限!谢谢!
执行此操作后,我可以git add .
,但在执行git commit
时再次出现错误【参考方案15】:
我在尝试执行时看到了这个Rename from '.git/index.lock'...
消息
git checkout -b my-branch
对我来说,解决方法是将命令行作为 admin
运行。
具体来说,我以非管理员身份使用出色的cmder 应用程序,导致出现重命名消息。以管理员身份运行cmder,然后再次执行结帐,一切正常。
【讨论】:
【参考方案16】:我删除了index
和index.lock
(在.git
文件夹中)并运行git checkout .
以撤消更改并解决,但如果我想提交更改,我会在@987654326 之后运行git add -A
@
【讨论】:
【参考方案17】:在存储在 Google Drive 文件夹中的项目中运行 git reset HEAD
时,我连续多次遇到此错误,但几分钟后问题消失了。
【讨论】:
啊,也在使用 Google Drive。似乎在一两秒后消失。 对于后代,Dropbox 中的版本冲突也可能导致此问题,但它不会自行消失。在任何一种情况下,只需要删除 .git/index 的“冲突副本”。【参考方案18】:要么杀死锁定文件的进程,要么如果它是一个新的 repo,删除 .git 文件夹 rm -rf .git
并从 git init
重新开始
【讨论】:
【参考方案19】:Git 2.10(2016 年第三季度,4 年后)应该会改善 Windows 上的情况
见commit 05d1ed6(2016 年 8 月 23 日)Ben Wijen (Ben
)。
mingw
: 确保临时文件句柄不被子进程继承当索引被锁定并且子进程继承句柄时 表示锁和父进程要在 子进程退出,在 Windows 上有一个问题:它不起作用 因为如果进程持有文件的句柄,文件就不能被删除。
症状:
Rename from 'xxx/.git/index.lock' to 'xxx/.git/index' failed.
Should I try again? (y/n)
使用
bInheritHandles==FALSE
生成子进程将不起作用 因为不会继承任何文件句柄,甚至不会继承STARTUPINFO
(stdin/stdout/stderr) 中的hStdXxx
句柄。使用
O_NOINHERIT
打开每个文件也不起作用,例如git-upload-pack
需要继承的文件句柄。这给我们留下了唯一的出路:使用
O_NOINHERIT
标志创建临时文件。但是,此标志是特定于 Windows 的。 对于我们的目的,它相当于O_CLOEXEC
(它不存在于 Windows),所以let's just open temporary files with theO_CLOEXEC
flag 和 map that flag toO_NOINHERIT
on Windows.
【讨论】:
【参考方案20】:我在使用 Git 时遇到了类似的问题。我的解决方案是通过Windows资源管理器在本地删除解决方案,然后重新克隆存储库。这删除了本地存储在我的机器上的所有文件,并导致
Rename from '.git/..' to '.git/..' failed. Should I try again? (y/n) y
离开。克隆存储库后,我再次尝试了我的命令(在我的情况下是 GIT COMMIT)并且失败没有再次发生。
当我试图解决将功能分支合并到开发分支后发生的合并冲突时,问题出现了。
【讨论】:
【参考方案21】:以下进程似乎锁定了 .git\index
文件:
ssh-agent.exe
C:\Users\Tom\AppData\Local\GitHub\PortableGit_8810fd5c2c79c73adcc73fd0825f3b32fdb816e7\bin\ssh-agent.exe
我终止了进程并运行了git reset HEAD
,看起来我现在恢复正常了。
【讨论】:
我想它甚至不需要git reset HEAD
。没有它对我有用!
同意,我认为只是锁定索引文件的 ssh-agent.exe 进程。除了杀死它,不需要做任何事情。
我遇到了同样的问题,对我有锁的进程是 Visual Studio Code(或与之相关的东西),因为当我关闭它时,它按预期工作。
对我来说是 explorer.exe,虽然我没有打开实际文件夹或任何子文件夹。关闭所有资源管理器窗口足以解决我的问题。【参考方案22】:
要放弃本地更改,请转到
git reset HEAD
然后检查你的旧提交,删除新提交,然后再次拉取。
git checkout "hashOld"
git branch -d "hashNew"
git pull
【讨论】:
或者在这里阅读,这应该可以工作:***.com/questions/3380805/… 谢谢@JamesMcDonnell。不幸的是,看起来我也不能这样做..(请参阅我的更新)。 你可以删除你的 .git 文件夹,创建一个新的 repo 并拉取。以上是关于Git 从 index.lock 重命名为 index 失败的主要内容,如果未能解决你的问题,请参考以下文章
git学习解决git提交代码时报错: Unable to create ‘XXX/.git/index.lock‘: File exists.
git学习解决git提交代码时报错: Unable to create ‘XXX/.git/index.lock‘: File exists.