首页 > 学习笔记 > Windows下GitBlit使用钩子自动同步
2016
11-02

Windows下GitBlit使用钩子自动同步

一、先普及一下
gitblit是使用java语言开发的一个git管理工具,其后台使用的是servlet配置作为网页服务器,引用一句话:Gitblit 是一个纯 Java 库用来管理、查看和处理 Git 资料库.相当于 Git 的 Java 管理工具.git的管家。

二、gitblit钩子

gitblit钩子与git hook差不多,只是配置方式不一样,gitblit钩子的配置使用groovy进行逻辑处理,而git hook基本上使用的是shell或cmd命令。groovy是JVM的一个替代语言。其语法与java相似并且可以使用import命令引入jar包。

三、配置Gitblit及目录

1.确保gitblit能够正常运行。[gitblit安装及配置]

2.在gitblit上创建一个开发用户git,并设置密码123456。

3.在gitblit上新建一个项目,并git clone到服务器的站点目录例如${wwwroot}下

例如服务器站点目录${wwwroot}是D:/wwwroot, 项目的远程路径是:http://admin@www.xx.com/git/api_project.git ,那么使用`git clone`命令之后,项目的目录就是D:/wwwroot/api_project

4.进入gitblit根目录/data/groovy目录下,新建一个文件api-post-receive.groovy,并且编辑以下代码:

import com.gitblit.GitBlit
import com.gitblit.Keys
import com.gitblit.models.RepositoryModel
import com.gitblit.models.TeamModel
import com.gitblit.models.UserModel
import com.gitblit.utils.JGitUtils
import com.gitblit.utils.StringUtils
import java.text.SimpleDateFormat
import org.eclipse.jgit.api.PullCommand
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.Config
import org.eclipse.jgit.revwalk.RevCommit
import org.eclipse.jgit.transport.ReceiveCommand
import org.eclipse.jgit.transport.ReceiveCommand.Result
import org.eclipse.jgit.util.FileUtils
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider
import org.slf4j.Logger

logger.info(“localclone hook triggered by ${user.username} for ${repository.name}”)

def repoName = repository.name
def rootFolder = ‘D:/wwwroot/api_project’
def pullBranch = ‘refs/heads/master’
def refgit = Git.open(new File(rootFolder + “/.git”));
PullCommand cmd = refgit.pull();

cmd.setRemoteBranchName(pullBranch)
//设置授权用户帐户
cmd.setCredentialsProvider(new UsernamePasswordCredentialsProvider(‘git’, ‘123456’))
cmd.call();
refgit.repository.close()

// report clone operation success back to pushing Git client
clientLogger.info(“${repoName} pulled to ${rootFolder}”)

四、 配置GIT

打开上面clone下来的项目,进行.git目录,用户文本编辑器打开config文件,查看文件末尾是否有如下代码,没有的话需要手动添加:

[remote “origin”]
url = http://admin@www.xx.com/git/api_project.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch “master”]
remote = origin
merge = refs/heads/master

五、配置gitblit的receive

1.打开gitblit服务器的网址,例如http://www.xx.com:1010 (测试使用),打开目标项目

2.找到项目,打开项目api_project,点击”编辑“。

3.点击左边栏的“receive”。

4.双击选择api-post-receive并保存。

以上为配置的所有步骤。

总结:本文解决的整个流程是:当开发者把项目提交处我们之前搭建的git服务器中,服务器触发post-receive事件,调用自定义钩子api-post-receive,执行groovy文件,把git版本库的文件pull到服务器站点目录下对应的项目中。

最后编辑:
作者:admin
这个作者貌似有点懒,什么都没有留下。