3

新しいリポジトリを作成するステップ番号 5 とステップ番号 7 で Magit に問題があります。それらが存在する場合、手順 5 と 7 に相当する対話機能は何ですか?

対話型の同等のものがない場合は、独自のシェル コマンド関数を作成する必要があると思います。:)


作成-- コマンドライン レシピ

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

: 手順 5 と 6 は、(必要に応じて) 次のように組み合わせることができます。 curl -u 'USERNAME':'PASSWORD' https://api.github.com/user/repos -d '{"name":"REPO-NAME"}'


削除-- コマンドライン レシピ

: ユーザー トークンには権限が必要です。delete_repoのドキュメント文字列を参照してくださいdelete-remote-repo

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

編集(2014 年 4 月 13 日): 最初のワーキング ドラフト。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 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!") )))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4

1 に答える 1