Git添加后无法推送的问题

11

好的,我有一个问题已经困扰我几周了,但一直无法解决。

我使用git(在github上)存储我的项目。最近,我顺利地添加了一些新文件,但是当我使用“git push”时,出现了一个超时错误。

我使用的是Ubuntu 12.04,带有ssh(默认)和https。

所以,我决定重新克隆一份代码库(git clone)。然后,我修改了一个现有文件,并提交并推送它……成功了!

于是,我添加了其他文件(在新副本中),并将它们提交和推送。然而,问题又出现了:无法推送。

这是控制台输出:

time git push
Counting objects: 13, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (11/11), 16.61 KiB, done.
Total 11 (delta 2), reused 0 (delta 0)
^C

real    7m59.383s
user    0m0.008s
sys 0m0.004s

我真的不明白我在这里做错了什么。

我在另一个代码库中也遇到同样的问题,但我的合作者没有任何问题。

我已经删除 Git,并重新安装了它,但没有改变。

如果你有任何解决办法,请告诉我。

编辑1

git remote -v

origin  git@github.com:Krozark/projet_compilation.git (fetch)
origin  git@github.com:Krozark/projet_compilation.git (push)

编辑:解决方案

sudo ifconfig [wlan0] mtu 1460 (lower than 1500)

展示 git remote -v 的输出结果。看起来像是网络超时,但如果没有远程URI,Stack Overflow也无能为力。此外,你能从该远程仓库执行 git fetch 吗? - fge
现在尝试一下。Github看起来又正常工作了。 - Gabriele Petronella
3个回答

11

我看到一个同事遇到了完全相同的问题,这与SSH有关,并且我们当时正在使用VPN连接,最终发现网络MTU设置过高(如果我没记错的话是1492),我们调整了较小的值直到它开始工作。所以似乎与网络数据包分割有关。

不确定这是否也适用于您,但是尝试将网络MTU更改为较低的值并查看是否有效无妨。

当然,如果这是Github方面的问题,则这不是因素(您可以创建新存储库并上传代码表明这与MTU无关)。


1
我这样做:sudo ifconfig wlan0 mtu 576,它解决了问题。谢谢! - Krozark
我建议将MTU设置得尽可能高(不能超过1500 - 这是以太网的最大限制),但你可能可以在1460左右进行设置而不会出现问题。尽可能地提高MTU更好,但要保持功能正常。 - Phil Street
我会尝试其他的值,但我会从一个非常小的值开始来测试你的解决方案。1460是可以的。我的默认值是1500。 - Krozark
+1. 我在我的回答中提到了VPN,但这个答案更具体。 - VonC

4

正如您建议的固定MTU已经有效减轻了问题,我建议采取更有针对性的解决方案。

iptables -t mangle -I OUTPUT 1 -o wlan0 -d 207.97.227.239 \
    -p tcp --dport 22 --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1420

这段内容涉及到IT技术,具体是关于SSH在github.com IP上的TCP协商过程并强制MSS为1420的方法。这个方法实际上与设置MTU相同,但更加精确。它适用于一些情况下无法轻易保存MTU变化并需要每次重新应用的情形。
需要注意的是,MSS应比MTU小40,以允许40字节的TCP头和数据段(MSS是最大分段大小)。这样做的最常见原因是VPN和隧道。尽管PMTU旨在解决这个问题,但在太多情况下失败了,导致你需要手动调整某些路径的MTU。使用iptables规则可以允许你根据不同的问题路径来定制你的流量,而不是强制你将MTU设置为所有路径的最低公共分母。这样做的问题是,你会通过增加头部到数据比率逐渐降低有效带宽。

请详细解释一下根本原因是什么。+1 - Phil Street

2
如果本地环境正常(即您的git和ssh工作正常),那么问题可能出在远程端:
请检查GitHub状态

今天

3:22 UTC 我们正在调查我们的一个文件服务器出现的问题,少数存储库不可用。

您可能会受到GitHub提到的当前反复访问问题的影响。
或者这是一个连接问题(比如缺少VPN路由)。

如果不是这种情况,另一种超时实例可能是http://blog.barbarycodes.com/2011/01/16/fix-for-%E2%80%9Cgit-push%E2%80%9D-timeouts-on-new-repository/: git push --no-thin。但这并不完全符合您的情况。 - VonC
可能是源代码的问题,但显然不是,因为我刚刚试过了。 - Krozark
我尝试使用git push --no-thin,但没有更改。 - Krozark
@Krozark,我之前不知道这个,但是git push --no-thin在git版本1.8.5之前是无法使用的 - VonC

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