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

348

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

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

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

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

anddoutoi
источник

Ответы:

215

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

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

mipadi
источник
73
Спасибо куча мипади! Не знал об API GitHub. Для всех остальных с той же проблемой, это то , что я поясню сделал: curl -F 'login=username' -F 'token=API Token' https://github.com/api/v2/yaml/repos/create -F name=reponame. Ваш токен API можно найти на сайте GitHub, нажмите « Настройки учетной записи» , найдите административную информацию и токен API (строка длиной 32 символа).
anddoutoi
1
Кажется, это устарело, по крайней мере, я не нахожу там токен API.
Иоахим Брейтнер
12
Синтаксис API версии 3, приведенный ниже через @bennedich stackoverflow.com/a/10325316/305633
JiminyCricket,
2
@cseder: Git не требует этого для создания репо, но его установка на GitHub делает. Я не думаю, что Mercurial позволяет вам создать репо на удаленном сервере, также нажав на несуществующее репо.
Mipadi
5
@cseder: Вопрос в том, возможно ли создать удаленное репо на GitHub через GitHub API, а не в том, как создать новое репо и перенести его в существующее на GitHub.
Mipadi
322

Команды 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
bennedich
источник
43
Небольшая проблема с первой командой заключается в том, что вы оставляете свой пароль GitHub в своем ~/.bash_history. Я бы предложил заменить -u 'USER:PASS'на -u 'USER', тогда curl попросит вас ввести пароль в интерактивном режиме.
ivanzoid
20
Чтобы сделать репозиторий приватным с самого начала, используйте:curl -u 'USER' https://api.github.com/user/repos -d '{"name":"REPO", "private":"true"}'
Джо Флетчер
3
Я написал сценарий bash, чтобы сэкономить нам время при наборе текста. Принимает пользовательский ввод и имеет разумные значения по умолчанию: gist.github.com/robwierzbowski/5430952
RobW
3
Вот как добавить его в качестве псевдонима:git config --global alias.gh-create '!sh -c "curl -u \"USERNAME\" https://api.github.com/user/repos -d \"{\\\"name\\\":\\\"$1\\\"}\"" -'
Робин Уинслоу
13
Не забывайте , что вы можете сгенерировать маркер доступа и использовать его таким образом: curl https://api.github.com/user/repos?access_token=myAccessToken -d '{"name":"REPO"}'. :-)
Ионика Бизэ
69

Это можно сделать тремя командами:

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 будет источником записи
  • «git@github.com: nyeates» - это ssh-соединение, которое предполагает, что вы уже настроили доверенную ssh-пару с github.

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

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

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

git create

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

кавалькада
источник
3
Я люблю hub! Также полезным является hub- или, как hubобычно, псевдонимы для git... git fork, который создает форк репо для pwdклонированного репо, в котором вы находитесь ... Yay.
Алекс Грей,
2
этот инструмент потрясающий! Он заботится о сохранении вашего токена аутентификации, чтобы вам не приходилось вводить пароль снова и снова. Также проверьте плагин ZSH для GitHub.
Дориан
19

Простые шаги (используя 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.

kenorb
источник
Как я могу установить переменные окружения GITHUB_USER и GITHUB_PASSWORD?
Каспер
1
Вероятно, вы можете экспортировать их, см .: GH # 245 .
kenorb
1
Отлично сработало для меня, заметка "хаб" также доступна на MacPorts.
Тиктак
Я думаю, это то, что я искал! :)
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ
11

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

ОБНОВЛЕНИЕ: После установки моего ключа 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
Джейсон Марселл
источник
3
Этот проект не работал над ним в течение нескольких лет, не работал для меня и, как подразумевается здесь , мертв. По-видимому, он был заменен инструментом- концентратором , как предлагается в этом ответе .
jameshfisher
9

Чтобы быстро создать удаленное хранилище с помощью оболочки 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 Change 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;

Насиф Мд. Танджим
источник
1
В вашем коде я изменил эту часть: git remote add origin git@github.com:YOUR_GITHUB_USER_NAME/$1.git; на git remote add origin https://github.com/YOUR_GITHUB_USER_NAME/$1.git; Для пользователей, которые не используют ключ SSH.
Дамии
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"
robru
источник
Я люблю этот псевдоним. Еще раз спасибо, @Robru. PS, если это не работает или перестает работать после новой установки ОС ... убедитесь, что у вас установлен curl!
daveloyall
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"}'
Арпит Аггарвал
источник
1
Затем, git remote add origin https://github.com/github-username/repo-name.gitчтобы связать ваш локальный проект с GitHub. Например, команда будет выглядеть так:git remote add origin https://github.com/arpitaggarwal/command-line-repo.git
SherylHohman
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
user886596
источник
3

Я написал отличный скрипт для этого под названием 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 = (необязательно) установить язык приложения в репо
D.Deriso
источник
3

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

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

reubano
источник
2

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

Механическая улитка
источник
Это не сработало для меня. Он возвращает «Нет такого файла или каталога»
adamwong246
Это не сработало для меня тоже. Он возвращаетсяcurl: (22) The requested URL returned error: 401 Traceback (most recent call last): File "<string>", line 1, in <module> File "/usr/lib64/python3.2/subprocess.py", line 488, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '['curl', '-u', 'myusername', 'https://api.github.com/user/repos', '-d', '{"name": "reponame"}', '--fail']' returned non-zero exit status 22
Да Френк
1
Использование Python немного и добавляет много шума в виде дополнительной обратной косой черты и других знаков препинания. Я сделал версию только с bash: stackoverflow.com/a/28924077/1423157
robru
2

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

gem install githubrepo
githubrepo create *reponame*

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

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

Источник: Elikem Adadevoh

Бенджамин Данфи
источник
2

Для всех пользователей 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объекту здесь .

Куайн
источник
2

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

Эта функциональность поддерживается: 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 Personal Access Token. (Старый способ добавления его через ?access_token=${ACCESSTOKEN}больше не работает.
not2qubit
1

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

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

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

traycerb
источник
Полезно знать пользователям Windows. Нет, имена пользователей не могут содержать пробелы (форма регистрации на github.com гласит: «Имя пользователя может содержать только буквенно-цифровые символы или одиночные дефисы и не может начинаться или заканчиваться дефисом»). Таким образом, двойные кавычки имени пользователя не нужны.
mklement0
Github Power Shell не принимает -u с curl, на Windows :(
JuliandotNut
1

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

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

Джошуа Дэнс
источник
-2

вот мои начальные команды 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
T.Todua
источник
1
В этом случае репозиторий Hello-World должен быть доступен на GitHub, это не решает проблему, о которой идет речь.
JuliandotNut
-2

Недавно я узнал о 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!"
anddoutoi
источник
-7

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

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
павана
источник
1
Это не работает; он не создает удаленный репозиторий.
Мэтью Прочитано