Git 从 Netbeans 推送到 Gerrit

标签 git netbeans gerrit

我在从 Netbeans 7.4(在 Linux 上)推送提交以供审查时遇到问题。我的 git 配置:

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

当我尝试启动“Git -> Remote -> Push to Upstream”时,我收到“No tracked remote branch specified for local master”错误。当我使用“Git -> Remote -> Push...”时,我的提交总是直接添加到 master 分支。 Netbeans 日志:

==[IDE]== 2014-02-24 16:37:53 Pushing - gitTestWeb3
git branch
git remote -v
setting up remote: origin
git push ssh://xxx@git.yyyy.com: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 hooks 没有被触发;我安装了 Gerrit 的 commit-msg,但是 NB commit 后没有修改消息;从命令行它完美地工作。

BTW2 完全相同的 git 配置与 eclipse (event Juno) 完美配合。提取是从 master 完成的,而所有推送都到达 refs/for/master 以供审查。

最佳答案

为了在 IDE 中实现这一点(这里使用“从 IDE 中”的松散定义),我不得不自己动手做一些工作。希望 NetBeans 团队或社区中有时间的一些英雄能够根据 repo 类型和已安装的 Hook 从 IDE 中的提交对话框中完成这项工作。只要您的终端在 NetBeans(在我的例子中是 Windows 上的 Cygwin)中工作,您就可以很容易地获得您需要的 Hook 消息 Change Id,并且还可以让 Gerrit 发布工作。

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

Change-Id: I

在提交消息中预先填充这个很好,因为它提醒我(我们刚刚开始使用 Gerrit)需要完成代码审查,我需要填写其余的更改 ID。这是我的 .bashrc 别名:

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

在获取消息的其余更改 ID 部分并在其上方添加任何其他行以进行更改和提交之后,我准备好从分支根目录的命令行调用别名以发布到 Gerrit .就是这样:

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

在 IDE 的提交对话框中,Amend Last Commit 仍然可以正常工作,并填写正确的消息和更改 ID,所以拥有它真是太好了。我喜欢使用 IDE 的提交对话框而不是单独的命令行,因为它非常适合内置并排比较。尽管如此,所有这些都没有我想要的那么干净,但它目前运行良好,我不必启动任何其他工具或离开 NetBeans,所以我希望它有所帮助。

关于Git 从 Netbeans 推送到 Gerrit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21992512/

相关文章:

git - 如何添加 ssh key 以连接到 git?

git - 如何从本地恢复 Git 裸仓库

Git 审查 : submit particular commit from multiple commits

git - 使用仍在审查中的 Cherry pick 推送代码以供审查的工作流

python - 如何在 gerrit review 中添加多行注释?

git - 版本控制 : from zip to git

android - 从 Eclipse 恢复已删除的 Git 存储库

java - Java App在MacOS上运行,但不在Raspberry Pi上运行-错误:找不到或加载主类

java - 我可以构建并运行我的项目,但我的 IDE 一直显示错误

java - 使用 netbeans 创建不同大小的 UI!