已经有两位同学写过类似的 wiki 了,值得一看:

为啥我又来凑热闹呢?基于下面两个原由:

    1. 我的机子是 Win10,上面脚本的适用环境是 Mac/Linux
    1. gitlab 仓库换了地址,导致上面的脚本不可用了

因为我的开发环境是:win10 + vscode + git,计划就在这个基础上优化提交 request 流程。所以,采用cygwin + shell来实现下面的功能。

vscode 如何集成 cygwin,可以参考我的这篇文章:vscode 集成 cygwin

提供能力

Create merge request
  • 自动识别仓库/项目名称和ID
  • 当前本地分支作为 source branch
  • 手动输入远程分支名作为 target branch,默认 test 分支
  • 使用 last commit 作为 merge title
Accept merge request
  • 提供可选的 Accept merge request 功能

如何在项目中使用?

1、在 win10 上安装 cygwin

2、在 vscode 中集成 cygwin

3、将下面脚本的 PRIVATE_TOKEN 更改为你自己的后保存为 mr.sh,我把它放在 cygwin 安装目录的 /home/廖大爷/sh 文件夹下。ps:你可以把它放在任何位置

4、更改脚本的 GITLAB_URL 为你项目所在的 gitlab 地址

5、打开 cygwin 终端,执行 vim .bashrc,键入alias merge='bash ~/sh/mr.sh',保存并退出,再执行source .bashrc

6、使用 vscode 进入项目后,打开 vscode 终端,或使用 cygwin cd 到项目目录,执行merge等同于merge test,或执行merge 其他远程分支名

mr.sh

#!/bin/bash

set -e

TARGET_BRANCH=$1
if [ -z $TARGET_BRANCH ]; then
TARGET_BRANCH=test
fi PRIVATE_TOKEN='xxxxxxxxxxxxxxxxxxxxxxxxxxx'
GITLAB_URL='gitlab 仓库域名,比如 http://192.168.8.258'
REMOTE_URL=$(git remote -v | grep push | awk '{print $2}')
PROJECT_NAME=$(echo $REMOTE_URL | cut -d ':' -f2 | cut -d '.' -f1) API_URL=$GITLAB_URL/api/v3
PROJECT_URL=$GITLAB_URL/$PROJECT_NAME
assignee_name=xuyang
assignee_id=57 RED_COLOR='\e[31m'
BLUE_COLOR='\e[34m'
END_COLOR='\e[0m' urlencode() {
local length="${#1}"
for (( i = 0; i < length; i++ )); do
local c="${1:i:1}"
case $c in
[a-zA-Z0-9.~_-]) printf "$c" ;;
*) printf "$c" | xxd -p -c1 | while read x;do printf "%%%s" "$x";done
esac
done
} getUserId() {
printf $(curl --header \
"PRIVATE-TOKEN: ${PRIVATE_TOKEN}" \
$API_URL/users?username=${assignee_name} | cut -d ',' -f3 | cut -d ':' -f2)
} getProjectId() {
printf $(curl --header \
"Private-Token: ${PRIVATE_TOKEN}" \
$PROJECT_URL 2>/dev/null | grep 'data-autocomplete-project-id' | cut -d '=' -f4 | cut -d ' ' -f1 | cut -d "'" -f2)
}
echo -e "
${BLUE_COLOR}Get merge request info ... ${END_COLOR}" projectId=$(getProjectId)
projectId=${projectId:-902}
sourceBranch=$(git branch | grep \* | cut -d ' ' -f2)
targetBranch=$TARGET_BRANCH
title=$(git log -1 --pretty=%B)
# echo merge info
echo -e "
projectId: ${RED_COLOR}$projectId${END_COLOR}
sourceBranch: ${sourceBranch}
targetBranch: ${targetBranch}
title: ${title}
remoteUrl: ${REMOTE_URL}" # create merge request
createMR() {
title=$(urlencode "$title")
data="source_branch=$sourceBranch&target_branch=$targetBranch&assignee_id=$assignee_id&title=$title" echo $(curl --header "PRIVATE-TOKEN: ${PRIVATE_TOKEN}" \
--data $data \
"$API_URL/projects/$projectId/merge_requests" 2>/dev/null)
} echo -e "
${BLUE_COLOR}Creating merge request... ${END_COLOR}" merge_request_res=$(createMR)
merge_request_id=$(echo $merge_request_res | cut -d ':' -f2 | cut -d ',' -f1) # Accept merge request
if [[ $merge_request_id == *[0-9] ]]; then
echo -e "
${BLUE_COLOR}Create merge request success! The merge_request_id is $merge_request_id${END_COLOR}" read -p "Accept this merge request? (y/n) " isConfirm if [[ $isConfirm == "n" ]]; then
echo -e "
${RED_COLOR}Cancel accept merge request${END_COLOR}"
exit
fi curl -X PUT --header "PRIVATE-TOKEN: ${PRIVATE_TOKEN}" \
"$API_URL/projects/$projectId/merge_requests/$merge_request_id/merge" \
2>/dev/null echo "
Merged Success!"
exit
else
echo -e "
${RED_COLOR}Create merge request Fail:${END_COLOR}
$merge_request_res"
fi echo -e "
${BLUE_COLOR}Click on the link below for more details:${END_COLOR}
$PROJECT_URL/merge_requests
"

gitlab api文档

gitlab 一键 merge request(III)的更多相关文章

  1. 【转】GitHub 的 Pull Request 和 GitLab 的 Merge Request 有区别吗?

    在 GitHub 上混久了,经常听到 Pull Request,在 GitLab 上混久了,则经常 提起 Merge Request ,然而它们之间有不同吗?为什么要用两个不同的名称? 要追溯这两个名 ...

  2. GitLab的权限管理及Merge Request

    GitLab的权限管理及Merge Request 原创尘世间一名迷途小码农 发布于2019-06-09 12:40:30 阅读数 2909  收藏 展开 目录 1.前言 2.角色权限 3.强制代码审 ...

  3. GitLab:解决Merge Request中Commits不更新的问题

    最近在使用 GitLab 的 Merge Requests 功能进行 Code Review .操作流程是这样的: 1)开发人员A要给一个项目增加一个新功能,先在这个项目上创建一个 Git 分支. 2 ...

  4. git学习------> 解决Gitlab 版本升级之后,发送 merge request 出现 http 500 的返回码错误

    今天有同事在Gitlab上发送 Merge Request的时候,直接出现如下所示的界面,提示http 500,服务器内部出错. 一.错误描述 1.1 创建新的 Merge Request 1.2 填 ...

  5. git使用-merge request开发操作步骤

    0. 如果当前不在develop分支,则切换到develop分支 git checkout develop 1. 获取develop分支最新代码 git pull 注意:这一步正常来说应该是一个Fas ...

  6. gitlab一键安装+配置(备份+LADP认证)

    gitlab一键安装+配置(备份+LADP认证) #gitlab一键安装 #centos6 mini, GitLab社区版 #参考官方最新文档 https://www.gitlab.com.cn/in ...

  7. 使用Gitlab一键安装包后的日常备份恢复与迁移

    Gitlab 创建备份 使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份: gitlab-rake gitlab:ba ...

  8. gitlab merge request

    分支提了mr之后, 又有commit 不用重新提mr,mr中会自动更新 要保证项目下的.git目录中有hooks这个目录(如果是从github迁移到gitlab的项目, 可能没有这个目录, 导致mr不 ...

  9. GitLab一键式安装bitnami

    https://bitnami.com/stack/gitlab/installer https://bitnami.com/redirect/to/96764/bitnami-gitlab-8.5. ...

随机推荐

  1. 如何学习DeepLearning

    多年来,科学家们为了搞清楚神经网络的运行机制,进行了无数次实验.但关于神经网络的内在运行方式,目前还没有系统性的理论,没有具体的路线可以指引你获得更好的性能.简单地下载开源工具包直接使用并不能跑出很棒 ...

  2. python中的re模块——正则表达式

    re模块:正则表达式 正则表达式:为匹配字符 import re #导入re模块 #re.findall('正则表达式','被匹配字符') re模块下findall用法 在正则表达式中: \w 表示匹 ...

  3. ReactiveX 学习笔记(23)RxCpp

    RxCpp RxCpp 是 ReactiveX 的 C++ 语言实现. 下载 RxCpp $ git clone --recursive https://github.com/ReactiveX/Rx ...

  4. TCP/UDP 常用端口列表

    计算机之间依照互联网传输层TCP/IP协议不同的协议通信,都有不同的对应端口.所以,利用短信(datagram)的UDP,所采用的端口号码不一定和采用TCP的端口号码一样.以下为两种通信协议的端口列表 ...

  5. 云笔记项目-Spring事务学习_测试准备

    在做云笔记项目的过程中,顺便简单的学习了Spring的事务概念,业务以如果添加笔记,则增加用户星星数目作为例子,引入了事务的概念.类似注册送积分之类的,云笔记项目以增加笔记就送星星来说明事务.具体在添 ...

  6. 解决Windows 10 1803 April 2018 Updatete不能网络共享的问题

    Windows 10升级到1803后便不能网络共享了,现在我用的是Widnows 10 1809 Oct 2018 Update依然存在这个问题. 为了能够共享文件和文件夹需要去windows ser ...

  7. HBase Snapshot原理和实现

    HBase 从0.95开始引入了Snapshot,可以对table进行Snapshot,也可以Restore到Snapshot.Snapshot可以在线做,也可以离线做.Snapshot的实现不涉及到 ...

  8. 247. Strobogrammatic Number II输出所有对称数字

    [抄题]: A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at u ...

  9. 654. Maximum Binary Tree 最大节点劈开,然后左边、右边排序

    [抄题]: Given an integer array with no duplicates. A maximum tree building on this array is defined as ...

  10. linux用户和组管理,/etc/passwd 、/etc/shadow和/etc/group --学习

    一./etc/passwd 和/etc/shadow解释 与用户相关的系统配置文件主要有/etc/passwd 和/etc/shadow,其中/etc/shadow是用户资讯的加密文件,比如用户的密码 ...