直接从Emacs创建Pull请求

iLe*_*ing 3 git emacs elisp magit pull-request

正如任何普通开发人员所应该的那样,我喜欢手动,繁琐和重复的任务.最近我意识到 - 在众多git repos上创建拉取请求占用了我太多的时间.大多数时候你必须一遍又一遍地遵循几乎所有的步骤:

  • 登录到git提供商的Web客户端 - 我们使用Stash
  • 单击,单击,单击,直到找到"创建拉取请求"按钮,然后单击它
  • 选择一个分支 - 通常它是一个刚被推动的分支
  • 选择目标分支 - 大部分时间它是"开发"
  • 添加评论者 - 大部分时间都是完全相同的人
  • 添加说明 - 可选

在某些时候,我开始想知道如果不使用Web客户端我是否可以做到这一切.而且似乎有可能.Stash和Bitbucket有一个api,Github也有一个(虽然它不同 - 第一个使用ssh而后者是http)

现在,这件事可能会简化一些事情,但我觉得它可能会更好.

我使用Emacs(Spacemacs发行版,具体而言).现在我想知道是否有人已经构建了任何与之集成的东西magit,或者我自己可以做到这一点?我的意思是它有多难?脚本应该允许您提交然后推送分支,然后使用给定的默认值创建基于该分支的"开发"的拉取请求.有人做过这样的事吗?

你们可以指点一些elisp利用magit相似功能的插件.也许我能够自己写点东西.

hjp*_*r92 5

马吉特锻造厂

Magit 现在附带forge,用于处理问题/PR/等。在任何 git 伪造中。它开箱即用地支持 github 、 gitlab ,部分支持 bitbucket、gitea、gitweb、cgit、gogs 等。

要创建新的拉取请求(或问题)(来自文档):

' p     (forge-create-pullreq)
Run Code Online (Sandbox Code Playgroud)

C-c C-n[关于“拉取请求”部分] ( forge-create-pullreq)

此命令为当前存储库创建一个新的拉取请求。

' i     (forge-create-issue)
Run Code Online (Sandbox Code Playgroud)

C-c C-n[关于“问题”部分] ( forge-create-pullreq)

此命令为当前存储库创建一个新问题。


旧答案:

有一个 Magit 扩展用于处理 github Pull 请求。您可以在此处浏览该项目

您还应该阅读Magit 项目维护者撰写的这篇文章。

所以我担心目前没有一个包可以满足您的需求。如果您想自己编写,我建议您使用 request.el,然后仅实现您实际需要的 Github api 部分,以避免过度设计。


Mat*_*oie 5

我在github上发现了关于从emacs创建PR的原始帖子. http://endlessparentheses.com/easily-create-github-prs-from-magit.html

这对bitbucket(藏匿)不起作用.但是,对我来说,足够的信息能够合并一个适合我的解决方案.

https://github.com/flamingbear/emacs-config/blob/master/site-lisp/lisp/mhs-magit.el

(defun endless/visit-pull-request-url ()
  "Visit the current branch's PR on Github."
  (interactive)
  (let ((repo (magit-get "remote" (magit-get-remote) "url")))
    (if (string-match "github\\.com" repo)
    (visit-gh-pull-request repo)
  (visit-bb-pull-request repo))))


(defun visit-gh-pull-request (repo)
  "Visit the current branch's PR on Github."
  (interactive)
  (browse-url
   (format "https://github.com/%s/pull/new/%s"
     (replace-regexp-in-string
      "\\`.+github\\.com:\\(.+\\)\\.git\\'" "\\1"
      repo)
     (cdr (magit-get-remote-branch)))))



;; Bitbucket pull requests are kinda funky, it seems to try to just do the
;; right thing, so there's no branches to include.
;; https://bitbucket.org/<username>/<project>/pull-request/new
(defun visit-bb-pull-request (repo)
  (browse-url
   (format "https://bitbucket.org/%s/pull-request/new"
           (replace-regexp-in-string
            "\\`.+bitbucket\\.org:\\(.+\\)\\.git\\'" "\\1"
            repo))))

;; visit PR for github or bitbucket repositories with "v"
(eval-after-load 'magit
  '(define-key magit-mode-map "v"
     #'endless/visit-pull-request-url))
Run Code Online (Sandbox Code Playgroud)