使用命令行使用bash,cURL和GitHub API分叉GitHub存储库

时间:2017-05-31 01:18:27

标签: bash curl github fork github-api

我的bash脚本无法使用cUrl分叉GitHub存储库 creating a fork的gitHub API文档。

我尝试了很多变化:

curl -u $my_user_name https://api.github.com/repos/forks -d "{\"owner\":\"$upstream_repo_username\",\"repo\":\"$upstream_repo_name\"}"


curl -u $my_user_name https://api.github.com/repos/'$upstream_repo_username'/'$upstream_repo_name'/forks

产生以下错误: { "message": "Not Found", "documentation_url": "https://developer.github.com/v3" }

在Contrast中,以下内容按预期创建一个新的空github仓库:
curl -u $my_user_name https://api.github.com/user/repos -d "{\"name\":\"$upstream_repo_name\"}"

有关如何从命令行创建repo的分支的任何想法吗?

我有一个bash脚本:    - 在github上创建一个空的repo,其中包含我将要克隆的repo的名称,    - 在本地克隆来自另一个用户的回购,和    - 将我的克隆仓库推送到我在github帐户中创建的空仓库中    - 适当设置原点和上游遥控器

但是,此方法不会在GitHub中保持与源(分叉)repo的连接。我特别喜欢出现在我自己的回购名称下方的分叉链接的便利性; - )

目标是从命令行执行所有克隆(和分叉)。

我不想打开浏览器,导航到我希望分叉的存储库,只是访问“Fork”按钮..只返回命令行才能完成该过程。

或者,我可以从命令行将克隆的repo变成分叉的repo吗? (即一些命令行api命令将重新创建fork拥有的那些内部github链接?)

6 个答案:

答案 0 :(得分:3)

这是我的工作bash脚本:

curl -u $my_user_name https://api.github.com/repos/$upstream_repo_username/$upstream_repo_name/forks -d ''

使用硬编码字符串而不是bash变量的示例:

curl -u 'SherylHohman' https://api.github.com/repos/octocat/Hello-World/forks -d ''

注意我已将-d ''移至最后以避免登录错误 该请求需要身份验证 我通过curl的-u参数提供此功能(与使用OAuth2相反) 当我使用-u $my_user_name选项时,
我必须在 URI后移动-d '' - 如果置于-u 'username'和URI之间,则会导致登录错误。

使用bash-syntax证明了我脚本中的主要错误来源。
我有关于bash变量的引号,应该不存在。
(..只是在不知道重击或卷曲的情况下解决痛点)

此外,正如#YuriSchimke所指出的,这个特殊的URI需要在​​URI中传递参数。将这些选项作为json传递不是一个选项,与创建新的空白回购的URI不同。

这就是为什么我对如何在URI中发送此数据感到困惑:

使用curl,default request is a GET
curl, POST requests中添加-d(相当于--data)标志,然后添加要发送的数据。

我需要发送POST请求 GitHub API的格式是GET(和POST 例如CreateRepo )请求有时可以send some parameters as json or query strings
注意:GitHub API的文档似乎略有不完整,因为我没有看到任何提及允许json的API,只有查询字符串。
我想在这种情况下,数据夹在两个静态URI部分之间,因此无法作为json值发送。

我不知道如何在没有数据的情况下使用-d标志

如果我只是将其关闭,则API调用将作为GET处理 它返回了关于我想要的仓库的信息,
而不是分叉回购我的帐户。

@YuriSchimke's post给了我“Ahaa!”。谢谢!我笑着说它并没有让我想到。我很感激Yuri的这么明显! (再次感谢)。

答案 1 :(得分:2)

文档显示所有者和repo是请求URI的一部分

curl -d '' https://api.github.com/repos/octocat/Hello-World/forks

https://developer.github.com/v3/repos/forks/

这似乎工作正常。

答案 2 :(得分:1)

使用hub命令行工具创建或分叉repo要容易得多。

安装说明:https://github.com/github/hub#installation

它可以做更多,但是这里是如何使用命令行分叉在线仓库 但是,有相互矛盾的信息,所以它可以是一个 有点混乱。

分叉其他人拥有的在线仓库:

  1. 使用git clone
  2. 克隆回购

    git clone ssh://git@github.com/keras-users/keras.git

    1. 更改为克隆的回购
    2. cd keras

      1. 在线创建分支
      2. hub fork

        分叉已经托管在github上的自己的仓库:

        Github不允许你分叉你自己的回购,
        因此,您需要首先在计算机上创建自己的repo克隆,
        然后你可以在github网站上创建克隆的回购

        1. 将您的回购克隆克隆到您的计算机
        2. git clone ssh://git@github.com/alpha_beta_gamma/clone_repo.git

          1. 将您计算机上的repo克隆到另一个仓库(也在您的计算机上)
          2. git clone clone_repo clone_repo2

            1. 将目录更改为新的克隆存储库
            2. cd clone_repo2

              1. 在Github上创建克隆的回购
              2. git create

                这将在GitHub上创建一个新的repo。

                1. 设置远程仓库的URL:
                2. git remote set-url https://github.com/username/clone_repo2

                  1. 将本地仓库推送到在线仓库
                  2. git push

答案 3 :(得分:0)

我使用hub。 我还将git设置为别名,这样我就不用担心每次git下的命令以及hub下的命令,所以我的代码看起来就像我正在运行饭桶。关注安装here

$ git clone <github_repo>
$ cd <github_repo>
$ git fork

PS:要使上述代码生效,在.bashrc.bash_profile执行之前,您需要提供以下内容

alias git=hub

答案 4 :(得分:0)

我使用此命令在github企业curl -vX POST https://git.redacted.com/api/v3/repos/<org-to-fork-from>/<repo-to-fork>/forks?access_token=<api-token> -d @gh-fork.json --header "Content-Type: application/json"上派生

gh-fork.json只是

{ "organization": "org-to-fork-to", "description": "", "homepage": "https://git.redacted.com", "private": false }

答案 5 :(得分:0)

从命令行或特别是 BASH 执行 fork of a GitHub repo 的最简单方法是使用 GitHub CLI 工具,它允许您完全避免使用 cURL。

步骤如下:

  1. 安装 GitHub CLI 工具。
  2. 使用 gh CLI 命令登录。
  3. 使用 gh CLI 工具执行存储库 URL 的命令行 GitHub 分支。

Fork GitHub URL

确实,使用 GitHub CLI 工具是执行 GitHub repo fork 的最简单方法。