Git Review提交代码失败的解决方法

http://kiwik.github.io/openstack/2014/08/26/git-review%E6%8F%90%E4%BA%A4%E4%BB%A3%E7%A0%81%E5%A4%B1%E8%B4%A5%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/

如需转载,请标明原文出处以及作者

陈锐 ruichen @kiwik

写在最前面:

这段时间OpenStack社区gerrit的29418端口被墙了,小伙伴们都十分着急,写好了patch半天提交不了,那种感觉你懂的。还好团队里能人辈出,都翻出了花儿,在这里给大家Sharing一下。

土豪型

土豪们就是有钱,花个百来块,搞个,代码唰唰的就上去了,看的我们这些技术屌丝十分的羡慕。

就像花钱租了个梯子,钱到墙翻,不解释。

技术屌丝型

技术屌丝的特点就是喜欢研究个所谓的“底层”技术,在这里配置一个ssh的socks代理,很能体现技术屌丝的特质。

在~/.ssh/目录创建一个config文件,内容如下,在网上找个socks的代理,用ip和port替换socks-proxy-ip:port,配好别忘了用你自己的gerrit用户测试一下,ssh -p 29418 [email protected]

stack@devstack:/opt/stack/nova$  [bp/io-ops-weight]$ cat ~/.ssh/config
Host review.openstack.org
    ProxyCommand connect -S socks-proxy-ip:port %h %p
    IdentityFile ~/.ssh/id_rsa
    TCPKeepAlive yes
    IdentitiesOnly yes
    PreferredAuthentications publickey
stack@devstack:/opt/stack/nova$  [bp/io-ops-weight]$ ssh -p 29418 [email protected]

  ****    Welcome to Gerrit Code Review    ****

  Hi Rui Chen, you have successfully connected over SSH.

  Unfortunately, interactive shells are disabled.
  To clone a hosted Git repository, use:

  git clone ssh://[email protected]:29418/REPOSITORY_NAME.git

Connection to review.openstack.org closed.

注意:这种方法要用到一个connect命令,windows下安装git之后,就直接安装了这个命令,但需要把git安装目录的bin目录配置到%PATH%下;linux环境,需要通过包管理器安装一下,例如:apt-get install connect-proxy

附送一个查找socks代理的网址:

http://letushide.com/filter/socks5,all,all/list_of_free_SOCKS5_proxy_servers

技术屌丝洋洋得意的通过这种方法提交上了一个patch,很高兴,但是第二天发现代理不行了,一顿手忙脚乱的找免费代理,又是改配置,又是测试的忙活。

配置ssh socks免费代理这种方式就像是一群人都要,大家都去搬砖垫脚,但砖就那么几块,今天翻过去了,明天说不定砖就被别人搬走了,太折腾。

技术大牛型

是牛人就不折腾,也不靠人民币,挥挥手问题解决。git review默认通过ssh的方式,http和https的方式是不是也支持能?答案是肯定的,为了就是避免你在Firewall之后不能通过29418端口提交代码,但是需要一点小技巧。

  • 首先,需要登录review.openstack.org,然后在Settings -> HTTP Password里,生成一个HTTP密码,应该是一个大小写加数字的随机字符串。

  • 然后通过git remote set-url gerrit https://username:[email protected]/openstack/nova.git命令把ssh修改成https方式,当然也可以用http,经过我的实验都是可以的。别忘了把上面字符串中的用户名/密码改成你的gerrit用户名和上一步生成的HTTP密码。

修改前:

chenrui@CHENRUI-PC /d/dev/PyProjects/nova (master)
$ git remote -v
gerrit  ssh://[email protected]:29418/openstack/nova.git (fetch)
gerrit  ssh://[email protected]:29418/openstack/nova.git (push)
origin  https://github.com/openstack/nova.git (fetch)
origin  https://github.com/openstack/nova.git (push)

修改后:

chenrui@CHENRUI-PC /d/dev/PyProjects/nova (master)
$ git remote -v
gerrit  https://kiwik:[email protected]/openstack/nova.git (fetch)
gerrit  https://kiwik:[email protected]/openstack/nova.git (push)
origin  https://github.com/openstack/nova.git (fetch)
origin  https://github.com/openstack/nova.git (push)

测试一下:

chenrui@CHENRUI-PC /d/dev/PyProjects/nova (master)
$ git review -n -v
2014-08-26 20:39:42.736000 Running: git log --color=never --oneline HEAD^1..HEAD
2014-08-26 20:39:42.779000 Running: git remote
2014-08-26 20:39:42.808000 Running: git branch -a --color=never
2014-08-26 20:39:42.844000 Running: git rev-parse --show-toplevel --git-dir
2014-08-26 20:39:42.873000 Running: git remote update gerrit
Fetching gerrit
From https://review.openstack.org/openstack/nova
   0701dcc..7fb2a03  master     -> gerrit/master
   e6dd7da..f8af69a  stable/havana -> gerrit/stable/havana
   9805f3d..9ada982  stable/icehouse -> gerrit/stable/icehouse
2014-08-26 20:40:00.831000 Running: git rev-parse HEAD
2014-08-26 20:40:00.869000 Running: git show-ref --quiet --verify refs/remotes/gerrit/master
2014-08-26 20:40:00.899000 Running: git rebase -p -i remotes/gerrit/master
2014-08-26 20:40:13.004000 Running: git reset --hard 4fcab31f5160f90f01e9b11017445a8bd9de8f90
2014-08-26 20:40:13.277000 Running: git config --get color.ui
2014-08-26 20:40:13.308000 Running: git log --color=always --decorate --oneline HEAD --not --remotes=gerrit
No changes between HEAD and gerrit/master. Submitting for review would
be pointless.

直接配置gerrit使用http协议这种方式就像是技术屌丝搬了半天砖,发现旁边的技术大牛在墙上开了个暗道直接过去了,呵呵,傻眼~~

放这样一篇文章在技术blog里,也算是有中国特色的技术blog了吧。


你可能感兴趣的:(Git)