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

问题描述 投票:3回答:4

我的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的名称, - 在本地克隆来自另一个用户的repo,并 - 将我的克隆repo推送到我在我创建的空repo中github帐户 - 适当地设置原点和上游遥控器

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

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

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

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

bash curl github fork github-api
4个回答
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选项时, 我不得不将-d ''移到URI之后 - 如果放在-u 'username'和URI之间,则会导致登录错误。

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

另外,正如#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的这么明显! (再次感谢)。


2
投票

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

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

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

这似乎工作正常。


1
投票

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

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

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

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

  1. 使用git clone克隆回购

git clone ssh://[email protected]/keras-users/keras.git

  1. 换成克隆的回购

cd keras

  1. 在线创建fork

hub fork

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

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

  1. 克隆您的仓库到您的计算机

git clone ssh://[email protected]/alpha_beta_gamma/clone_repo.git

  1. 克隆计算机上的repo到另一个repo(也在你的计算机上)

git clone clone_repo clone_repo2

  1. 将目录更改为新的克隆仓库

cd clone_repo2

  1. 在Github上创建克隆的repo

git create

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

  1. 设置远程仓库的URL:

git remote set-url https://github.com/username/clone_repo2

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

git push


0
投票

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

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

PS:为了使上述代码有效,在.bashrc.bash_profile中执行之前,你需要输入以下内容

alias git=hub
© www.soinside.com 2019 - 2024. All rights reserved.