2017-05-31 164 views
2

我遇到了使用cUrl分叉GitHub repo的bash脚本的问题。
gitHub API文档creating a fork使用命令行使用bash,cURL和GitHub API分叉GitHub repo

我已经尝试了许多变化:

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" }

相比之下,下面创建一个新的空GitHub库,如预期的那样:
curl -u $my_user_name https://api.github.com/user/repos -d "{\"name\":\"$upstream_repo_name\"}"

有关如何从命令行创建回购叉的任何想法?

我有一个bash脚本是: - 克隆来自其他用户的本地回购,并 - - 与回购我会克隆, 的名字在github上创建一个空的回购协议推我的克隆回购成在我的github账户中创建的空回购 - 适当地设置原点和上游远程

但是,此方法不会将GitHub内的连接保留到源(分叉)回购。我特别喜欢分支链接出现在我自己的回购股票名称下方的便利性;-)

目标是从命令行执行所有我的克隆(和分支)操作。

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

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

回答

2

这是我工作的bash脚本:使用硬编码字符串,而不是bash的变量

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

例子:

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语法。
我有围绕bash变量的引号,应该不会在那里。
(..just解决痛苦点而不真正知道bash或卷曲)

此外,正如#YuriSchimke指出的,这个特定的URI需要参数在URI中传递。将这些选项作为json传递并不是一种选择,与创建新空白的repo的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文档看起来稍微不完整的,因为我没有看到API允许JSON的任何提及,只查询字符串。
我想在这种情况下,数据夹在两个静态URI部分之间,使得无法发送为json值。

我不知如何使用-d标志没有数据

如果我只是离开它关闭,API调用被处理为GET。
它返回的信息我想回购叉,
代替分叉回购到我的帐户。

@YuriSchimke's post给了我“Ahaa!”。谢谢!我在笑,它并没有跨过我的脑海。我很感激尤里的做法如此明显! (再次感谢)。