是否有可能在没有打开浏览器的情况下从CLI创build一个远程回购GitHub?

我创build了一个新的本地Git仓库:

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

有没有任何git命令来创build一个新的远程回购,并从这里推我的提交到GitHub? 我知道启动一个浏览器并开始创build一个新的存储库是没有什么大不了的,但是如果有一种方法可以通过CLI来实现,我会很高兴。

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

你可以使用GitHub API通过命令行创build一个GitHub仓库。 检出存储库API 。 如果您向下滚动约三分之一,您将看到一个标题为“创build”的部分,该部分解释了如何通过API创build一个回购站(上面是一个解释如何使用该API回购一个回购站的部分) )。 显然你不能使用git来做到这一点,但你可以通过命令行使用curl工具来完成。

在API之外,通过命令行无法在GitHub上创build回购。 正如你所说,GitHub不允许shell访问等,所以除了GitHub API之外,创buildrepo的唯一方法是通过GitHub的Web界面。

github API v3的CLI命令(replace所有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 

这可以用三个命令完成:

 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)

这些命令的解释…

创buildgithub回购

  curl -u 'nyeates' https://api.github.com/user/repos -d '{"name":"projectname","description":"This project is a test"}' 
  • curl是一个unix命令(以上在Mac上也是这样)检索并与URL交互。 它通常已经安装。
  • “-u”是一个curl参数,用于指定用于服务器身份validation的用户名和密码。
    • 如果你只是给用户名(如上面的例子所示),curl会提示input密码。
    • 如果您不想input密码,请参阅关于authentication的 githubs api文档
  • “-d”是一个curl参数,允许您发送带请求的POST数据
    • 您正在以githubs 定义的API格式发送POST数据
  • “name”是唯一需要的POST数据; 我喜欢还包括“描述”
  • 我发现用单引号引用所有的POST数据是很好的“

定义到哪里去

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

推送本地回购github

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

如果你安装了defunkt的优秀集线器工具,那么这就变得如此简单

git create

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

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

  1. 安装集线器 ( GitHub )。

    • OS X: brew install hub
    • 有Go : go get github.com/github/hub
    • 否则(有Go ):

       git clone https://github.com/github/hub.git && cd hub && ./script/build 
  2. 去你的回购或创build一个空的: 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时提示inputGitHub用户名和密码,并将其交换为OAuth令牌,并保存在~/.config/hub

    要明确命名新的存储库,请传入NAME ,可select以ORGANIZATION/NAMEforms在您所属的组织下创build。

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

    为了避免被提示,请使用GITHUB_USERGITHUB_PASSWORD环境variables。

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

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

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

有一个官方githubgem ,我认为,这是。 我会尽量在学习的时候添加更多的信息,但是我现在才刚刚发现这个宝贝,所以我还不太了解。

更新:设置我的API密钥后,我能够创build一个新的回购github通过create命令,但是我不能够使用create-from-local命令,这应该采取当前本地回购,并作出相应的远程在github上。

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

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

更新:我最终得到这个工作。 我不确定如何重新生成问题,但我只是从头开始(删除.git文件夹)

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

现在这条线将创build远程回购,甚至推动它,但不幸的是,我不认为我可以指定我想要的回购的名称。 我希望它在github上被称为“dotfiles”,但是gh gem只是使用了当前文件夹的名称,因为我在我的home文件夹中是“jason”。 (我添加了一张票,询问所需的行为)

 gh create-from-local 

另一方面,这个命令确实接受一个参数来指定远程仓库的名称,但是它的目的是从头开始一个新的项目,也就是在你调用这个命令之后,你会得到一个新的远程仓库来追踪本地仓库在相对于当前位置的新创build的子文件夹中,都使用指定的名称作为参数。

 gh create dotfiles 

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

每次创build存储库时,键入完整的代码是很麻烦的

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. 在名为githubscript.sh / home / USER_NAME / Desktop / my_scripts目录中创build一个shell脚本
  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更改YOUR_GITHUB_USER_NAME并保存脚本之前作为argument传递的repository name

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

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

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

  4. 现在重新加载terminal中的.bashrc.profile文件。 source ~/.bashrc ~/.profile;

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

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

https://github.com/dderiso/gitter

到位桶:

 gitter -c -rb -l javascript -n node_app 

GitHub的:

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

根据Bennedich的回答 ,我创build了一个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 

从本地存储库中的任何地方,并在提示时input您的Github密码。

对于使用双因素身份validation的用户,可以使用bennedich的解决scheme,但只需要为第一个命令添加X-Github-OTP头。 将CODEreplace为您从双因素身份validation提供程序获取的代码。 用您的解决scheme中的USER和REPOreplace存储库的用户名和名称。

 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 

基于@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" 

有关创build令牌的说明,请转到此处这是您将键入的命令(截至此答案的date。(replace所有CAPS关键字):

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

一旦你input你的密码,你会看到下面的包含你的令牌。

 { "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" } 

你可以随时去这里撤销你的令牌

你需要的是枢纽 。 Hub是git的命令行包装器。 已经使用别名与本地git进行了整合。 它试图将github动作提供到git中,包括创build新的存储库。

 → 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 

对于Rubyists:

 gem install githubrepo githubrepo create *reponame* 

根据提示input用户名和密码

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

来源: Elikem Adadevoh

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

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

它的基本forms是一样的,但是你必须使用双引号(“)来代替单引号,并且用反斜杠来转义POST参数中发送的双引号(在-d标志之后),同时也删除了用户名的单引号,但是如果你的用户名有一个空格(可能?)它可能需要双引号。

对于所有的Python 2.7。*用户。 目前在版本3上的Github API有一个名为GitPython的Python包装器。 只需使用easy_install PyGithub pip 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对象文档在这里 。

不,你必须至less打开一次浏览器在GitHub上创build你的username ,一旦创build,你可以利用GitHub API从命令行创build存储库,按照以下命令:

 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"}' 

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

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

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

export GITHUB_API_TOKEN=<your-token-here>

在下面的某个地方,通过其他的bashfunction,你可以粘贴类似于下面的东西:

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

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

这里是我的初始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 

我最近发现了关于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!" 

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

 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