乌龟Git出现问题:git未能干净地退出(退出代码128)

8
这里是一些背景信息:
  1. 我使用Win7操作系统
  2. 我有一个私有的git仓库,并安装了Github for Windows客户端
  3. 我不喜欢Github for Windows客户端(缺乏一些功能),于是又安装了TortoiseGit for Windows,但仍保留Github for Windows
  4. 我按照这里的步骤http://dancingmonkeysaccelerated.blogspot.com/2012/03/git-for-windows-with-tortoisegit-and.html进行设置
  5. 我可以在本地获取日志和提交

enter image description here

  1. 然后我进行Push操作

enter image description here

  1. 然而它报错了:git did not exit cleanly (exit code 128)

enter image description here

我看了这个帖子:

如何解决TortoiseGit出现“git did not exit cleanly (exit code 128)”错误?

我已经运行Puttygen三次来更改SSH密钥,并在文件夹中为用户设置了完全权限,但仍然无法解决问题!

这是我在环境变量中看到的:

PATH=(其他);C:\Users\myusername\AppData\Local\GitHub\PortableGit_93e8418133eb85e81a81e5e19c272776524496c6\libexec\git-core;

GIT_SSH=C:\Program Files\TortoiseGit\bin\TortoiseGitPLink.exe

SVN_SSH=C:\Program Files\TortoiseGit\bin\TortoiseGitPLink.exe

SSH_ASKPASS=C:\Program Files\TortoiseGit\bin\SshAskPass.exe

GIT_ASKPASS=C:\Program Files\TortoiseGit\bin\SshAskPass.exe

然而:如果我使用Github for Windows,一切都正常。

有人可以指导我如何排除这个TortoiseGit问题吗?


1
TortoiseGit -> Settings -> 环境变量 是否显示设置环境变量 HOME?如果有,路径是否指向可以看到 %HOME%/.ssh/id_rsa(.pub) 文件的地方? - VonC
1
请检查您的.git文件夹中是否有一个名为“index_lock”的文件(或另一个名为lock的文件)?如果是,请将其删除并重试。 - Sgoettschkes
@VonC 我更新了问题。我应该按原样输入%HOME%/.ssh/id_rsa(.pub)吗?我在任何地方都看不到.ssh文件夹。@Sgoettschekes 没有index_lock或任何lock文件。下一步是什么? - HP.
HOME 应该指向一个目录,其中你可以看到 .ssh/id_rsa.ssh/id_rsa.pub。因此,你需要输入的值不是 %HOME%/.ssh/id_rsa(.pub),而是一个目录(例如 %USERPROFILE% 或任何其他 Puttygen 生成这些密钥的目录)。 - VonC
我想我有点困惑,因为 Puttygen 没有创建 .pub 文件。它是 .ppk 文件。所以我把它放在这里 c:\TortoiseGit.ppk,即使路径中有 c:\,它仍然不起作用 :( - HP.
显示剩余2条评论
5个回答

2

普通回答

每次执行git.exe时,它都会返回一个退出代码(参见Does git return specific return error codes?)。

退出代码0表示成功。

在StackOverflow的帖子中提到了退出代码128,这表示错误:

(退出代码128)是某种“意外错误”(参见https://dev59.com/PG445IYBdhLWcg3wUoxe#8059956)。 它的含义高度依赖于执行的git命令和其输出。因此,无法简单且短暂地回答如何解决此问题。

以下帖子包含与推送案例相关的特定答案,最后还有一个更通用的答案(如果这不起作用部分)。


初始Stackoverflow帖子的答案

下面的答案基于执行git.exe以运行推送的事实。

使用TortoiseGit和SSH

这里需要区分OpenSSH和PuTTY。(请参见此处

OpenSSH

为了使用OpenSSH,您必须将ssh.exe设置为TortoiseGit设置->网络中的“SSH客户端”。
默认情况下,OpenSSH使用%HOME%/.ssh/id_rsa(.pub)文件作为其公共/私人密钥,这些文件必须由OpenSSH的ssh-keygen而不是PuTTYGen创建(PuTTY密钥具有不同的格式,但也可以使用PuTTYGen进行转换)。
如果未设置%HOME%,则TortoiseGit会自动设置它,如果您手动设置%HOME%,请确保它有效(您可能需要使用斜杠而不是反斜杠)。

对于已经拥有OpenSSH密钥的人来说,这是推荐的方法。

PuTTY

在Windows上,应优先考虑使用PuTTY,它要求使用PuTTYGen(与TortoiseGit一起提供)创建公共/私人密钥。
TortoiseGitPlink.exe需要在TortoiseGit设置 -> 网络中选择为ssh客户端-这应该是默认值。但是,没有默认位置用于公共/私人密钥,因此必须对其进行配置。有至少两种方法:

  1. 配置您的密钥以成为 PuTTY 基于应用程序中的默认密钥。为此,打开 PuTTY(不随 TortoiseGit 一起提供,需要单独下载)。然后进入“Connection->SSH->Auth”配置页面,选择 .ppk 文件作为“身份验证的私钥”,回到“会话”配置页面,在那里选择“默认设置”,然后保存。->从现在开始,PuTTY 和 PLink 将使用此密钥进行身份验证。

  2. 为了使 TortoiseGit 加载与 PuTTY 一起使用的私钥,必须对其进行配置。

    • 对于现有的存储库:选择一个存储库,打开 TortoiseGit 设置->远程,并在其中选择您的远程存储库配置(通常为“origin”)。然后选择您的私有 .ppk 密钥,点击“添加新建 / 保存”。
    • 对于新存储库,可以在克隆时选择密钥。 在推送 / 拉取时请确保选中“自动加载 putty 密钥”。

有关使用 PuTTY 的更多提示 / 技巧。


如果这不能帮助

首先,我们需要确保调用正确的 git.exe - 通常情况下 TortoiseGit 会尽力在第一次启动时找到正确的系统上的 git.exe。可以通过转到 TortoiseGit 设置->常规来轻松完成此操作。在那里,应检查“git.exe路径”是否指向“Git for Windows”的正确文件夹(它必须指向 Git for Windows 安装的 bin 文件夹,而不是 cmd 文件夹-但这应该自动发生)。如果使用 msysgit(“Git for Windows”的开发版本),则必须将[MSYSGIT-INSTALL-PATH]\mingw\bin-folder添加到路径中(即输入在“Extern DLL 路径”文本框中)以执行 git.exe(否则找不到所需的 .dll 文件)。 (请参见TortoiseGit 文档

现在点击“立即检查”,并检查正确的版本号是否出现在按钮旁边(而不是错误消息)。
如果这样工作,git.exe 应该已正确配置并且可以与 https 一起使用。


1
我曾经遇到了同样的问题,我是这样解决的...
我安装了NVIDIA的“Tegra Android开发包”,它似乎也带有mysysgit.exe的版本。TortoiseGit自动找到了这个安装位置(而不是标准的git安装),并在设置菜单中自动填充了它。
要更正此问题,请转到:“设置->常规”,并找到mysysgit.exe路径字段。确保它指向正确的安装位置。

0

我曾经在某个时候尝试使用TortoiseGit(特别是在使用Tortoise-SVN多年后),但我发现它的质量很差,而且有些不直观。目前,在Windows上,我使用并推荐每个人都使用Git Extensions软件包。它附带了:Git客户端,Cheetah,甚至是Git bash(内置于Win的最小Linux实用程序)。开箱即用。 Git-Cheetach就像TortoiseXXX一样附加到资源管理器中,并专门针对Git命令进行了优化。当然,这只是我的个人偏好,因此我留下评论而非答案,因为问题仍未解决。 - quetzalcoatl
1
我刚刚发布了一个新答案,应该能够澄清OpenSSH和PuTTY之间的区别:https://dev59.com/kG7Xa4cB1Zd3GeqPpWd8#26100799 - MrTux

0
在我的情况下,我是从Git Bash提交了那个(未能干净退出的)提交。然后尝试了从Tortoise提交的下一个提交,它成功了!

0

我无法将git仓库克隆到本地文件夹中,以下是解决该问题的命令

git config --global http.sslverify false


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接