emacs使用magit提交到gerrit

从好几年前我就开始一直使用git了,大部分的提交是在命令行下,反
正emacs的shell功能很好用,也从来没有想过安装插件什么的。

我也在用gerrit管理项目,大部分的时候,项目的.git/config的文件
里面都有这样的一段:

      [remote "origin"]
	url = xxxxx
	fetch = +refs/heads/*:refs/remotes/origin/*
	puttykeyfile = 
	push = HEAD:refs/for/master
       

关键是那个push, 可以让我在命令行下直接git push就push到了
refs/for/master分支上了,方便很多。

突然想在emacs中使用下版本管理,我可从来没用过呢。于是查看了下,
magit评价不错,就直接安装配置了下,具体可从https://github.com/magit/magit
看如何安装使用。

但安装完之后发现push的时候默认push的分支是
master:refs/heads/master,没发现特别的需要设置的地方(可能是我没仔
细看),如果不能push到refs/for/master的话,对我而言几乎毫无用途啊。
于是就直接修改下源代码了:

       magit.el | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/magit.el b/magit.el
index ae51473..89a6ad1 100644
--- a/magit.el
+++ b/magit.el
@@ -5422,9 +5422,11 @@ even if `magit-set-upstream-on-push's value is `refuse'."
                                         (eq magit-set-upstream-on-push 'askifnotset)))
                                (yes-or-no-p "Set upstream while pushing? "))))))
             (apply 'magit-run-git-async "push" "-v" push-remote
-                   (if ref-branch
-                       (format "%s:%s" branch ref-branch)
-                     branch)
+                   (cond ((magit-get "remote" push-remote "push")
+                          (magit-get "remote" push-remote "push"))
+                         (t (if ref-branch
+                                (format "%s:%s" branch ref-branch)
+                              branch))) 
                    (if set-upstream-on-push
                        (cons "--set-upstream" magit-custom-options)
                      magit-custom-options))
 
       

修改丑陋,能用就行,反正我对lisp基本上不懂。我的修改可从https://github.com/zeze0556/magit检出。

这样依赖,如果在config中配置了push的相关内容(比如文章一开始的
那个配置格式),就会push到指定的分支上,如果没有配置的话,按照默认
的来。

然后到了gerrit的页面一看,乖乖,中文怎么乱码了,看了下模式,是
在git-commit-mode下,然后编码居然是undeced-xxx的,虽然可以通过在
写完日志之后: C-x ret c utf-8-unix Alt-x git-commit-commit来操作,
但明显太烦人了,不过,幸好这个支持hook,于是就在配置中写下下面的
hookl:

      (defun my-git-commit-hook ()
  (auto-fill-mode)
 (flyspell-mode)
  (set-buffer-file-coding-system 'utf-8-unix))
(add-hook 'git-commit-mode-hook 'my-git-commit-hook)
       

这下子就默认以utf-8-unix的编码提交了,乱码什么的通通散去。

PS: 最近在尝试使用emacs的evil插件,现在稍微习惯些了,vim的快速
移动果然不是盖的,不过总在中文输入法什么的和快捷键上卡壳,有些时
候会和emacs的习惯冲突,慢慢锻炼吧。

gerrit使用mysql数据库及中文提交

以下内容无效,虽然可以解决subject乱码的问题,但在自动补全的部分,会引起内部错误。目前我已经放弃了mysql做后台数据库,改为h2数据库,所有的中文都不再成为问题。

很早之前使用gerrit的时候,发现中文提交的日志会显示成”??”,但在
详细的Change中却显示正常,一直以为是gerrit的问题,但之前也仅仅是
随便测试下,主要是没有专用的服务器。现在准备将所有的都转到gerrit
中,这个问题不解决不行了。

今天尝试解决这个问题,先查gerrit的代码,查change, 查patchset,
查到了mysql数据库上,但我对mysql数据库不熟悉,专门装了个
phpmyadmin去看数据存储,发现这个数据是存在mysql数据库中的。

但mysql数据库中的是乱码!!!!,问题的原因找到了,就想办法解
决。首先将changes表的结构subject项的编码修改为utf8-bin,我是通过
phpmyadmin修改的,不太清楚mysql下如何操作最方便,然后上传还是乱码。

如果传输的数据连接编码本身是错误的。。。。有这个可能,找一找在
gerrit中如何设置连接的编码吧,我在
gerrit-server\src\main\java\com\google\gerrit\server\schema中找到
了mysql的连接,在url中添加下编码,觉得这样子太傻了,不够灵活。就
看下gerrit的配置帮助吧,这里直接给结果吧:

继续阅读gerrit使用mysql数据库及中文提交

nginx+gerrit配置的密码访问

网站服务器运行在Raspberry pi下,我将路由器上原来的nfs等等服务
同样搬到了pi下,原来路由器上还运行一个git的服务器,但既然现在运行
的硬件环境比原来好了,就准备换成gerrit了。

发现gerrit支持http的push,这样就比ssh的那一串方便多了。就想配
置一下,折腾了许久,才折腾成功。

以下是nginx侧的相关配置:

        location /git/login/ {
                stub_status on;
                auth_basic "Restricted";
                auth_basic_user_file /home/git/pwd;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header Host $host;
                proxy_pass http://127.0.0.1:8081;
        }
        location ^~ /git {
                root /usr/share/nginx/html;
                index index.html index.htm;
                stub_status on;
                auth_basic "Restricted";
                proxy_pass http://127.0.0.1:8081;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header Host $host;
        }
       

简要说明一下, /git/login/里的设置是通过网页访问时的授权设置,
这个设置保证但用户通过网页访问时,使用的密码配置文件使用的是
/home/git/pwd,这个文件是使用apache-utils中的htpasswd生成的。

~/git下面的访问,使用的是gerrit的密码授权管理,当通过http提交
代码的时候,使用的是gerrit的帐号和密码,这个密码和通过网
页是不一样的,在用户的setting->HTTP Password中生成的,这个密码是
一个随机的。
这样子即保护了网页访问的安全性,也保证了提交
的安全性和访问的方便性。