Возможно ли создать удаленное репо на 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 не предоставляет доступ к оболочке .

Ответы:


215

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

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


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

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.


Как я могу установить переменные окружения 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. 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

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

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

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

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


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

Для всех пользователей 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) с обратной косой чертой. Я также удалил одинарные кавычки вокруг моего имени пользователя, но если бы у вашего имени пользователя был пробел (возможно?), ему, вероятно, потребовались бы двойные кавычки.


Полезно знать пользователям 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

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

-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
Это не работает; он не создает удаленный репозиторий.
Мэтью Прочитано
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.