我在从 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/