I am having trouble with my bash script to fork a GitHub repo using cUrl.
The gitHub API doc for creating a fork .
I've tried many variations:
curl -u $my_user_name https://api.github.com/repos/forks -d "{\"owner\":\"$upstream_repo_username\",\"repo\":\"$upstream_repo_name\"}"
andcurl -u $my_user_name https://api.github.com/repos/'$upstream_repo_username'/'$upstream_repo_name'/forks
yield the following error: { "message": "Not Found", "documentation_url": "https://developer.github.com/v3" }
In Contrast, the following Creates a new empty github repo, as expected:
curl -u $my_user_name https://api.github.com/user/repos -d "{\"name\":\"$upstream_repo_name\"}"
Any ideas on how to create a fork of a repo from the command line?
I have a bash script that: - creates an empty repo on github with the name of the repo I'm going to clone, - clones a repo from another user locally, and - pushes my cloned repo into the empty repo I created in my github account - sets origin and upstream remotes appropriately
However, this method does not keep a connection within GitHub to the source (forked) repo. I particularly like the convenience of the forked link appearing below my own repo name;-)
The goal is to do all my cloning (and forking) from the command line.
I do not want to open a browser, navigate to the repository I wish to fork, just to access that "Fork" button.. only return back to the command line to finish the process.
Alternatively, can I turn a cloned repo into a forked one from the command line? (ie some command line api command that will re-create those internal github links that forks possess?)
Here is my working bash script:
curl -u $my_user_name https://api.github.com/repos/$upstream_repo_username/$upstream_repo_name/forks -d ''
Example using hard-coded strings instead of bash variables:
curl -u 'SherylHohman' https://api.github.com/repos/octocat/Hello-World/forks -d ''
Notice I moved -d ''
to the end to avoid login errors.
The request requires authentication.
I provide this via curl's -u
parameter (as opposed to using OAuth2).
When I used the -u $my_user_name
option,
I had to move the -d ''
to after the URI
- it resulted in login errors if placed between -u 'username'
and the URI.
It turns out the Main source of errors in my script with bash-syntax.
I had quotation marks surrounding bash variables, that should Not have been there.
(..just Solving a pain point without really knowing bash or curl)
Additionally, as #YuriSchimke pointed out, this particular URI required parameters to be passed in the URI. Passing these options as json is not an option, unlike the URI for Creating a New Blank repo.
Here is why I was baffled over how to send this data in the URI:
Using curl, the default request is a GET .
In curl, POST requests are made by adding the -d
(equivalent to --data
) flag followed by the data to be sent.
I needed to send a POST request.
The format for GitHub API is that GET (and POST eg. CreateRepo ) requests can sometimes send some parameters as json or query strings
NOTE: documentation for GitHub API appears to be slightly incomplete, as I do not see any mention of the API allowing json, only query string.
I suppose in this case, the data is sandwiched between two static URI parts, making it impossible to send as json values.
I was at a loss how to use the -d
flag without data :
If I simply left it off, the API call was processed as a GET.
It returned information about the repo I wanted to fork,
instead of forking the repo to my account.
@YuriSchimke's post gave me that "Ahaa.". Thanks. I'm laughing that it didn't cross my mind. I'm grateful Yuri's made this so obvious! (Thanks Again).
The documentation shows the owner and repo being part of the request URI
curl -d '' https://api.github.com/repos/octocat/Hello-World/forks
https://developer.github.com/v3/repos/forks/
This appears to work fine.
It's much easier to create or fork a repo using the hub command line tool.
Installation instructions: https://github.com/github/hub#installation
It can do much more, but here's how to fork a online repo using the command line.
However, there is conflicting information out there, so it can be a bit confusing.
To fork a online repo owned by somebody else do:
git clone
git clone ssh://git@github.com/keras-users/keras.git
cd keras
hub fork
To fork your own repo that is already hosted on github:
Github doesn't allow you to fork your own repo,
So you need to first create a clone of your own repo on your computer,
Then you can create the cloned repo on the github website
git clone ssh://git@github.com/alpha_beta_gamma/clone_repo.git
git clone clone_repo clone_repo2
cd clone_repo2
hub create
This will create a new repo on GitHub.
git remote set-url https://github.com/username/clone_repo2
git push
I use hub . I have also set git
as alias for it so that I don't have to worry everytime what command comes under git
and what under hub
, so my code looks just like I an running git. Follow installations here .
$ git clone <github_repo>
$ cd <github_repo>
$ git fork
PS: For the above code to work, before executing it in your .bashrc
or .bash_profile
you need to put the following
alias git=hub
I used this command to fork on github enterprise:
curl -vX POST \
https://git.redacted.com/api/v3/repos/$upstream_repo_username/$upstream_repo_name/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
}
I am having trouble with my bash script to fork a GitHub repo using cUrl.
The gitHub API doc for creating a fork .
I've tried many variations:
curl -u $my_user_name https://api.github.com/repos/forks -d "{\\"owner\\":\\"$upstream_repo_username\\",\\"repo\\":\\"$upstream_repo_name\\"}"
andcurl -u $my_user_name https://api.github.com/repos/'$upstream_repo_username'/'$upstream_repo_name'/forks
yield the following error: { "message": "Not Found", "documentation_url": "https://developer.github.com/v3" }
In Contrast, the following Creates a new empty github repo, as expected:
curl -u $my_user_name https://api.github.com/user/repos -d "{\\"name\\":\\"$upstream_repo_name\\"}"
Any ideas on how to create a fork of a repo from the command line?
I have a bash script that: - creates an empty repo on github with the name of the repo I'm going to clone, - clones a repo from another user locally, and - pushes my cloned repo into the empty repo I created in my github account - sets origin and upstream remotes appropriately
However, this method does not keep a connection within GitHub to the source (forked) repo. I particularly like the convenience of the forked link appearing below my own repo name ;-)
The goal is to do all my cloning (and forking) from the command line.
I do not want to open a browser, navigate to the repository I wish to fork, just to access that "Fork" button.. only return back to the command line to finish the process.
Alternatively, can I turn a cloned repo into a forked one from the command line? (ie some command line api command that will re-create those internal github links that forks possess?)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.