我的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链接?)
答案 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
它可以做更多,但是这里是如何使用命令行分叉在线仓库 但是,有相互矛盾的信息,所以它可以是一个 有点混乱。
分叉其他人拥有的在线仓库:
git clone
git clone ssh://git@github.com/keras-users/keras.git
cd keras
hub fork
分叉已经托管在github上的自己的仓库:
Github不允许你分叉你自己的回购,
因此,您需要首先在计算机上创建自己的repo克隆,
然后你可以在github网站上创建克隆的回购
git clone ssh://git@github.com/alpha_beta_gamma/clone_repo.git
git clone clone_repo clone_repo2
cd clone_repo2
git create
这将在GitHub上创建一个新的repo。
git remote set-url https://github.com/username/clone_repo2
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。
步骤如下:
确实,使用 GitHub CLI 工具是执行 GitHub repo fork 的最简单方法。