精华内容
下载资源
问答
  • idea设置合并提交的代码
    2019-07-25 11:19:05

     rebase current onto Selected

     

    更多相关内容
  • ).replace("\n", "") #合并的目标分支 targetBranch = str(sys.argv[4]).replace("\n", "") #代码审核的人名(登录名) codeReviewer = str(sys.argv[5]).replace("\n", "") #合并请求的标题,因为这个值是commit ...
    • 环境配置

    1. Ubuntu版本:Ubuntu 20.04.2 LTS
    2. Jenkins版本:2.303.3
    3. Gogs版本:0.12.3
    • 安装Jenkins必要插件

          1.安装Generic Webhook Trigger Plugin插件,方便监听Gogs的webhook。

          2.安装Python Plugin插件,方便在构建时执行shell脚本(间接执行python脚本)

    • 构建一个git push能触发的jenkins任务

    • 新建Jenkins任务并配置参数。

            在Jenkins首页,点击“新建任务”,输入任务名称,一般用“项目名+操作命名”,例如“project_name-push”表示仓库在push时触发此任务,点击“构建一个自由风格的软件项目”,然后确定即可创建一个新的任务,进入到任务配置界面,到”构建触发器”项的设置,勾选“Generic Webhook Trigger”,在“Post content parameters中,设置Variable为ref,Expression设置为@.ref ,如下图所示:

    然后在Header parameters设置中,设置Request header为X-Gogs-Event,在Request parameters设置Token,这个token在gogs的web hook中有用。如下图所示:

    在Optional filter设置项,设置任务相应的事件,此处只响应仓库master分支的push事件,可根据实际情况修改。

    具体设置为,Expression设置成:push_refs/heads/master,Text设置成:$x_gogs_event_$ref。如下图所示:

    最后保存。

    • 设置Gogs仓库Web 钩子。

            Gogs登录后,在项目代码界面,点击右上角的“仓库设置”—“管理Web钩子”—“添加新的Web钩子”,选择“Gogs”类型。在配置界面,推送地址设置成:http://jenkins_ip:port/generic-webhook-trigger/invoke?token=xxx

    将地址中的jenkins_ip:port和xxx替换为实际使用的jenkins地址和端口,以及在上述中jenkins任务中设置的Token。数据格式为:application/json,密钥文本不填,web钩子时间设置成:只推送push事件,勾选是否激活,最后点击“添加Web钩子”按钮。配置项如下图所示:

    • Ubuntu配置Python运行环境

      • 安装Python脚本运行需要的selenium库和chromedriver

            Ubuntu自带Python 3.8.10,只要安装脚本运行需要的的Selenium库和谷歌浏览器以及chromedriver即可。

    1、安装chrome,我安装的版本是95.0.4638.69,以下命令即可安装最新版,命令如下

    sudo apt-get install libxss1 libappindicator1 libindicator7

    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

    sudo dpkg -i google-chrome*.deb

    google-chrome --version

    当查看版本没问题,说明安装成功了。

    2、下载chromedriver

    #执行如下命令(第一条用于获取最新版本号,第二条用于下载):LATEST=$(wget -q -O - http://chromedriver.storage.googleapis.com/LATEST_RELEASE)wget http://chromedriver.storage.googleapis.com/$LATEST/chromedriver_linux64.zip# 解压unzip chromedriver_linux64.zip# 修改权限chmod +x chromedriver# 可以移动driver 省的指定位置sudo mv chromedriver /usr/bin/# 查看版本./chromedriver --version

    如果最后一条命令显示如下说明没问题了。

    ChromeDriver 95.0.4638.69 (6a1600ed572fedecd573b6c2b90a22fe6392a410-refs/branch-heads/4638@{#984})

    3、安装selenium

    1) 安装python3-pip,命令: sudo apt install python3-pip;

    2) 安装selenium,命令:pip install selenium

    若提示ERROR: pyopenssl 21.0.0 has requirement cryptography>=3.3, but you'll have cryptography 2.8 which,则去https://pypi.org/simple/pyopenssl/地址下载pyOpenSSL-21.0.0-py2.py3-none-any.whl文件,cd到文件目录,并执行以下命令安装:

    pip install pyOpenSSL-21.0.0-py2.py3-none-any.whl

    • 测试测试selenium库和chromedriver是否正常工作

          输入以下命令:

          python3 #进入python命令行模式

          from selenium import webdriver #导入selenium的webdriver库

          driver = webdriver.Chrome() #使用谷歌浏览器,会自动打开谷歌浏览器

          driver.get("https://www.baidu.com/") #打开网页,浏览器打开百度首页

          print(driver.title) #显示网页标题,即“百度一下,你就知道”

    以上命令正确执行后,表示selenium库正确安装,且chromedriver正常使用。

    • Jenkins配置执行python脚本需要的参数

    1. 任务参数修改。

            打开上述第三点中创建的jenkins任务,并进入配置界面,在General选项卡中,勾选“参数化构建过程”,添加五个选项参数,分别是projectName、projectOwner、sourceBranch、targetBranch、codeReviewer,表示仓库名称、仓库拥有者名(创建仓库时的 “拥有者”名称)、要合并的源分支,合并的目标分支、审核者(合并请求中的指派成员),例如projectName配置如下图所示。

    为了让合并请求的标题和内容都设置成仓库的提交信息,在“构建触发器”—Post content parameters中再添加两个参数Variable分别是pullRequestTitle、pullRequestContent,Expression都设置成$.commits[0].message,格式为:JSONPath,表示合并请求标题、合并请求内容(创建者的评论),配置如下图所示。

    在“构建”选项卡中增加构建步骤,选择增加执行shell的步骤,配置如下图所示:

    内容:python3 /home/当前用户名/gogs/AutoCreateGogsPullRequest.py $projectName $projectOwner $sourceBranch $targetBranch $codeReviewer "$pullRequestTitle" "$pullRequestContent" 192.168.197.129:3303

    命令共8个参数,每个参数之间空格分开,若是参数值有空格,则用双引号将字符串引起来,最后的地址为gogs的访问地址,参数顺序不能变,参数值中最好不要有换行。

    2. python脚本执行相关的修改。

    1) 将脚本AutoCreateGogsPullRequest.py文件放到/home/当前用户名/gogs/目录下。

    2) 修改脚本文件权限,使用Gogs的ubuntu用户需要有执行权限,执行命令:sudo chmod -R 777 /home/当前用户名/gogs/AutoCreateGogsPullRequest.py。

    3) 为了防止jenkins在执行脚本时,报找不到python的第三方库错误:ModuleNotFoundError: No module named 'selenium',原因是jenkins的用户是jenkins,python库是当前用户,属于权限问题导致,需要修改python安装的第三方包的用户和所属组,执行命令:sudo chown jenkins:jenkins /home/gerrit/.local/lib/python3.8/site-packages,其中site-packages是python第三方所在位置,注意:修改site-packages用户后,在系统命令行执行脚本将出现找不到模块问题。

    4) 确保AutoCreateGogsPullRequest.py文件中chromedriver path,正确,如下图所示,若按本文章安装的chromedriver,则无需修改。这么设置是为了防止jenkins执行脚本时出现:selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed.错误。

    5.修改脚本中登录函数中的用户名和密码,该用户有管理员权限,有创建所有仓库的合并请求权限 。

    3. AutoCreateGogsPullRequest.py代码。

    import webbrowser
    import time
    import sys
    import os
    
    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    from selenium.common.exceptions import UnexpectedAlertPresentException
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.action_chains import ActionChains
    
    #判断是否已经登录
    def isLogin(driver):
    	if driver is not None :
    		try:
    			driver.find_element(By.ID, "user_name")
    			print("isLogin() return false")
    			return False
    		except NoSuchElementException as e:
    			print("isLogin() return true")
    			return True
    	return False
    #去登录 drive 在登录界面
    def login(drive):
    	if driver is not None :
    		try:
    			#填登录的用户名,带管理员权限
    			driver.find_element(By.ID, "user_name").send_keys(u"admin")
    			#填登录的密码
    			driver.find_element(By.ID, "password").send_keys(u"12345678")
    			# name带空格,则空格用.代替即可,全名为:ui green button
    			# see https://blog.csdn.net/yunmengdan/article/details/111614913
    			driver.find_element(By.CLASS_NAME, "ui.green.button").click()
    			print("Login operate finished")
    		except:
    			print("login operate error")
    	return
    
    #项目名
    projectName = str(sys.argv[1]).replace("\n", "")
    #项目拥有者
    projectOwner = str(sys.argv[2]).replace("\n", "")
    #要合并的源分支
    sourceBranch = str(sys.argv[3]).replace("\n", "")
    #合并的目标分支
    targetBranch = str(sys.argv[4]).replace("\n", "")
    #代码审核的人名(登录名)
    codeReviewer = str(sys.argv[5]).replace("\n", "")
    #合并请求的标题,因为这个值是commit message,带\n,所以必须替换掉制表符\n,否则会出现selenium.common.exceptions.UnexpectedAlertPresentException:错误
    pullRequestTitle = str(sys.argv[6]).replace("\n", "")
    #合并请求的内容,因为这个值是commit message,带\n,所以必须替换掉制表符\n,否则会出现selenium.common.exceptions.UnexpectedAlertPresentException:错误
    pullRequestContent = str(sys.argv[7]).replace("\n", "")
    #gogs服务器地址
    gogsUrl = str(sys.argv[8]).replace("\n", "")
    #若driver send_keys 方法出现莫名其妙的错误,则可能是send_keys参数中的值带特殊符号,比如\n
    
    #创建合并请求的url
    newPullRequestUrl = "http://" + gogsUrl + "/" + projectOwner + "/" + projectName + "/compare/" + targetBranch + "..." + projectOwner + ":" + sourceBranch
    print("newPullRequestUrl=" + str(newPullRequestUrl) + ", pullRequestTitle=" + pullRequestTitle + ", pullRequestContent=" + pullRequestContent)
    
    #解决selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed.
    #参照 https://www.cnblogs.com/jingzaixin/p/11570444.html
    chrome_options = webdriver.ChromeOptions()   #为驱动加入无界面配置
    chrome_options.add_argument('--headless')   #–headless”参数是不用打开图形界面
    chrome_options.add_argument('--no-sandbox')  #“–no - sandbox”参数是让Chrome在root权限下跑
    #chrome_options.set_capability("unhandledPromptBehavior","accept")
    path = r"/usr/bin/chromedriver"  #配置驱动路径
    print("chromedriver path:%s" % path)
    driver = webdriver.Chrome(executable_path=path,chrome_options=chrome_options)
    driver.maximize_window()   #窗口最大化
    
    
    try:
    	# 打开新建合并请求界面,若用户未登录,会自动跳转到登录界面
    	driver.get(newPullRequestUrl)
    	isLogin = isLogin(driver)
    	if isLogin == False:
    		login(driver)
    	print("user has login")
    	# 登录后
    	# 判断是否已经有合并请求,或者两分支是否已经同步
    	try:
    		# 名字全词匹配,使用这种方法,否则会按文档顺序去找到第一个包含名字的元素
    		driver.find_element(By.XPATH, "//*[@class='ui segment']")
    		print("has created pull request, can not new a pull request")
    		#关闭浏览器
    		driver.close()
    		# 已经有合并请求,或不需要合并操作,则不做其他操作,直接退出
    		sys.exit(0)
    	except NoSuchElementException as e:
    		print("no has created pull request, can new a pull request")
    	# 设置合并请求的“标题”
    	driver.find_element(By.NAME, "title").send_keys(pullRequestTitle)
    	# 设置“内容编辑”的内容
    	driver.find_element(By.XPATH, "//*[@class='ui bottom attached active tab segment']/textarea").send_keys(pullRequestContent)
    	# 点击“指派的成员”按钮,弹出可选的评审人员(必须要此步骤,否则下一步的c.click()操作将失败)
    	#driver.find_element(By.XPATH, "//*[@class='ui  floating jump select-assignee dropdown']/span").click()
    	selectReviewerParent = driver.find_element(By.XPATH, "//*[@class='ui  floating jump select-assignee dropdown']")
    	#selectReviewerParent = driver.find_elements(By.CLASS_NAME, "select-assignee")[0]
    	selectReviewerParent.find_element(By.XPATH, "./span").click()
    	# 找到可以评审的成员列表控件的父元素
    	listParent = selectReviewerParent.find_element(By.XPATH, "./div")
    	# 找到所有可评审成员
    	childrens = listParent.find_elements(By.XPATH, "./*")
        #控件操作类
    	actionChainsDriver = ActionChains(driver)
    	for c in childrens:
    		#标签中夹着的内容,包含可用评审人员名称
    		divInnerContent = str(c.get_attribute("innerHTML"))
    		#print("c innerHTML=" + divInnerContent)
    		# 跟想要的评审人员名字对比,相同,则选择。
    		if divInnerContent.find(codeReviewer) >= 0:
                #移动到要选择的审核者位置
    			actionChainsDriver.move_to_element(c)
    			actionChainsDriver.perform()
    			c.click()
    	# 点击 “创建合并请求”按钮
    	driver.find_element(By.XPATH, "//*[@class='ui green button']").click()
    	print("create pull request finished")
    except NoSuchElementException as e:
    	print("create pull request error=" + e.msg)
    #关闭浏览器
    driver.close()
    sys.exit(0)

    2021.11.15,修改python代码,解决有时候无法选择审核者问题。 

    参考文章

    https://blog.csdn.net/xiaosongluo/article/details/80151474

    https://www.jerrycoding.com/article/linux-selenium/

    https://www.cnblogs.com/jingzaixin/p/11570444.html

    https://blog.csdn.net/longhtml/article/details/102861343

    展开全文
  • gitlab-review 强制同行代码审查以合并 gitlab 中的合并请求
  • VS Code Pull Request Provider for GitHub
  • Gitlab拉取_推送代码,提交合并请求.docx
  • Gitlab合并请求相关流程

    千次阅读 2021-06-22 14:00:19
    最近仓库以及完成切换,大家都已经用上了新的Gitlab,但是在合并分支,发起合并请求的时候有些疑惑,这里将对此进行解释说明、 入口: 仓库控制台的这两个地方都有合并请求入口。 点击 新合并...

     

    入口:

     

     

    仓库控制台的这两个地方都有合并请求入口。

    点击 新合并请求

    源分支与合并分支:

     

    Source branch: 源分支,代表想要合并的分支

    Target branch:目标分支,代表被合并的分支

    合并请求将使 Source branch -》合并至 -》Target branch

    新建画面

     

     

    处理合并请求

     

    常见问题:

    1. 出现冲突怎么办:
      1. 首先每次在发起合并请求前,先rebase一下你的源分支,你的开发分支随时更新base分支。(请注意rebase和marge的区别)
      2. 如出现冲突,新建合并请求时,会出现无法合并的情况,需要线下解决,参考a
    2. 合并请求的受理人需要注意,若源分支落后目标分支,请不要进行合并,保证源分支需要rebase。
    3. 如果出现情况,需要修改代码后重新合并请求。这里可以不用关闭原来的合并请求,当分支重新修改完成后,合并请求将会随之更新

     

    展开全文
  • 合并请求集成是一个插件,可帮助您直接在IDE中进行代码审查。 你可以做什么: 过滤分配给您的合并请求,等待您的批准等 检查管道状态和批准状态。 选择并查看1个或所有提交 进行代码检查,直接在IDE中使用Diff ...
  • 但是,Gitlab git集成和代码审查的合并请求远远优于Redmine。 但是,使问题和合并请求保持同步是一场噩梦。 到现在... 引入了mr-issue,这是一个Gitlab Webhook侦听器,它能够查找合并请求正文中引用的问题,然后...
  • Gitlab合并请求支持自述文件 借助Gitlab合并请求支持,您可以轻松地遵循GitLab MR上的支持或批准。 扩展的树形视图将显示您在实例创建的MR上的投票(或批准)。 产品特点 添加GitLab实例 删除GitLab实例 在树状视图...
  • 最近在思考前端js文件该如何合并,当然不包括不能合并文件,而是我们能合并的文件,想了想应该也只有三种方式。...这种方式就是不管三七二十一,所有js合并成一个大文件,所有页面都引用它,即使某些代码可能不
  • Gitlab合并代码的几种情况

    千次阅读 2019-03-27 23:50:52
    开发者权限提交代码并请求合并如下图新建一个 Issue点击提交Issue创建在问题界面点击 Create merge request创建一个合并请求Issue界面点击之后...

    开发者权限提交代码并请求合并

    如下图新建一个 Issue点击提交

    640?wx_fmt=jpeg
    Issue创建

    在问题界面点击 Create merge request创建一个合并请求

    640?wx_fmt=jpeg
    Issue界面

    点击之后会跳转至 合并请求页面

    640?wx_fmt=jpeg
    合并请求页面

    正常的操作应该是把新建的分支 7-_1拉到本地然后修改后推送到远端

    640?wx_fmt=jpeg
    本地合并方式

    为了方便起见,直接使用 在Web IDE中打开

    640?wx_fmt=jpeg
    web Ide修改
    640?wx_fmt=jpeg
    提交请求
    在修改了这个新建的分支之后回到 合并请求页面就可以看到其中的内容发生了改变

    640?wx_fmt=jpeg
    分支提交之后的页面

    之前是询问是否要创建一个新文件,现在直接就是问你这不是已经完成了这个半成品了,点击 Resolve WIP status提示信息就会变成已可自动合并。 请具有仓库写入权限的用户来合并此请求

    640?wx_fmt=jpeg
    开发者看到的页面

    下面登录管理员账户查看,可以看到合并按钮已经变成绿色了

    640?wx_fmt=jpeg
    管理员看的的页面

    两个合并先后修改了文件不同位置

    这个情况比较简单,正常的合并操作也不会出现冲突,所以不赘述了。

    两个合并先后修改了文件同一个位置

    我们创建两个问题单:两个合并先后修改了文件同一个位置_1  和两个合并先后修改了文件同一个位置_2并为他们分别拉取分支,创建合并请求

    640?wx_fmt=jpeg
    创建两个合并请求
    首先在第一个里面修改里面的一个文件并完成提交

    640?wx_fmt=jpeg
    修改1号请求
    640?wx_fmt=jpeg
    提交一号请求

    同理,在第二个页面也修改第五行

    640?wx_fmt=jpeg
    修改2号请求
    然后管理员进行合并的同意

    先同意提交1

    640?wx_fmt=jpeg
    管理员同意一号请求

    然后查看提交2

    640?wx_fmt=jpeg
    管理员查看2号请求

    我们就可以看到出现冲突了,可以本地合并

    640?wx_fmt=jpeg
    本地合并方式

    也可以直接在页面进行解决冲突

    640?wx_fmt=jpeg
    页面选择进行解决合并

    同意哪个改哪个,如果都不同意就自己改

    640?wx_fmt=jpeg
    自行解决

    去除多余的 〈〈〈符号就好了

    640?wx_fmt=jpeg
    合并方法
    640?wx_fmt=jpeg
    正常提交

    之后就可以正常合并了

    展开全文
  • GitLab——提交合并请求

    万次阅读 2019-06-18 18:38:07
    选中要提交合并请求的项目,进入此页面 见上图,右上角有个蓝色的按钮(Create merge request),翻译成中文就是 创建合并请求,点击进入下一个页面 title内容填写自己项目修改的内容标题就可以了,随意 咱们是要...
  • SAP 合并请求

    千次阅读 2020-09-16 12:05:11
    多个有先后顺序的传输请求可以合并传输,SAP会自动处理顺序 TCODE: SE03 ->合并对象清单 选择要合并请求号->执行 执行合并->创建新的请求
  • 本质上,如果您有大量不相关的代码路径尝试一次访问相同的资源,它可以节省资源。 一个示例用例是一个应用程序,它产生许多并发网络请求,这些请求可能正在访问相同的URL。 request-once使您无需考虑批处理即可优化...
  • 高并发场景下请求合并(批量)

    千次阅读 2022-04-11 09:53:41
    目录前言技术手段代码实现查询用户的代码合并请求的实现控制层调用模拟高并发查询的代码测试效果要注意的问题使用队列的超时解决Java 8 的 CompletableFuture 并没有 timeout 机制核心代码小结代码地址参考 ...
  • GitLab合并请求

    万次阅读 2019-03-25 18:19:37
    1、 进到项目里面,New merge request 2、选择源分支和目标分支,然后单击Compare branches and continue 按钮 3、点击Merge合并请求
  • 在Git-Fork-请求PR 在github页面上, 点击fork按钮, 将B的项目拷贝一份到A自己的代码仓库中. 克隆A自己的代码仓库到本地. $ git clone https://github.com/A/A.git 将B的项目作为最新代码的参考标准(upstream ...
  • 主要介绍了vue中的axios和slot,文中代码非常详细,对大家的工作学习有所帮助,感兴趣的朋友可以参考下
  • git 请求合并和审核请求合并

    千次阅读 2020-10-04 17:31:58
    4. 等待审批合并请求,审批人会看到有合并申请 5. 点击标识1 查看合并请求 6. 标识1 合并并提交, 里面有 “Merge” 直接点击就可以合并提交。标识2查看详情。由于是项目不好直接截图,望谅解! ...
  • 合并请求助手 用于GitLab合并请求的桌面工具 简短的 它是一个桌面工具,用于管理git和GitLab,以支持从GitLab Web UI进行的合并请求审核。 特征 Beyond Compare 3支持:启动差异工具并使用热键报告所选代码行的新...
  • 主要介绍了用Promise解决多个异步Ajax请求导致的代码嵌套问题(完美解决方案),需要的朋友可以参考下
  • 上传代码2.1 拉取代码2.2 查看当前状态2.3 提交代码到本地缓存区2.4 提交代码到本地git库2.5 提交代码到远程仓库创建分支总结 git提交代码的一套流程 我们经常听过github和gitee,诸如此类的代码托管平台,他们实际...
  • php合并js请求的例子

    2020-12-19 11:38:19
    代码就会的小例子:php合并js请求复制代码 代码如下://页面保存为js.php//前台请求范例http://localhost/js.php?f=1,2//请求1.js,2.js两个文件<?PHPheader(“Content-Type:application/x-javascript”);header...
  • 主要介绍了详解git合并冲突解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 请求合并

    千次阅读 2019-08-27 23:28:26
    但有时候,请求更多的是单个接口,不能够直接调用批量接口,如果这个接口是高频接口,对其做请求合并就很有必要了。比如电影网站的获取电影详情接口,APP的一次请求是单个接口调用,用户量少的时候请求也不多,完全...
  • 使用gitlab网页将代码合并分支

    千次阅读 2020-12-17 12:19:52
    下面将dev分支代码合并至master 1.点击request merge 2.源分支为当前分支,目标分支默认为master,确认无误,点击提交 3.提交后出现下面的界面,点击Merge进行合并
  • git 提交merge request合并请求

    千次阅读 2021-09-24 10:11:52
    1. 创建一个新分支,用来修改代码 创建完成后可以在新分支修改bug。代码修改完成后开始提交: 进入gitlab界面 点击右上角mergeRequests,进入到merge请求视图 点击创建新的merge request 分别待提交...
  • 提交你的说明,选择合并的分支即可,剩下等待合并。   image 结尾 开源的魅力就在于协同工作,提高效率。   作者:梁同桌 链接:...
  • 1、拉取git代码 2、更新git代码 添加git代码地址 更新代码 3、上传git代码 上传到本地仓库 提交到git上 ...4、请求合并代码 ...选择刚提交的代码,选择目标分支(从派生代码合并到主分支) ...
  • 主要介绍了c#使用Socket发送HTTP/HTTPS请求的实现代码,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 210,807
精华内容 84,322
关键字:

代码合并请求