379

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

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

是否有任何 git 命令来创建新的远程仓库并将我的提交从这里推送到 GitHub?我知道启动浏览器并转到Create a New Repository没什么大不了的,但如果有办法从 CLI 实现这一点,我会很高兴。

我阅读了大量文章,但没有一篇文章提到如何使用 git 命令从 CLI 创建远程仓库。Tim Lucas 的好文章设置新的远程 git 存储库是我找到的最接近的,但 GitHub 不提供 shell 访问

4

24 回答 24

342

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
于 2012-04-25T23:38:57.593 回答
223

您可以使用 GitHub API 通过命令行创建 GitHub 存储库。查看存储库 API。如果您向下滚动大约三分之一,您将看到一个标题为“创建”的部分,它解释了如何通过 API 创建一个 repo(正上方也是一个解释如何使用 API 分叉一个 repo 的部分) )。显然,您不能使用它git来执行此操作,但您可以通过命令行使用curl.

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

于 2010-03-11T14:20:42.820 回答
76

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

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 是一个 unix 命令(上面也适用于 mac),它检索 URL 并与 URL 交互。它通常已经安装。
  • “-u”是一个 curl 参数,指定用于服务器身份验证的用户名和密码。
  • “-d”是一个 curl 参数,允许您随请求发送 POST 数据
  • "name" 是唯一需要的 POST 数据;我还喜欢包括“描述”
  • 我发现用单引号 ' ' 引用所有 POST 数据是很好的

定义推送到哪里

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

将本地 repo 推送到 github

git push origin master
  • 从主本地分支推送到源远程(github)
于 2011-09-27T03:14:13.127 回答
55

如果你安装了 defunkt优秀的Hub工具,那么这将变得像

hub create

用作者的话来说,“ hub 是 git 的命令行包装器,可以让你在 GitHub 上做得更好。

于 2012-11-13T18:20:58.050 回答
21

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

  1. 安装集线器GitHub)。

    • 操作系统:brew install hub
    • go get github.com/github/hub
    • 否则(也有Go):

      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 存储库。

于 2015-08-03T19:13:19.040 回答
21

使用 Github 的官方新命令行界面

gh repo create

请参阅其他详细信息和选项以及安装说明


例如,要完成您的 git 工作流程:

mkdir project
cd project
git init
touch file
git add file
git commit -m 'Initial commit'
gh repo create
git push -u origin master
于 2020-04-27T13:37:51.173 回答
11

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

更新:设置我的 API 密钥后,我可以通过create命令在 github 上创建一个新的 repo,但是我无法使用该create-from-local命令,该命令应该获取当前的本地 repo 并在 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
于 2011-04-08T04:36:41.367 回答
10

使用 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;

于 2015-01-05T05:53:15.013 回答
6

基于@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"
于 2015-03-08T07:19:46.213 回答
6

到目前为止 ,接受的答案投票最多的答案现在都已过时。密码身份验证已弃用,并将于 2020 年 11 月 13 日 16:00 UTC 删除。

现在使用 GitHub API 的方式是通过个人访问令牌。

您需要(替换所有大写关键字):

  1. 通过网站创建个人访问令牌。是的,您必须使用浏览器,但对于以后的所有访问,它只有一次。安全地存储令牌。
  2. 通过创建 repo
curl -H 'Authorization: token MY_ACCESS_TOKEN' https://api.github.com/user/repos  -d '{"name":"REPO"}'

或者,从一开始就将其设为私有:

curl -H 'Authorization: token MY_ACCESS_TOKEN' https://api.github.com/user/repos -d '{"name":"REPO", "private":"true"}'
  1. 添加新的原点并推送到它:
git remote add origin git@github.com:USER/REPO.git
git push origin master

这样做的缺点是您每次都必须输入令牌,并且它会出现在您的 bash 历史记录中。

为避免这种情况,您可以

  1. 将标头存储在文件中(我们称它为HEADER_FILE
Authorization: token MY_ACCESS_TOKEN
  1. 从文件中读取 curl
curl -H @HEADER_FILE https://api.github.com/user/repos -d '{"name":"REPO"}' # public repo
curl -H @HEADER_FILE https://api.github.com/user/repos -d '{"name":"REPO", "private":"true"}' # private repo
  1. 为了使事情更安全,您可以将访问权限设置为 400 并将用户设置为 root
chmod 400 HEADER_FILE
sudo chown root:root HEADER_FILE
  1. 现在将需要 sudo 来访问头文件
sudo curl -H @HEADER_FILE https://api.github.com/user/repos -d '{"name":"REPO"}' # public repo
sudo curl -H @HEADER_FILE https://api.github.com/user/repos -d '{"name":"REPO", "private":"true"}' # private repo
于 2020-10-19T07:47:39.503 回答
5

更新 20200714

Github 有一个新的官方CLI

...gh 是一个新项目,它帮助我们探索官方 GitHub CLI 工具在设计上完全不同的样子。虽然这两个工具都将 GitHub 带到了终端,但 hub 充当 git 的代理,而 gh 是一个独立的工具。

与 hub 的核心区别在于它不会覆盖现有的 git 命令。因此,您不能像使用 hub 那样将 git 别名为 gh。

我们没有将它添加到集线器,因为我们决定将 GitHub CLI 设计为不同于 git 包装器,即作为它自己的命令。事实证明,维护一个作为 git 代理的可执行文件是很难维护的,而且我们不想因为必须始终保持 git 兼容性而受到限制。我们不想在一个从一开始就很脆弱的范式上构建 GitHub CLI。

-- mislav(枢纽维护者)

原始答案

你需要的是hub。Hub 是 git 的命令行包装器。它已使用别名与本机 git 集成。它尝试向 git 提供 github 操作,包括创建新存储库。

→  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
于 2014-03-24T07:50:02.553 回答
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"}'
于 2017-02-03T17:09:23.090 回答
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
于 2013-12-15T19:27:32.490 回答
3

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

https://github.com/dderiso/gitter

比特桶:

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= 为 repo 命名
  • -l=(可选)在 repo 中设置应用程序的语言
于 2013-02-02T20:19:38.210 回答
3

对于 Ruby 爱好者:

gem install githubrepo
githubrepo create *reponame*

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

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

资料来源:Elikem Adadevoh

于 2014-04-24T00:26:55.930 回答
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对象文档这里。

于 2016-12-19T09:43:29.737 回答
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"
}

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

于 2012-10-04T14:33:05.917 回答
2

根据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 密码。

于 2013-05-27T04:03:38.497 回答
2

免责声明:我是开源项目的作者

支持此功能: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
};
于 2018-01-07T16:31:04.323 回答
2

最后,GitHub 已经正式宣布了所有核心功能的新 CLI。

在这里检查:https ://cli.github.com/

通过 HomeBrew 安装:brew install gh其他方式:https ://github.com/cli/cli#installation

然后

gh repo create

其他可用功能。

$ gh --help

Work seamlessly with GitHub from the command line.

USAGE
  gh <command> <subcommand> [flags]

CORE COMMANDS
  gist:       Create gists
  issue:      Manage issues
  pr:         Manage pull requests
  release:    Manage GitHub releases
  repo:       Create, clone, fork, and view repositories

ADDITIONAL COMMANDS
  alias:      Create command shortcuts
  api:        Make an authenticated GitHub API request
  auth:       Login, logout, and refresh your authentication
  completion: Generate shell completion scripts
  config:     Manage configuration for gh
  help:       Help about any command

FLAGS
  --help      Show help for command
  --version   Show gh version

EXAMPLES
  $ gh issue create
  $ gh repo clone cli/cli
  $ gh pr checkout 321

ENVIRONMENT VARIABLES
  See 'gh help environment' for the list of supported environment variables.

LEARN MORE
  Use 'gh <command> <subcommand> --help' for more information about a command.
  Read the manual at https://cli.github.com/manual

FEEDBACK
  Open an issue using 'gh issue create -R cli/cli'

所以现在你可以从你的终端创建 repo。

于 2020-09-21T03:46:33.900 回答
2

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

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

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

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 用户帐户上创建一个新的公共远程存储库。

于 2017-09-22T17:03:34.157 回答
0

出于代表的原因,我不能将此添加为评论(最好使用bennedich 的答案),但对于 Windows 命令行,这是正确的语法:

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

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

于 2014-09-23T04:59:51.037 回答
-1

这是我最初的 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
于 2014-04-28T14:38:47.567 回答
-6

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

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
于 2016-07-08T11:17:27.813 回答