2016-11-30 19 views
1

预期行为

我编辑文件1,提交,这样做混帐推从未完成 - 只到达共线

$ git push 

NOTICE: Only authorized blah blah blah... 

Counting objects: 7, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (7/7), done. 
Writing objects: 100% (7/7), 676 bytes | 0 bytes/s, done. 
Total 7 (delta 4), reused 0 (delta 0) 
To ssh://[email protected]:/opt/git/fooBar.git 
    28ad03d..73ae492 master -> master 
$ 

问题

然后,我在同一个项目中编辑的文件2,承诺并做到了这一点:

$ git push 

NOTICE: Only authorized blah blah blah... 

Counting objects: 10, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (8/8), done. 
Writing objects: 100% (10/10), 1.42 KiB | 0 bytes/s, done. 
Total 10 (delta 4), reused 0 (delta 0) 
^C 

请注意我是如何在最后使用CTRL-C(^C)?那是因为它从未完成。这是不是预期的行为。

无法应对机制

所以我:

cd .. 
mv fooBar/ fooBar_bak/ 
git clone ssh://[email protected]:/opt/git/fooBar.git 
cd fooBar 

编辑一些其他的文本文件(只是增加了一个空行),推,和它的工作。这意味着在推送失败之后,我在之前成功推送了相同的本地/远程存储库。

但编辑它以前不喜欢的file2?推送从未完成。同样的事情与它不喜欢的file3。我没有看到这些文件的特别之处。

那么,file2和file3是UTF-8和file1是ASCII,但这应该没关系。应该是?

我尝试了git push hangs after Total line的所有解决方案,但都没有为我工作。

我真的不明白strace -efile -f git push的输出,但是没有任何东西跳到我身上。

我等了。但这不是一个大回购或一个大文件。

我在我的机器上使用Ubuntu 16.04,在我的机器上使用git 2.7.4,在CentOS服务器上使用git 1.7.1。我没有安装msysgit,git-for-windows或cygwin。

git push -u origin master也没有工作。

git config http.postBuffer 524288000没有什么区别。

GIT_CURL_VERBOSE=1GIT_TRACE=1没有效果。

git config --global core.askpass "git-gui --askpass"没有做任何事情,可能是因为我没有安装git-gui。

@ RonanDejhero在这里的建议:https://stackoverflow.com/a/21032615/1128668是什么让我看到,一些文件可以改变,承诺和推动,有些不能。我尝试复制已更改的文件,手动更改文件,并做出稍微不同的更改:没有用。

在服务器上,我做了sudo chown -R me.git-users /opt/git/,但这也没有什么不同。当我过去遇到这样的问题时,这似乎有帮助。

我在我的本地仓库和服务器上做了一个git gc /opt/git/fooBar.git。没有快乐。

更新

我删除了我的本地回购,克隆,编辑文件2(这混帐不喜欢前正在编辑)由添加一个空行。承诺,推动,它的工作!然后我评论了十几行未使用的代码,承诺推送,并且工作!我可以介绍一个角色或者git不喜欢的东西吗?

+2

你还等什么,在'Total'线后,是另一端回来,并说:“是的,我已经接受了你的裁判更新”或“不,我拒绝你的更新”(每个分支一个答复或标签更新你发送,在这种情况下,只是一个分支)。因此问题*在另一端*,可能是由于错误的挂钩。它需要从那个端点进行诊断。 – torek

回答

1

这是我的路由器?!?!?!

最大的线索是,我试图SFTP麻烦的一个文件到服务器,但失败。我昨天安装了新的Netgear AC1750智能WiFi路由器型号R6400。要解决我的问题,我只需拔掉Netgear路由器并插入旧的Linksys WRT120N。一切正常。

奇怪。你会想如果我从我的桌面使用VPN并在其中运行SSH,路由器将无法分辨它发送的是什么类型的数据包。或者,如果它打乱了所有会破坏数据包的数据包。我不明白。

我告诉美国网件我的问题,并表示,我可能会返回路由器和得到的东西,我可以上安装开源固件。他们的回应是“也许你应该这样做”,所以我做了。现在在一切正常的情况下,在布法罗路由器上快乐地运行OpenWRT。

+1

作为一项快速测试,我使用手机的热点进行测试,并发挥了作用。不知道它是路由器还是ISP,但我确定它不是我的系统/ git。谢谢。 – rrosa

2

我有这种行为出于不同的原因,希望这有助于回答别人:)

我家里有我的本地git的服务器上的目录,在我所有的git回购/ SRV/git的,和用户命名拥有所有文件的git-user。我看到像ssh:// git-user @ server/repo这样的URL来复制回购并进行更改,从而保证git-user拥有所有文件。

我已经从SVN切换到我的每个回购协议的GIT。我的制作从SVN回购的最新文件的新回购流(我不关心历史,他们只是个人项目)如下:

ssh <git server> 
su - 
su - git-user 
git init --bare newgitrepo.git 
exit 

# Back to my desktop 
cd git 
git clone ssh://[email protected]<git server>/srv/git/newgitrepo.git 
cd newgitrepo 
# Set up initial files - my local Workspace dir is where Eclipse has 
# SVN projects already checked out 
cp -r ../Workspace/<svn repo>/* . 
cp ../Workspace/<svn repo>/<hidden dot files/dirs, except for .svn> . 
# Create .gitignore files for stuff like compiled code directory 
git add <everything but .git dir> 
git commit -m 'Initial Import' 
git push origin master 

我有一个回购协议的情况下,如果没有得到整条生产线的这种刺激性行为而没有进一步的回应,我就无法推动任何事情。我错过了服务器上的第三条命令(su - git-user),所以我以root身份创建了我的裸回购,导致所有文件都由root拥有。当然,解决方案只是删除服务器上的裸回购,并将其重新创建为git-user。

这与GlenPeterson所说的关于服务器问题而不是客户端问题是一致的。

+1

谢谢!一个注意:在服务器上,你应该能够通过运行 'cd/srv/git; chown -R git-user.git-user newgitrepo.git' 将这些文件的组和用户所有权更改为git-user组和git-user用户。如果这样做(我相信它应该),我认为这比删除和重新创建回购更好。 – GlenPeterson

+0

添加和删除不是一个特权问题 - 这是一个git流问题。Git要求(以我的理解)在您可以检查之前在服务器上创建回购 - 这是GitHub为您单击以创建新回购时所做的事情。 此外,Eclipse egit不会签出一个空的回购 - 您必须先推送服务器上的东西。我有一个脚本,我可以通过ssh执行,创建一个repo,检出它,提交一个包含一行bin的.gitignore,并删除它。 然后在客户端,我可以检查出来,我没有问题。 – Greg