2014-02-24 40 views
4

从Netbeans 7.4(在Linux上)推送提交给Gerrit的提交时遇到问题。我的混帐配置:从Netbeans推送到Gerrit的Git

 
[core] 
     repositoryformatversion = 0 
     filemode = true 
     logallrefupdates = true 
     bare = false 
[remote "origin"] 
     url = ssh://[email protected]:9418/xxx/gitTestWeb3 
     fetch = +refs/heads/master:refs/remotes/origin/master 
     push = HEAD:refs/for/master 
[user] 
     name = Mxxx Cxxx 
     email = [email protected] 
[branch "master"] 
     remote = origin 
     merge = refs/for/master 
[push] 
     default = upstream 

当我尝试启动“混帐 - >远程 - >推到上游”我收到“未追踪到本地主指定的远程分支”的错误。当我使用“Git - > Remote - > Push ...”时,我的提交总是直接添加到主分支。 Netbeans的日志:

 
==[IDE]== 2014-02-24 16:37:53 Pushing - gitTestWeb3 
git branch 
git remote -v 
setting up remote: origin 
git push ssh://[email protected]:9418/xxx/gitTestWeb3 refs/heads/master:refs/heads/master 
Remote Repository Updates 
Branch Update : master 
Old Id  : 38806fc76a933f4538a5f0b9fc500bd69309faba 
New Id  : 38806fc76a933f4538a5f0b9fc500bd69309faba 
Result  : UP_TO_DATE 

Local Repository Updates 
Branch Update : origin/master 
Old Id  : 9d048427bb50d7de642083a903a18a11568eadec 
New Id  : 38806fc76a933f4538a5f0b9fc500bd69309faba 
Result  : FAST_FORWARD 

==[IDE]== 2014-02-24 16:37:54 Pushing - gitTestWeb3 finished. 

这是任何方式强制执行Neteans Git插件可兑现git的配置?或者我应该配置别的东西?

顺便说一句,它也接缝,git钩子不被解雇;我已经安装了Gerrit的commit-msg,但NB提交后没有修改消息;从命令行它完美地工作。

BTW2完全相同的git配置与eclipse(事件Juno)完美结合。提取是由主人完成,而所有的推动来到refs/for/master进行审查。

+0

这样做有没有想通?我正在NB 8.0.1中工作,并希望尝试它,但我希望有人已经审查过它。 – idclaar

回答

0

为了从IDE中获得这个工作(在这里使用了“从IDE开始”的一个稍微松散的定义),我不得不自己推出一些。希望NetBeans团队或有时间掌握的社区中的某位英雄能够根据回购类型和安装的钩子从IDE中的提交对话框中获得此工作。只要你的终端在NetBeans中工作(在我的情况下是Windows上的Cygwin),你可以很容易地获得你需要的钩子消息Change Id,并且也可以让Gerrit发布工作。

我首先将commit-msg钩子复制到我的路径(我的用户的bin)中的一个目录中,并在脚本的最后一行添加[email protected],以便可以从命令行调用脚本的功能。然后我添加了一个用于调用它的别名,以及用于从本地回购库执行Gerrit发布的另一个别名。我还创建在NetBeans简单的提交信息模板提交对话框中的“加载模板”弹出对话框,如下所示:

Change-Id: I 

有了这个获得预填充值的信息是很好的,因为它让我想起了(我们只是开始使用Gerrit)代码审查需要完成,我需要填写其余的变更ID。这是我做这件事的.bashrc别名:

alias getChangeId="commit-msg _gen_ChangeId 2>/dev/null" 

得到消息的改变ID部分的其余部分,添加任何其他线路上面的变化和commiting后,我准备打电话给别名从我的分支根目录的命令行发布到Gerrit。下面是:

alias gerritPublish='_gerritPublish' 
_gerritPublish() 
{ 
    localBranch=`git rev-parse --abbrev-ref HEAD` 
    git push -u --progress "origin" HEAD:refs/publish/dev/$localBranch 
} 

的修改最后一次提交仍然IDE的提交对话框工作正常,并且正确的消息在填充和更换ID,所以这是不错的。我喜欢使用IDE的提交对话框,而不是单独使用命令行,因为它的内置并行处理功能非常棒。尽管如此,所有这些都没有我想要的那么干净,但现在它运行良好,而且我不必启动任何其他工具或离开NetBeans,所以我希望它有所帮助。