是否可以在不打开浏览器的情况下从CLI在GitHub上创建远程仓库?


347

我创建了一个新的本地Git存储库:

~$ mkdir projectname
~$ cd projectname
~$ git init
~$ touch file1
~$ git add file1
~$ git commit -m 'first commit'

是否有任何git命令创建一个新的远程仓库,并将提交从此处推送到GitHub?我知道启动浏览器并创建一个新存储库没什么大不了的,但是如果有一种方法可以从CLI做到这一点,我会很高兴的。

我阅读了大量文章,但没有发现提及如何使用git命令从CLI创建远程仓库的文章。蒂姆·卢卡斯(Tim Lucas)的不错的文章是建立新的远程git存储库,这是我发现的最接近的内容,但是GitHub不提供shell访问权限

Answers:


214

您可以使用GitHub API通过命令行创建GitHub存储库。检出存储库API。如果您向下滚动大约三分之一,则会看到标题为“创建”的部分,该部分说明了如何通过API创建存储库(右上方的部分也说明了如何使用API​​生成存储库)。显然您不能使用git它,但是您可以通过命令行使用诸如之类的工具来实现curl

在API之外,无法通过命令行在GitHub上创建存储库。如您所述,GitHub不允许外壳访问等,因此,除了GitHub API外,创建存储库的唯一方法是通过GitHub的Web界面。


72
谢谢一堆mipadi!不了解GitHub API。对于其他所有人,同样的问题,这基本上是我做的:curl -F 'login=username' -F 'token=API Token' https://github.com/api/v2/yaml/repos/create -F name=reponame。您可以在GitHub站点上找到您的API令牌,单击帐户设置,查找管理信息API令牌(长32个字符的字符串)。
anddoutoi 2010年

1
看来这已经过时了,至少我在那里找不到API令牌。
约阿希姆·布雷特纳

12
API版本3语法通过@bennedich stackoverflow.com/a/10325316/305633
JiminyCricket,2012年

2
@cseder:Git不需要这个来创建一个仓库,但是在GitHub上就可以了。我也不认为Mercurial允许您通过推送到不存在的仓库来在远程服务器上创建仓库。
mipadi 2014年

5
@cseder:问题是询问是否可以通过GitHub API在GitHub上创建远程存储库,而不是如何创建新存储库并推送到GitHub上的现有存储库。
mipadi 2014年

321

github API v3的CLI命令(替换所有CAPS关键字):

curl -u 'USER' https://api.github.com/user/repos -d '{"name":"REPO"}'
# Remember replace USER with your username and REPO with your repository/application name!
git remote add origin git@github.com:USER/REPO.git
git push origin master

43
第一条命令的小问题是您将GitHub密码保留在~/.bash_history。我建议替换-u 'USER:PASS'-u 'USER',然后curl会交互地询问您密码。
ivanzoid

20
要使回购协议从一开始就私有,请使用:curl -u 'USER' https://api.github.com/user/repos -d '{"name":"REPO", "private":"true"}'
Joe Fletcher

3
我写了一个bash脚本来保存我们所有的输入内容。接受用户输入并具有明智的默认设置:gist.github.com/robwierzbowski/5430952
RobW 2013年

3
将其添加为git别名的方法如下:git config --global alias.gh-create '!sh -c "curl -u \"USERNAME\" https://api.github.com/user/repos -d \"{\\\"name\\\":\\\"$1\\\"}\"" -'
Robin Winslow 2013年

13
别忘了您可以生成访问令牌并以这种方式使用它:curl https://api.github.com/user/repos?access_token=myAccessToken -d '{"name":"REPO"}'。:-)
尼卡比曹

69

这可以通过以下三个命令来完成:

curl -u 'nyeates' https://api.github.com/user/repos -d '{"name":"projectname","description":"This project is a test"}'
git remote add origin git@github.com:nyeates/projectname.git
git push origin master

(已针对v3 Github API更新)


这些命令的说明...

创建github仓库

    curl -u 'nyeates' https://api.github.com/user/repos -d '{"name":"projectname","description":"This project is a test"}'
  • curl是用于检索URL并与URL进行交互的unix命令(上面也适用于Mac)。通常已经安装了。
  • “ -u”是curl参数,用于指定用于服务器身份验证的用户名和密码。
    • 如果仅提供用户名(如上例所示),curl会提示您输入密码。
    • 如果您不想输入密码,请参阅Authentication上的githubs api文档。
  • “ -d”是curl参数,允许您随请求发送POST数据
  • “名称”是唯一所需的POST数据;我也想加入“说明”
  • 我发现最好用单引号''引用所有POST数据。

定义推送到的位置

git remote add origin git@github.com:nyeates/projectname.git
  • 在github上添加已连接(远程)回购的位置和存在的定义
  • “ origin”是git使用的默认名称,表示来源
    • 从技术上讲不是来自github,但是现在github repo将成为记录的来源
  • “ git@github.com:nyeates”是一个ssh连接,它假定您已经与github设置了受信任的ssh密钥对。

将本地仓库推送到github

git push origin master
  • 从主本地分支推送到源远程(github)

54

如果您安装了defunkt出色的集线器工具,那么它将变得像

git create

用作者的话来说,“ 中心是git的命令行包装,可以使您在GitHub上更好。


3
我爱hubhub-或hub通常是git...的别名也很有用,git fork它为pwd您所在的克隆仓库的仓库创建仓库的分支。
亚历克斯·格雷

2
这个工具很棒!它会为您存储身份验证令牌,因此您不必一遍又一遍地输入密码。还要检查github的ZSH插件。
多利安

19

简单步骤(使用git+ hub=> GitHub):

  1. 安装HubGitHub)。

    • OS X: brew install hub
    • 围棋go get github.com/github/hub
    • 否则(也要执行):

      git clone https://github.com/github/hub.git && cd hub && ./script/build
      
  2. 转到您的存储库或创建一个空的:mkdir foo && cd foo && git init

  3. 运行:hub create,它将首次询问您有关GitHub凭据的信息。

    用法: hub create [-p] [-d DESCRIPTION] [-h HOMEPAGE] [NAME]

    例: hub create -d Description -h example.com org_name/foo_repo

    Hub首次需要访问API并将其交换为OAuth令牌时,会提示输入GitHub用户名和密码,并将其保存在~/.config/hub

    要显式命名新存储库,请传入NAME,可以选择传入ORGANIZATION/NAME表单,以在您所属的组织下创建。

    使用-p,创建一个私有存储库,使用 -d-h设置存储库的描述和主页。URL

    为避免提示,请使用GITHUB_USERGITHUB_PASSWORD环境变量。

  4. 然后像往常一样提交并推送或检查hub commit/ hub push

要获取更多帮助,请运行: hub help

另请参阅:使用 GitHub上的命令行导入Git存储库


如何设置GITHUB_USER和GITHUB_PASSWORD环境变量?
卡巴斯尔2015年

1
可能您可以导出它们,请参阅:GH#245
kenorb

1
对我来说很棒,请注意Machuts也提供“ hub”。
tiktak

我想这就是我想要的!:)
TᴀʀᴇǫMᴀʜᴍᴏᴏᴅ

11

有一个官方的github gem我认为可以做到这一点。我将在学习过程中尝试添加更多信息,但是我只是现在才发现该宝石,所以我还不了解。

更新:设置完我的API密钥后,我可以通过create命令在github上创建一个新的仓库,但是我不能使用该create-from-local命令,该命令应该获取当前的本地仓库,并在github上创建一个相应的远程服务器。

$ gh create-from-local
=> error creating repository

如果有人对此有所了解,我很想知道我在做错什么。已经存在问题

更新:我最终确实做到了这一点。我不确定如何重现此问题,但我只是从头开始(删除了.git文件夹)

git init
git add .emacs
git commit -a -m "adding emacs"

现在,该行将创建远程仓库,甚至将其推送到该仓库,但是不幸的是,我认为我无法指定所需的仓库名称。我希望它在github上被称为“ dotfiles”,但是gh gem仅使用当前文件夹的名称,因为我在主文件夹中,所以使用的是“ jason”。(我添加了一张票,询问所需的行为)

gh create-from-local

另一方面,此命令确实接受用于指定远程存储库名称的参数,但它是用于从头开始新项目的,即调用此命令后,您将获得一个跟踪本地存储库的新远程存储库。在相对于当前位置的新创建的子文件夹中,两个文件夹均具有指定的名称作为参数。

gh create dotfiles

3
这个项目一直没有它的任何工作了几年,并没有为我工作,并且,暗示这里,已经死了。如答案中所建议,它显然已被集线器工具所取代。
jameshfisher

9

使用Bash Shell快速创建远程存储库

每次创建存储库时都要键入完整的代码很麻烦

curl -u 'USER' https://api.github.com/user/repos -d '{"name":"REPO"}' git remote add origin git@github.com:USER/REPO.git git push origin master

一个更简单的方法是:

  1. 在名为/ home / USER_NAME / Desktop / my_scripts的目录中创建一个shell脚本 githubscript.sh
  2. 修改以下代码并将其保存到githubscript.sh文件中
#!bin/bash
curl -u 'YOUR_GITHUB_USER_NAME' https://api.github.com/user/repos -d "{\"name\":\"$1\"}";
git init;
git remote add origin git@github.com:YOUR_GITHUB_USER_NAME/$1.git;

注意: $1repository nameargumentscriptYOUR_GITHUB_USER_NAME在保存脚本之前调用 更改传递的。

  1. 设置script文件 所需的权限 chmod 755 githubscript.sh

  2. 在环境配置文件中包含脚本目录。 nano ~/.profile; export PATH="$PATH:$HOME/Desktop/my_scripts"

  3. 还要设置一个别名来运行githubscript.sh文件。 nano ~/.bashrc; alias githubrepo="bash githubscript.sh"

  4. 现在,将.bashrc.profile文件重新加载到终端中。 source ~/.bashrc ~/.profile;

  5. 现在创建一个新的存储库,即demo githubrepo demo;


1
在代码中,我改变了这一部分: git remote add origin git@github.com:YOUR_GITHUB_USER_NAME/$1.git;git remote add origin https://github.com/YOUR_GITHUB_USER_NAME/$1.git; 对用户来说,谁不使用SSH密钥。
Damiii '16

5

基于@Mechanical Snail的其他答案,除了不使用python之外,我发现这太过头了。将此添加到您的~/.gitconfig

[github]
    user = "your-name-here"
[alias]
    hub-new-repo = "!REPO=$(basename $PWD) GHUSER=$(git config --get github.user); curl -u $GHUSER https://api.github.com/user/repos -d {\\\"name\\\":\\\"$REPO\\\"} --fail; git remote add origin git@github.com:$GHUSER/$REPO.git; git push origin master"

我喜欢这个别名。再次感谢@Robru。PS,如果这不起作用,或者在全新安装OS后停止工作,请确保已安装curl!
daveloyall '16

5

是的,您必须至少打开浏览器一次才能username在GitHub上创建您的浏览器,一旦创建,就可以利用GitHub API从命令行创建存储库,如下所示:

curl -u 'github-username' https://api.github.com/user/repos -d '{"name":"repo-name"}'

例如:

curl -u 'arpitaggarwal' https://api.github.com/user/repos -d '{"name":"command-line-repo"}'

1
然后git remote add origin https://github.com/github-username/repo-name.git将您的本地项目链接到github。对于该示例,命令如下所示:git remote add origin https://github.com/arpitaggarwal/command-line-repo.git
SherylHohman

4

对于具有双重身份验证的用户,您可以使用bennedich的解决方案,但是您只需要为第一个命令添加X-Github-OTP标头。将CODE替换为从二元身份验证提供程序获得的代码。像在其解决方案中一样,将USER和REPO替换为存储库的用户名和名称。

curl -u 'USER' -H "X-GitHub-OTP: CODE" -d '{"name":"REPO"}' https://api.github.com/user/repos
git remote add origin git@github.com:USER/REPO.git
git push origin master

3

我为此写了一个漂亮的脚本Gitter使用GitHub和BitBucket的REST API:

https://github.com/dderiso/gitter

BitBucket:

gitter -c -r b -l javascript -n node_app

的GitHub:

gitter -c -r g -l javascript -n node_app
  • -c =创建新的仓库
  • -r =回购提供者(g = GitHub,b = BitBucket)
  • -n =命名仓库
  • -l =(可选)在回购中设置应用的语言

3

根据Bennedich的答案,我创建了一个Git别名来执行此操作。将以下内容添加到您的~/.gitconfig

[github]
    user = "your_github_username"
[alias]
    ; Creates a new Github repo under the account specified by github.user.
    ; The remote repo name is taken from the local repo's directory name.
    ; Note: Referring to the current directory works because Git executes "!" shell commands in the repo root directory.
    hub-new-repo = "!python3 -c 'from subprocess import *; import os; from os.path import *; user = check_output([\"git\", \"config\", \"--get\", \"github.user\"]).decode(\"utf8\").strip(); repo = splitext(basename(os.getcwd()))[0]; check_call([\"curl\", \"-u\", user, \"https://api.github.com/user/repos\", \"-d\", \"{{\\\"name\\\": \\\"{0}\\\"}}\".format(repo), \"--fail\"]); check_call([\"git\", \"remote\", \"add\", \"origin\", \"git@github.com:{0}/{1}.git\".format(user, repo)]); check_call([\"git\", \"push\", \"origin\", \"master\"])'"

要使用它,运行

$ git hub-new-repo

从本地存储库中的任何位置,然后在出现提示时输入您的Github密码。


这对我不起作用。它返回“没有这样的文件或目录”
adamwong246

这对我也不起作用。它返回curl: (22) The requested URL returned error: 401 Traceback (most recent call last): File "<string>", line 1, in <module> File "/usr/lib64/python3.2/subprocess.py", line 488, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '['curl', '-u', 'myusername', 'https://api.github.com/user/repos', '-d', '{"name": "reponame"}', '--fail']' returned non-zero exit status 22
Da Frenk 2014年

1
python的使用有点过多,并且以多余的反斜杠和其他剪裁的形式增加了很多噪音。我用bash制作了一个版本:stackoverflow.com/a/28924077/1423157
罗布(Robru)2015年

3

您需要的是集线器。Hub是git的命令行包装。可以使用别名与本机git集成。它试图将github动作提供给git,包括创建新的存储库。

→  create a repo for a new project
$ git init
$ git add . && git commit -m "It begins."
$ git create -d "My new thing"
→  (creates a new project on GitHub with the name of current directory)
$ git push origin master

3

对于Rubyists:

gem install githubrepo
githubrepo create *reponame*

根据提示输入用户名和密码

git remote add origin *ctrl v*
git push origin master

资料来源:Elikem Adadevoh


3

适用于所有Python 2.7。*用户。当前版本3中有一个围绕Github API的Python包装器,称为GitPython。只需使用easy_install PyGithub或安装即可pip install PyGithub

from github import Github
g = Github(your-email-addr, your-passwd)
repo = g.get_user().user.create_repo("your-new-repos-name")

# Make use of Repository object (repo)

Repository目标文档是在这里


2

有关创建令牌的说明,请转到此处。这是您将键入的命令(截至本回答之日。(替换所有CAPS关键字):

curl -u 'YOUR_USERNAME' -d '{"scopes":["repo"],"note":"YOUR_NOTE"}' https://api.github.com/authorizations

输入密码后,您将看到包含令牌的以下内容。

{
  "app": {
    "name": "YOUR_NOTE (API)",
    "url": "http://developer.github.com/v3/oauth/#oauth-authorizations-api"
  },
  "note_url": null,
  "note": "YOUR_NOTE",
  "scopes": [
    "repo"
  ],
  "created_at": "2012-10-04T14:17:20Z",
  "token": "xxxxx",
  "updated_at": "2012-10-04T14:17:20Z",
  "id": xxxxx,
  "url": "https://api.github.com/authorizations/697577"
}

您可以随时通过此处撤消令牌


2

由于代表原因,我不能将其添加为注释(最好与bennedich的答案配合使用)),但是对于Windows命令行,这是正确的语法:

curl -u YOUR_USERNAME https://api.github.com/user/repos -d“ {\” name \“:\” YOUR_REPO_NAME \“}”

这是相同的基本格式,但是您必须使用双引号(“)而不是单引号,并用反斜杠转义POST参数中发送的双引号(在-d标志之后)。我还删除了用户名周围的单引号,但是,如果您的用户名有空格(可能吗?),则可能需要使用双引号。


Windows用户应该知道的一点。不可以,用户名不能包含空格(github.com上的注册表单指出:“用户名只能包含字母数字字符或单个连字符,并且不能以连字符开头或结尾”)。因此,不需要双引号的用户名。
mklement0

Github Power Shell在Windows上不接受带有curl的-u :(
JuliandotNut

2

Disclamier:我是开源项目的作者

该功能受以下支持:https : //github.com/chrissound/Human-Friendly-Commands本质上是以下脚本:

#!/usr/bin/env bash

# Create a repo named by the current directory
# Accepts 1 STRING parameter for the repo description
# Depends on bin: jq
# Depends on env: GITHUB_USER, GITHUB_API_TOKEN
github_createRepo() {
  projName="$(basename "$PWD")"
  json=$(jq -n \
    --arg name "$projName" \
    --arg description "$1" \
    '{"name":$name, "description":$description}')

  curl -u "$GITHUB_USER":"$GITHUB_API_TOKEN" https://api.github.com/user/repos -d "$json"
  git init
  git remote add origin git@github.com:"$GITHUB_USER"/"$projName".git
  git push origin master
};

这确实是使用GitHub 的方法 Personal Access Token。(通过添加它的旧方法?access_token=${ACCESSTOKEN}不再起作用
。– not2qubit

0

找到了我喜欢的解决方案: https //medium.com/@jakehasler/how-to-create-a-remote-git-repo-from-the-command-line-2d6857f49564

您首先需要创建一个 Github个人访问令牌

在您喜欢的文本编辑器中打开〜/ .bash_profile或〜/ .bashrc。在文件顶部附近添加以下行,其余的导出变量是:

export GITHUB_API_TOKEN=<your-token-here>

在下面的某个位置,通过其他bash函数,您可以粘贴类似于以下内容的内容:

function new-git() {
    curl -X POST https://api.github.com/user/repos -u <your-username>:$GITHUB_API_TOKEN -d '{"name":"'$1'"}'
}

现在,无论何时创建新项目,都可以运行该命令$ new-git awesome-repo在Github用户帐户上创建新的公共远程存储库。



-2

这是我最初的git命令(此操作可能发生在中C:/Documents and Settings/your_username/):

mkdir ~/Hello-World
# Creates a directory for your project called "Hello-World" in your user directory
cd ~/Hello-World
# Changes the current working directory to your newly created directory
touch blabla.html
# create a file, named blabla.html
git init
# Sets up the necessary Git files
git add blabla.html
# Stages your blabla.html file, adding it to the list of files to be committed
git commit -m 'first committttt'
# Commits your files, adding the message 
git remote add origin https://github.com/username/Hello-World.git
# Creates a remote named "origin" pointing at your GitHub repository
git push -u origin master
# Sends your commits in the "master" branch to GitHub

1
在这种情况下,Hello-World存储库应在GitHub上可用,但不能解决问题中的问题。
朱利安多特(JuliandotNut)'16

-2

我最近发现了有关create-github-repo的信息。从自述文件:

安装:

$ npm i -g create-github-repo

用法:

$ export CREATE_GITHUB_REPO_TOKEN=<access_token>
$ create-github-repo --name "My coolest repo yet!"

要么:

$ create-github-repo <access_token> --name "My coolest repo yet!"

-7

在命令行上创建一个新的存储库

echo "# <RepositoryName>" >> README.md

git init

git add README.md

git commit -m "first commit"

git remote add origin https://github.com/**<gituserID>/<RepositoryName>**.git

git push -u origin master

从命令行推送现有存储库

git remote add origin https://github.com/**<gituserID>/<RepositoryName>**.git

git push -u origin master

1
这行不通;它不会创建远程存储库。
马修(Matthew)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.