NTLM代理下的git克隆在解决差异后挂起

13

我在这里看到很多关于git和代理的问题,但没有一个能解决我的问题。我正在从Bitbucket克隆一个git存储库。在我的家庭网络中一切正常,但是在工作中使用NTLM身份验证的代理时会卡住。请参阅git clone命令的输出:

$ git clone https://my_user@bitbucket.org/my_user/my_project.git --verbose
Cloning into 'my_project'...
Password for 'https://my_user@bitbucket.org':
POST git-upload-pack (174 bytes)
remote: Counting objects: 548, done.
remote: Compressing objects: 100% (367/367), done.
remote: Total 548 (delta 216), reused 0 (delta 0)
Receiving objects: 100% (548/548), 5.28 MiB | 533 KiB/s, done.
Resolving deltas: 100% (216/216), done.

git clone命令总是在“正在解决差异”时挂起。

我的设置:

  • Windows 7 64位,安装了msysgit 1.8.0
  • 配置了代理:

    $git config --global http.proxy http://MY_DOMAIN\\\my_user:my_password@http-proxy:8080
    

似乎问题与git对象大小有关,因为当我在存储库中只有少量文件时,git克隆一开始就能正常工作。


https://dev59.com/pnI-5IYBdhLWcg3wlpUM - change_is_necessity
@Android_Rocks 我检查了这篇文章,看起来我的git版本1.8.0支持NTLM身份验证。 - tommyk
6个回答

6

我遇到了同样的问题,使用Git 1.7.11。我尝试从GitHub克隆时,所有的尝试都会导致进程挂起且没有文件。我尝试了verify-pack技巧以及其他类似问题中的建议,但没有任何作用。

我想也许这个问题已经在最新版本的Git中得到改善或修复,所以我升级到了1.8.3。太好了,现在它可以工作了,我可以进行克隆了!


遇到了同样的问题,采取了相同的解决方法:升级到 Git 1.8.3。 - rluba
我遇到了同样的问题,我的git版本是2.21.0。 - Khokhar
我不得不杀掉进程。然后在执行以下命令后它就可以工作了: git submodule update --init --recursive - Khokhar

5

我遇到了同样的问题,虽然我无法确定原因,但我认为我的解决方法比使用verify-pack并检出最后一次提交更好。

检查最新的提交作为主分支的问题在于,您无法保证该提交属于特定的分支,所以我做的是:

  • 按下 Ctrl+C 中断挂起的解析差异 Git 进程
  • 使用 git fetch 获取分支信息
  • 使用 git checkout master 检出主分支(或任何其他分支)

这使得 Git 设置我的主分支跟踪远程主分支并正确解压文件,同时还保留了分支信息。


这对我有用,但它显示所有文件都未被跟踪。所以我只是删除了项目并再次使用 git clone <url> 克隆,这一次它没有停留在“解决差异”上。 - PR7

4

抱歉,我的英语非常糟糕。希望您能理解。

我在这里遇到了同样的问题。我找不到并解决问题,但最终能够完成检出。当git clone挂起在“正在解决差异”时,杀死git进程。因此,您有一个名为my_project的文件夹和一个名为.git\objects\pack\pack-<sha1>.pack的文件。现在,我们需要找到修订版本号。输入下面的命令:

git verify-pack -v .git\objects\pack\pack-<sha1>.pack | grep "commit" | more

并且输出结果是像这样的:
98c9f779992fc9a52372e0a1a76647e5d9ca5e01 commit 340 227 12
b6435d98f7b62ce69c59ce582beddf547f26d8a2 commit 305 208 239
a2a39a0c707b2919c87b194dca9a0dea307ce069 commit 239 159 447
...
4803e013b30dc9d31e4a8dba7e1a2d65e6f61422 commit 243 167 6768
-- More  --    

顶部的98c9f779992fc9a52372e0a1a76647e5d9ca5e01是HEAD版本,所以您可以将其切换到此点:

git checkout -b master 98c9f779992fc9a52372e0a1a76647e5d9ca5e01

完成。


1

这是我从博客评论http://stas-blogspot.blogspot.ca/2012/12/git-hangs-after-resolving-deltas.html中得到的解决方案:

由于包文件已经正确下载,所以您只需要使用Ctrl+C打断进程,使用git fetch从远程仓库获取分支信息,然后再用git checkout master检查主分支(或任何其他分支)即可。

因此解决方案只是终止挂起的进程,然后执行以上步骤:

git fetch
git checkout

0

这不是答案,只是提供症状以缩小问题的原因范围。 我遇到了完全相同的问题。它只是停留在“解决增量”的状态。

v1.7.10 Win2008 R2企业版 代理已配置为HTTP和HTTPS。

我会让同事登录服务器(.gitconfig是他漫游配置文件的一部分),看看是配置还是安装的问题。


作为一种解决方法,我使用了cntlm工具,但问题的根本原因仍然未知... - tommyk

0

两件事(2019年4月,七年后):

  1. 不要直接声明NTML代理URL。设置HTTP_PROXYHTTPS_PROXY环境变量为HTTP代理(而不是NTLM代理),例如genotrance/px
    通过运行px(它重定向到您的NTLM代理),您可以引用经典的HTTP代理(通常是http://localhost:3128,无需登录/密码!),这将更好地工作。

  2. 如果“解决差异”仍然需要时间,请确保使用Git 2.22(2019年第二季度)

关于第二点:在“index-pack”步骤中添加了进度指示器,这经常使用户在“git clone”期间等待完成。

请查看提交 79e3aa6(2019年3月31日)由SZEDER Gábor (szeder)提交。
(由Junio C Hamano -- gitster --合并于提交 da924b5,2019年4月25日)

index-pack:检查对象时显示进度

当 'git index-pack' 被 'git clone' 运行时,它的 check_objects() 函数通常不需要花费太多时间,但我遇到了一个大约需要一分钟左右的情况:在克隆 linux.git 时,我无意中给我的小型笔记本电脑带来了一些内存压力,然后在 "Resolving deltas" 和 "Checking connectivity" 进度条之间有相当长的静默时间。

check_objects() 循环期间显示进度条,让用户知道仍在进行某些操作。


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