2017-05-31 160 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!」。謝謝!我在笑,它並沒有跨過我的腦海。我很感激尤里的做法如此明顯! (再次感謝)。