Emacs / Magit — how to create and delete repositories on Github

左心房为你撑大大i 提交于 2019-12-04 04:23:53

问题


I am having trouble in Magit with step number 5 and step number 7 to create a new repository. If they exist, what are the interactive function equivalents (please) for steps 5 and 7?

If there are no interactive equivalents, I guess I will need to write my own shell command functions -- unless, of course, someone would like to take a stab at them first. :)


CREATE -- COMMAND-LINE RECIPE

1.  $  touch README.md

2.  $  /usr/local/git/bin/git init

3.  $  /usr/local/git/bin/git add .

4.  $  /usr/local/git/bin/git commit -m "First commit."

5.  $  curl -u 'USERNAME' https://api.github.com/user/repos -d '{"name":"REPO-NAME"}'

6.  $  Enter password:  PASSWORD

7.  $  /usr/local/git/bin/git remote add origin git@github.com:USERNAME/REPO-NAME.git

8.  $  /usr/local/git/bin/git push origin master

NOTE: Steps 5 and 6 can be combined (if desired) as follows: curl -u 'USERNAME':'PASSWORD' https://api.github.com/user/repos -d '{"name":"REPO-NAME"}'


DELETE -- COMMAND-LINE RECIPE

NOTE:  The user token must have delete_repo authority. See doc-string of delete-remote-repo.

curl -X DELETE -H 'Authorization: token xxx' https://api.github.com/repos/USERNAME/REPO-NAME

EDIT (April 13, 2014):  First working draft.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; http://stackoverflow.com/q/23039562/2112489

(defvar git-username nil
 "The username of the Github account.")
(make-variable-buffer-local 'git-username)

(defvar git-password nil
 "The password of the Github account.")
(make-variable-buffer-local 'git-password)

(defvar git-token nil
 "The applicable token of the Github account.")
(make-variable-buffer-local 'git-token)

(defvar repo-name nil
 "The name of the Github repository.")
(make-variable-buffer-local 'repo-name)

(defun create-remote-repo ()
"Execute this function from the root directory of the repo -- e.g., in dired-mode."
(interactive)
  (setq git-username (read-string "Name of User:  "))
  (setq git-password (read-string "Password of User:  "))
  (setq repo-name (read-string "Name of Repository:  "))
  (set-process-sentinel
    (start-process
      "repo-process"
      "*REPO*"
      "/usr/bin/touch"
      "README.md")
    (lambda (p e) (when (= 0 (process-exit-status p))
      (set-process-sentinel
        (start-process
          "repo-process"
          "*REPO*"
          "/usr/local/git/bin/git"
          "init")
        (lambda (p e) (when (= 0 (process-exit-status p))
          (set-process-sentinel 
            (start-process
              "repo-process"
              "*REPO*"
              "/usr/local/git/bin/git"
              "add"
              ".")
            (lambda (p e) (when (= 0 (process-exit-status p))
              (set-process-sentinel 
                (start-process
                  "repo-process"
                  "*REPO*"
                  "/usr/local/git/bin/git"
                  "commit"
                  "-m"
                  "\"First commit.\"")
                (lambda (p e) (when (= 0 (process-exit-status p))
                  (set-process-sentinel
                    (start-process
                      "repo-process"
                      "*REPO*"
                      "/usr/bin/curl"
                      "-u"
                      (concat
                        git-username
                        ":"
                        git-password)
                      "https://api.github.com/user/repos"
                      "-d"
                      (concat
                        "\{\"name\":\""
                        repo-name
                        "\"\}"))
                    (lambda (p e) (when (= 0 (process-exit-status p))
                      (set-process-sentinel 
                        (start-process
                          "repo-process"
                          "*REPO*"
                          "/usr/local/git/bin/git"
                          "remote"
                          "add"
                          "origin"
                          (concat
                            "git@github.com:"
                            git-username
                            "/"
                            repo-name
                            ".git"))
                        (lambda (p e) (when (= 0 (process-exit-status p))
                          (set-process-sentinel 
                            (start-process
                              "repo-process"
                              "*REPO*"
                              "/usr/local/git/bin/git"
                              "push"
                              "origin"
                              "master")
                            (lambda (p e) (when (= 0 (process-exit-status p))
                              (if (eq major-mode 'dired-mode)
                                (revert-buffer))
                              (display-buffer (get-buffer "*REPO*") nil)
                              (message
                                "Repository `%s` has been successfully created!"
                                repo-name) ))))))))))))))))))))))

(defun delete-remote-repo ()
"To delete a repository, the user must have token `delete_repo` authorization.
Visit your `Account Settings` | `Applications`.  Either edit a current token
or generate a new token with `delete_repo` authorization, and write down the
token in a safe place because it is only displayed one time."
(interactive)
  (setq git-username (read-string "Name of User:  "))
  (setq repo-name (read-string "Name of Repository:  "))
  (setq git-token (read-string "Token (with `delete_repo` authority):  "))
  (set-process-sentinel
    (start-process "delete-repo-process" "*DELETE-REPO*"
      "/usr/bin/curl"
      "-X"
      "DELETE"
      "-H"
      (concat
        "Authorization: token "
        git-token
        )
      (concat
        "https://api.github.com/repos/"
        git-username
        "/"
        repo-name))
    (lambda (p e) (when (= 0 (process-exit-status p))
      (display-buffer (get-buffer "*DELETE-REPO*") nil)
        (if (with-current-buffer (get-buffer "*DELETE-REPO*")
              (equal (buffer-size) 0))
          (progn
            (with-current-buffer (get-buffer "*DELETE-REPO*")
              (insert "It looks like everything worked okay."))
            (message "Repository `%s` has been successfully deleted!" repo-name))
          (message "OOOPS!!!  Something went wrong in the deletion process!") )))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

回答1:


Magit does not provide any commands to interact with Githhb. You'll need to write your own command, around call-process and curl, or with gh.el which wraps the Github API.

To add a new remote, type M a in the Magit status buffer.



来源:https://stackoverflow.com/questions/23039562/emacs-magit-how-to-create-and-delete-repositories-on-github

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!