是否有可能从CLI在GitHub上创建一个远程回购而不打开浏览器?

我创建了一个新的本地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访问

163246 次浏览

你可以使用GitHub API通过命令行创建一个GitHub repo。检查存储库API。如果你向下滚动大约三分之一的路径,你会看到一个名为“创造”的部分,它解释了如何通过API创建一个repo(正上方是一个部分,它也解释了如何用API派生一个repo)。显然你不能使用git来做到这一点,但你可以通过命令行使用像curl这样的工具来做到这一点。

在API之外,没有办法通过命令行在GitHub上创建一个repo。正如你所注意到的,GitHub不允许shell访问等,所以除了GitHub API,创建回购的唯一方法是通过GitHub的web界面。

有一个官方github宝石,我认为,它做这个。随着我的学习,我会尝试添加更多的信息,但我现在才刚刚发现这个宝石,所以我知道的还不多。

更新:设置我的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"

现在这一行将创建远程回购,甚至推到它,但不幸的是,我认为我不能指定我想要的回购的名称。我想要它被称为“dotfiles”在github上,但gh宝石只是使用当前文件夹的名称,这是“jason”,因为我是在我的家庭文件夹。(我添加了一张票请求所需的行为)

gh create-from-local

另一方面,这个命令接受一个参数来指定远程repo的名称,但它用于从头开始一个新项目,即在调用这个命令后,您将获得一个新的远程repo,它在相对于当前位置的新创建的子文件夹中跟踪一个本地repo,两者的名称都指定为参数。

gh create dotfiles

这可以用三个命令来完成:

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并与之交互。它通常已经安装。
  • "-u"是一个curl参数,指定用于服务器身份验证的用户名和密码。
    • 如果只输入用户名(如上面的例子所示),curl将提示输入密码。
    • 如果你不想输入密码,请参阅github api文档身份验证
    • 李< / ul > < / >
    • "-d"是一个curl参数,允许您在请求时发送POST数据
      • 你在github__abc0中发送POST数据
      • 李< / ul > < / >
      • “name”是唯一需要的POST数据;我还想加上"描述"
      • 我发现这是很好的引用所有POST数据单引号' '

      定义推到哪里

      git remote add origin git@github.com:nyeates/projectname.git
      
      • 在github上添加连接(远程)回购的位置和存在的定义
      • "origin"是git用来表示源代码来源的默认名称
        • 技术上没有来自github,但现在github回购将记录的来源
        • 李< / ul > < / >
        • “git@github.com:nyeates”是一个SSH连接,它假设你已经在github上设置了一个可信的SSH密钥对。

        将本地回购推到github

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

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

有关创建令牌的说明,请访问在这里。这是您将键入的命令(自回答的日期起)。(替换所有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"
}

你可以随时通过在这里来撤销你的令牌

如果你安装了defunkt的优秀的中心工具,那么这就变得非常简单

hub create

用作者的话来说,“;hub是git的命令行包装器,使您更好地使用GitHub。"

我写了一个漂亮的脚本,名为git,使用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 =创建新的repo
  • -r = repo provider (g = GitHub, b = BitBucket)
  • -n =命名回购
  • -l = (optional)设置repo中应用程序的语言

我已经创建了一个Git别名来做这件事,基于Bennedich的回答。在~/.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密码。

对于使用双因素身份验证的用户,您可以使用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

更新20200714

Github有了一个新的官方CLI

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

与hub的核心区别在于,它不会覆盖现有的git命令。所以,你不能像使用hub一样,将git别名为gh。

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

——mislav(轮毂维护器)

原来的答案

你需要的是中心。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

ruby开发者:

gem install githubrepo
githubrepo create *reponame*

根据提示输入username和pw

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

来源:Elikem Adadevoh

以下是我的初始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

出于代表原因,我不能将其作为注释添加(最好使用bennedich的回答),但对于Windows命令行,以下是正确的语法:

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

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

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

每次创建存储库时输入完整的代码是很麻烦的

< p > <代码> curl -u 'USER' https://api.github.com/user/repos -d '{"name":"REPO"}' git远程添加源git@github.com:USER/REPO.git Git push origin master < /代码> < / p >

一个更简单的方法是:

  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;

注意: 这里的$1是调用script时作为argument传递的repository name 在保存脚本之前修改YOUR_GITHUB_USER_NAME

  1. script文件设置所需的权限 Chmod 755 githubscript.sh < /代码> < / p > < /李>

  2. 包含环境配置文件中的scripts目录。 纳米~ / . profile; 导出路径= " $路径:$ HOME /桌面/ my_scripts” < /代码> < / p > < /李>

  3. 同时设置一个别名来运行githubscript.sh文件。 纳米~ / . bashrc; 别名githubrepo="bash githubscript.sh" < /代码> < / p > < /李> 现在在终端中重新加载.bashrc.profile文件。 ~ /来源。bashrc ~ / . profile (; < /代码> < / p > < /李> 现在创建一个新的存储库,即demo: githubrepo演示; < /代码> < / p > < /李>

基于@机械蜗牛的另一个回答,除了没有使用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"

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

  1. 安装中心 (GitHub)。

    • OS x: __abc0
    • : go get github.com/github/hub
    • 否则(也有):

      git clone https://github.com/github/hub.git && cd hub && ./script/build
      
  2. Go to your repo or create empty one: mkdir foo && cd foo && git init.

  3. Run: hub create, it'll ask you about GitHub credentials for the first time.

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

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

    Hub will prompt for GitHub username & password the first time it needs to access the API and exchange it for an OAuth token, which it saves in ~/.config/hub.

    To explicitly name the new repository, pass in NAME, optionally in ORGANIZATION/NAME form to create under an organization you're a member of.

    With -p, create a private repository, and with -d and -h set the repository's description and homepage URL, respectively.

    To avoid being prompted, use GITHUB_USER and GITHUB_PASSWORD environment variables.

  4. Then commit and push as usual or check hub commit/hub push.

For more help, run: hub help.

See also: Importing a Git repository using the command line at GitHub.

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

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

对于所有的Python 2.7。*用户。目前版本3中有一个围绕Github API的Python包装器,称为GitPython。简单地使用easy_install PyGithubpip 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对象文档是在这里

不,你必须打开浏览器至少一次才能在GitHub上创建你的username,一旦创建,你可以利用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"}'

找到这个解决方案,我喜欢: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用户帐户上创建一个新的公共远程存储库。

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

此功能由: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官方的新命令行接口:

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

最后,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年11月13日16:00 UTC移除。

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

你需要(替换ALL CAPS关键字):

  1. 创建个人访问令牌通过网站。是的,您必须使用浏览器,但以后所有访问都只能使用一次。安全地存储令牌。
  2. 创建回购通道
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