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

and*_*toi 337 git ssh version-control github command-line-interface

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

~$ mkdir projectname
~$ cd projectname
~$ git init
~$ touch file1
~$ git add file1
~$ git commit -m 'first commit'
Run Code Online (Sandbox Code Playgroud)

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

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

ben*_*ich 314

用于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
Run Code Online (Sandbox Code Playgroud)

  • 第一个命令的一个小问题是你在你的`〜/ .bash_history`中留下你的GitHub密码.我建议用`-u'USER'`替换`-u'USER:PASS'`,然后curl会以交互方式询问你的密码. (43认同)
  • 要从一开始就使repo成为私有,请使用:`curl -u'USER'https://api.github.com/user/repos -d'{"name":"REPO","private":"true" }'` (20认同)
  • 不要忘记您可以[生成访问令牌](https://github.com/settings/applications)并以这种方式使用它:`curl https://api.github.com/user/repos?access_token= myAccessToken -d'{"name":"REPO"}'`.:-) (13认同)
  • 我写了一个bash脚本来为我们节省一些打字.采取用户输入并具有合理的默认值:https://gist.github.com/robwierzbowski/5430952 (3认同)
  • 以下是如何将其添加为git别名:`git config --global alias.gh-create'!sh -c"curl -u \"USERNAME \"https://api.github.com/user/repos -d \"{\\\"name \\\":\\\"$ 1 \\\"} \"" - '` (2认同)

mip*_*adi 210

您可以使用GitHub API通过命令行创建GitHub存储库.查看存储库API.如果向下滚动大约三分之一,您将看到一个标题为"创建"的部分,该部分解释了如何通过API创建存储库(正如上面的部分解释了如何使用API​​来交换存储库) ).显然你不能用git它来做,但你可以通过命令行使用像这样的工具curl.

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

  • 谢谢一堆mipadi!不知道GitHub API.对于其他遇到同样问题的人来说,这就是我基本上做的:`curl -F'login = username'-F'token = API Token'https://www.github.com/api/v2/yaml/repos/create - F name = reponame`.您的API令牌可以在GitHub站点上找到,单击*帐户设置*,查找*管理信息*和*API令牌*(32个字符长的字符串). (69认同)
  • API版本3语法通过@bennedich http://stackoverflow.com/a/10325316/305633给出 (12认同)
  • @cseder:问题是询问是否可以通过GitHub API在GitHub上创建远程仓库,而不是如何创建新仓库并推送到GitHub上的现有仓库. (5认同)
  • @cseder:Git不需要这个来创建一个repo,但是在GitHub*上设置一个*.我不认为Mercurial允许您通过推送到不存在的仓库来在远程服务器上创建仓库. (2认同)

Nay*_*Nay 68

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

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
Run Code Online (Sandbox Code Playgroud)

(针对v3 Github API更新)


这些命令的解释......

创建github仓库

    curl -u 'nyeates' https://api.github.com/user/repos -d '{"name":"projectname","description":"This project is a test"}'
Run Code Online (Sandbox Code Playgroud)
  • curl是一个unix命令(上面也适用于mac),它检索URL并与之交互.它通常已经安装.
  • "-u"是一个curl参数,它指定用于服务器身份验证的用户名和密码.
    • 如果您只是提供用户名(如上例所示),curl将提示输入密码.
    • 如果您不想输入密码,请参阅有关身份验证的 githubs api文档
  • "-d"是一个curl参数,允许您使用请求发送POST数据
  • "name"是唯一需要的POST数据; 我还想包括"描述"
  • 我发现用单引号引用所有POST数据是好的

定义要推送的位置

git remote add origin git@github.com:nyeates/projectname.git
Run Code Online (Sandbox Code Playgroud)
  • 在github上添加连接(远程)repo的位置和存在的定义
  • "origin"是git用于源来源的默认名称
    • 技术上没有来自github,但现在github repo将成为记录的来源
  • "git@github.com:nyeates"是一个ssh连接,假设您已经使用github设置了可信的ssh密钥对.

将本地存储库推送到github

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


cav*_*ade 52

如果您安装defunkt的优秀Hub工具,那么就变得如此简单

git create

用作者的话说," hub是git的命令行包装器,可以让你在GitHub上更好. "

  • 我喜欢'hub`!同样有用的是`hub` - 或者`hub`通常是`git` ...`git fork`的别名,它为你所在的克隆仓库的`pwd`创建一个repo的分支. .. 好极了. (3认同)
  • 这个工具太棒了!它负责为您存储身份验证令牌,因此您无需反复输入密码.还要检查github的ZSH插件. (2认同)

ken*_*orb 15

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

  1. 安装集线器(GitHub).

  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时会提示输入GitHub用户名和密码,并将其交换为OAuth令牌,然后保存~/.config/hub.

    要明确命名新存储库,请传入NAME,可选地以ORGANIZATION/NAME表单形式在您是其成员的组织下创建.

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

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

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

如需更多帮助,请运行:hub help.

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


Xav*_*hot 14

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

gh repo create
Run Code Online (Sandbox Code Playgroud)

查看其他详细信息和选项以及安装说明


例如,要完成您的 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
Run Code Online (Sandbox Code Playgroud)


Jas*_*ell 11

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

更新:设置我的API密钥后,我可以通过create命令在github上创建一个新的repo ,但是我无法使用该create-from-local命令,该命令应该采用当前的本地存储并在github上进行相应的远程控制.

$ gh create-from-local
=> error creating repository
Run Code Online (Sandbox Code Playgroud)

如果有人对此有所了解,我很想知道我做错了什么.已经提出了一个问题.

更新:我最终做到了这一点.我不确定如何重新产生问题,但我刚从头开始(删除.git文件夹)

git init
git add .emacs
git commit -a -m "adding emacs"
Run Code Online (Sandbox Code Playgroud)

现在这行将创建远程仓库甚至推送它,但不幸的是我不认为我可以指定我想要的仓库的名称.我希望它在github上被称为"dotfiles",但是gh gem只使用了当前文件夹的名称,因为我在我的主文件夹中是"jason".(我添加了一张要求所需行为的票)

gh create-from-local
Run Code Online (Sandbox Code Playgroud)

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

gh create dotfiles
Run Code Online (Sandbox Code Playgroud)

  • 这个项目在几年内没有任何工作,对我来说没有用,而且,如[暗示] [这里](https://github.com/defunkt/github-gem/issues/97),死了 它显然已被[hub](https://github.com/github/hub)工具所取代,如[本答案](http://stackoverflow.com/a/13366414/229792)中所述. (3认同)

Nas*_*jim 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. 在目录中创建一个shell脚本,即/ home/USER_NAME/Desktop/my_scripts命名 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;
Run Code Online (Sandbox Code Playgroud)

NB $1repository nameargumentscriptYOUR_GITHUB_USER_NAME在保存脚本之前调用 Change 传递的.

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

  2. 在环境配置文件中包含scripts目录. 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;


Gab*_*e B 7

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

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

您需要(替换全部大写关键字):

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

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

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

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

为了避免这种情况,您可以

  1. 将标头存储在文件中(我们称其为HEADER_FILE
Authorization: token MY_ACCESS_TOKEN
Run Code Online (Sandbox Code Playgroud)
  1. 让curl从文件中读取
Authorization: token MY_ACCESS_TOKEN
Run Code Online (Sandbox Code Playgroud)
  1. 为了使事情更安全,您可以将访问权限设置为 400,并将用户设置为 root
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
Run Code Online (Sandbox Code Playgroud)
  1. 现在需要 sudo 来访问头文件
chmod 400 HEADER_FILE
sudo chown root:root HEADER_FILE
Run Code Online (Sandbox Code Playgroud)


cnv*_*mcx 5

更新 20200714

Github 有一个新的官方CLI

...gh 是一个新项目,可帮助我们探索具有根本不同设计的官方 GitHub CLI 工具的外观。虽然这两个工具都将 GitHub 带到终端,但 hub 充当 git 的代理,而 gh 是一个独立的工具。

与 hub 的核心区别在于它不包含现有的 git 命令。因此,您不能像使用集线器那样将 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
Run Code Online (Sandbox Code Playgroud)


rob*_*bru 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"
Run Code Online (Sandbox Code Playgroud)


Arp*_*wal 5

不,你必须至少打开浏览器一次才能username在 GitHub 上创建你的,一旦创建,你可以利用GitHub API从命令行创建存储库,遵循以下命令:

curl -u 'github-username' https://api.github.com/user/repos -d '{"name":"repo-name"}'
Run Code Online (Sandbox Code Playgroud)

例如:

curl -u 'arpitaggarwal' https://api.github.com/user/repos -d '{"name":"command-line-repo"}'
Run Code Online (Sandbox Code Playgroud)


Bal*_*Raj 5

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

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

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

然后

gh repo create
Run Code Online (Sandbox Code Playgroud)

其他可用功能。

$ 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'
Run Code Online (Sandbox Code Playgroud)

现在您可以从终端创建存储库。