问题:
在redmine中配置项目的版本库为git时,第一次配置好,会自动提取git中的信息,但是之后做提交操作,使用hook调用/sys/fetch_changesets,触发刷新,redmine没有跟着更新,这是为何?
调查:
尝试多次修改那个几个设置,都不起作用,最终经过尝试确认,另外也无意中看到网上有人说,需要手动到版本库路径下拉取,然后再去调fetch_changesets。也就是说redmine的fetch_changesets只是单纯的从指定的git中提取版本库信息到数据库,不会做从远程仓库拉取操作
解决方案:
方案一:
在git服务端,push的hook中添加一步,在redmine配置的版本库路径下做次拉取,然后再去fetch_changesets。
此方案操作简单,但限制不小,要么git服务和redmine在一台机子上,方便hook直接在redmine版本库路径下pull,要么自己想法让redmine所在机器提供接口进行相应的pull
方案二:
修改redmine代码,lib\redmine\scm\adapters\git_adapter.rb文件def branches处
def branches
return @branches if @branches
@branches = []
** logger.info "### this two step were added by Moxun at 2017-07-23. ###"
logger.info "1. fetch --all"
cmd_args = %w|fetch --all|
git_cmd(cmd_args)**
logger.info "2. reset --hard origin"
cmd_args = %w|reset --hard origin|
git_cmd(cmd_args)
logger.info "### this two step were added by Moxun at 2017-07-23. ###"
cmd_args = %w|branch --no-color --verbose --no-abbrev|
.........
def git_cmd(args, options = {}, &block)
repo_path = root_url || url
将full_args = ['--git-dir', repo_path]一行改为如下(这样命令才可以在正确的路径下执行):
full_args = ['-C', repo_path + '/..', '--git-dir', repo_path]
if self.class.client_version_above?([1, 7, 2])
full_args << '-c' << 'core.quotepath=false'
full_args << '-c' << 'log.decorate=no'
end
full_args += args
这个是在redmine 3.4.2上修改的,不排除后续redmine后续版本此处有变化,因此后面升级还需要留意该问题