GitBlit hooks 多仓库单分支全自动文件部署
2018-01-23 00:00
761 查看
//声明类 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.CloneCommand import org.eclipse.jgit.api.PullCommand import org.eclipse.jgit.api.Git import org.eclipse.jgit.lib.Repository 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.slf4j.Logger def updatedRef for (ReceiveCommand command : commands) { updatedRef = command.refName } // RootFolderUrl 'D:/git' 文件夹目录 // BranchName 'refs/heads/master' 目标分支名字 def AutoClone(RootFolderUrl,BranchName){ clientLogger.info("准备开始文件更新") // 文件夹目录 def rootFolder = RootFolderUrl def bare = false //是否全部分支 def allBranches = false //目标分支 def branch = BranchName def includeSubmodules = true //版本库名称 def repoName = repository.name //文件夹对象 def destinationFolder = new File(rootFolder, StringUtils.stripDotGit(repoName)) //版本库路径 def srcUrl = 'file://' + new File(gitblit.getRepositoriesFolder(), repoName).absolutePath //判断是否全部分支更新 if(allBranches){ logger.info("用户 ${user.username} 请求从 ${repository.name} 版本库下[所有分支]克隆文件") //不终止,继续执行 }else{ logger.info("用户 ${user.username} 请求从 ${repository.name} 版本库下 ${branch} 分支更新文件") //单线分支 } clientLogger.info("开始检查目录") // 检查目标文件目录是否存在 if (destinationFolder.exists()) { //已存在,使用 pull 拉取推送的不同文件 logger.info("正在把 ${srcUrl} 版本库 ${branch} 分支文件更新至 ${destinationFolder}") clientLogger.info("文件目录已存在,准备更新文件") //git 获取文件夹路径 Git git = Git.open(destinationFolder) //调用 pull 类下的 pull 方法 PullCommand cmd = git.pull() //设置对象分支 cmd.setRemoteBranchName(branch) //执行 cmd.call() //关闭 git.close() logger.info("文件更新成功") clientLogger.info("文件已更新完成") } else { //不存在,使用 clone 克隆对应分支 clientLogger.info("准备新建文件目录,正在确认版本库") //调用 clone 类 下的 方法 CloneCommand cmd = Git.cloneRepository(); cmd.setBare(bare) //判断是否判断全部分区 if (allBranches){ logger.info("正在把 ${srcUrl} 版本库所有分支克隆到 ${destinationFolder}") clientLogger.info("开始克隆全部分支") cmd.setCloneAllBranches(true) }else{ logger.info("正在把 ${srcUrl} 版本库 ${branch} 分支克隆到 ${destinationFolder}") clientLogger.info("开始克隆 ${branch} 分支") cmd.setBranch(branch) } cmd.setCloneSubmodules(includeSubmodules) //设置路径 cmd.setURI(srcUrl) //设置文件夹路径 cmd.setDirectory(destinationFolder) //执行 Git git = cmd.call(); git.repository.close() logger.info("克隆已完成") clientLogger.info("克隆已完成") } logger.info("文件已同步") } // 判断哪个仓库 switch (repository.name) { // 仓库名 1 case 'His.git': // 自定义分支名称 switch (updatedRe 7fe0 f) { case 'refs/heads/master': AutoClone('C:/inetpub/m','refs/heads/master') break case 'refs/heads/bug': AutoClone('C:/inetpub/d','refs/heads/bug') break default: clientLogger.info("该分支文件未自动部署") break } break // 仓库名 2 case 'test.git': // 自定义分支名称 switch (updatedRef) { case 'refs/heads/master': AutoClone('C:/inetpub/wwwroot','refs/heads/master') break default: clientLogger.info("该分支文件未自动部署") break } break default: clientLogger.info("所在仓库未设置推送") break }
相关文章推荐
- git本地仓库,分支切换的文件修改问题
- git本地仓库拉取远程分支代码/git忽略文件的配置
- 解决SVN误操作--使用Git仓库中恢复已删除的分支、文件或丢失的操作
- 从Git仓库中恢复已删除的分支、文件或丢失的commit
- 实现git hooks自动持续部署
- Gitblit hooks 自动部署文件
- 从Git仓库中恢复已删除的分支、文件或丢失的commit
- 用git pull取回远程仓库某个分支的更新,再与本地的指定分支自动merge
- Linux 终端 Git 分支提示和自动补全相关脚本文件
- 从零开始自动部署Django项目(二):使用Python编写Git Hooks
- git 分支的 创建 修改 切换 查看 从远程仓库抓取数据 以及 提交时忽略某文件
- gitblit git SERVER window 安装配置 hook post-receive 自动部署
- 【Webhooks】使用Git的Webhooks进行服务器自动部署代码
- ubuntu14.04搭建git服务器、远端仓库、自动部署
- git hooks 实现网站的自动部署
- 【Git学习笔记】用git pull取回远程仓库某个分支的更新,再与本地的指定分支自动merge
- 从Git仓库中恢复已删除的分支、文件或丢失的commit
- 使用 Git Hooks 实现自动项目部署
- 从Git仓库中恢复已删除的分支、文件或丢失的commit
- 1git命令的使用,查看git仓库状态,添加文件到git跟踪,git提交,查看git分支,查看git仓库日志信息,切换git分支,解决git分支合并后出现冲突的问题