Возможно ли создать удаленное репо на GitHub из CLI, не открывая браузер?

Я создал новый локальный репозиторий Git:

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

Есть ли какая-нибудь команда git для создания нового удаленного репо и отправки моего коммита в GitHub отсюда? Я знаю, что нет ничего страшного в том, чтобы просто запустить браузер и перейти к созданию нового репозитория, но если есть способ добиться этого из CLI, я был бы счастлив.

Я прочитал огромное количество статей, но ни одна из найденных статей не упоминает, как создать удаленное репо из CLI с помощью команд git. Хорошая статья Тима Лукаса Настройка нового удаленного git-репозитория наиболее близка к тому, что я нашел, но GitHub не обеспечивает доступ к оболочке.

22 ответа

Решение

Вы можете создать репозиторий GitHub через командную строку, используя GitHub API. Проверьте API хранилища. Если вы прокрутите около трети пути, вы увидите раздел, озаглавленный "Создать", в котором объясняется, как создать репо через API (прямо над этим разделом также объясняется, как раскладывать репо с помощью API).). Очевидно, вы не можете использовать git чтобы сделать это, но вы можете сделать это через командную строку с помощью инструмента, как curl,

Вне API нет возможности создать репозиторий на GitHub через командную строку. Как вы заметили, GitHub не разрешает доступ к оболочке и т. Д., Кроме API GitHub, единственный способ создать репо - через веб-интерфейс GitHub.

Команды CLI для github API v3 (замените все ключевые слова 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)


Объяснение этих команд...

Создать репозиторий 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 запросит пароль.
    • Если вы не хотите вводить пароль, см. Документацию 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-соединение, которое предполагает, что вы уже настроили доверенную ssh-пару с github.

Нажмите местное репо на GitHub

git push origin master
  • нажмите на исходный удаленный (github) из локальной ветки master

Если вы установите отличное средство Hub для defunkt, то это станет

git create

По словам автора, "hub - это оболочка командной строки для git, которая делает вас лучше в GitHub".

С официальным новым интерфейсом командной строки 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

Простые шаги (используя git + hub => GitHub):

  1. Установите Hub ( 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. Зайдите в свой репо или создайте пустой: 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 запрашивает имя пользователя и пароль GitHub при первом обращении к API и обменивает его на OAuth токен, который он сохраняет ~/.config/hub,

    Чтобы явно указать имя нового хранилища, введите NAMEнеобязательно в ORGANIZATION/NAME Форма для создания в организации, членом которой вы являетесь.

    С -pсоздать частный репозиторий, и с -d а также -h установить описание репозитория и домашнюю страницу URLсоответственно.

    Чтобы избежать запроса, используйте GITHUB_USER а также GITHUB_PASSWORD переменные среды

  4. Затем совершите и нажмите как обычно или проверьте hub commit/hub push,

Для получения дополнительной помощи выполните: hub help,

Смотрите также: Импорт Git-репозитория с использованием командной строки на GitHub.

Есть официальный гем GitHub, который, я думаю, делает это. Я постараюсь добавить больше информации, когда узнаю, но я только сейчас открываю для себя этот драгоценный камень, поэтому пока не знаю много.

ОБНОВЛЕНИЕ: После установки моего ключа API, я могу создать новый репозиторий на 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"

Теперь эта строка создаст удаленное репо и даже подтолкнет к нему, но, к сожалению, я не думаю, что могу указать имя репо, которое бы мне понравилось. Я хотел, чтобы он назывался "точечными файлами" на github, но гем gh просто использовал имя текущей папки, которое было "jason", так как я находился в своей домашней папке. (Я добавил билет с просьбой о желаемом поведении)

gh create-from-local

Эта команда, с другой стороны, принимает аргумент для указания имени удаленного репо, но она предназначена для запуска нового проекта с нуля, т.е. после вызова этой команды вы получаете новое удаленное репо, которое отслеживает локальное репо во вновь созданной подпапке относительно вашей текущей позиции, оба с именем, указанным в качестве аргумента.

gh create dotfiles

Чтобы быстро создать удаленное хранилище с помощью оболочки Bash

Полный код вводить каждый раз при создании хранилища

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 с именем 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;

NB Здесь $1 это repository name это передается как argument при вызове script + Изменить YOUR_GITHUB_USER_NAME перед сохранением скрипта.

  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;

И принятый ответ, и ответ, получивший наибольшее количество голосов, уже устарели. Парольная аутентификация устарела и будет удалена 13 ноября 2020 года в 16:00 UTC.

Теперь можно использовать GitHub API с помощью токенов личного доступа.

Вам необходимо (заменить ВСЕ ключевые слова 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

Основано на другом ответе @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"

То, что вам нужно, это концентратор. 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

Наконец, случилось так, что GitHub официально анонсировал новый интерфейс командной строки для всех основных функций.

проверьте здесь: 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'

Итак, теперь вы можете создать репо со своего терминала.

Нет, вы должны открыть браузер по крайней мере один раз, чтобы создать свой 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"}'

Для пользователей с двухфакторной аутентификацией вы можете использовать решение 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

Для рубистов:

gem install githubrepo
githubrepo create *reponame*

введите имя пользователя и pw как предложено

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

Источник: Elikem Adadevoh

Я создал псевдоним 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, когда будет предложено.

Я написал отличный скрипт для этого под названием Gitter, использующий REST API для GitHub и BitBucket:

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 = (необязательно) установить язык приложения в репо

Для всех пользователей Python 2.7.*. Существует оболочка Python вокруг Github API, которая в настоящее время находится в версии 3, называется 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 Документы по объекту здесь.

Нашел это решение, которое мне понравилось: 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.

Disclamier: я автор проекта с открытым исходным кодом

Эта функциональность поддерживается: https://github.com/chrissound/LinuxVerboseCommandLib сути именно этот скрипт:

#!/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
};

Для получения инструкций по созданию токена перейдите сюда. Это команда, которую вы введете (на дату этого ответа. (Замените все ключевые слова 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"
}

Вы можете отозвать свой токен в любое время, зайдя сюда

По причинам репутации я не могу добавить это как комментарий (куда лучше добавить ответ Беннедича), но для командной строки Windows, здесь правильный синтаксис:

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

Это та же базовая форма, но вы должны использовать двойные кавычки (") вместо одинарных и избегать двойных кавычек, отправляемых в параметрах POST (после флага -d) с обратной косой чертой. Я также удалил одинарные кавычки вокруг моего имени пользователя, но если бы у вашего имени пользователя был пробел (возможно?), ему, вероятно, потребовались бы двойные кавычки.

Вот мои начальные команды 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. Из readme:

Установка:

$ 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!"

создать новый репозиторий в командной строке

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
Другие вопросы по тегам