Чи можливо створити віддалений репо на 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 через командний рядок за допомогою API GitHub. Перевірте 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 за допомогою API GitHub, а не як створити нове репо і натиснути на існуюче на GitHub.
mipadi

321

Команди 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: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 repo

    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 із запитом
  • "name" - єдині необхідні дані 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) від головного місцевого відділення

54

Якщо ви встановите чудовий інструмент Hub defunkt , це стане так само просто

git create

За словами автора, " hub - це обгортка командного рядка для git, яка робить вас кращими в GitHub ".


3
Я люблю hub! Також корисним є hub- або як hubце зазвичай псевдоніми до git... git fork, що створює вилку репо для pwdклонованого репо, в якому ви перебуваєте ... Так.
Алекс Грей

2
цей інструмент приголомшливий! Він дбає про збереження токена аутентифікації для вас, щоб вам не довелося вводити пароль знову і знову. Також перевірте плагін ZSH для github.
Доріан

19

Прості дії (за допомогою git+ hub=> GitHub ):

  1. Встановити концентратор ( GitHub ).

    • ОС 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, який, я думаю, це робить. Я спробую додати більше інформації, коли я дізнаюся, але я лише зараз відкриваю цей дорогоцінний камінь, тому я ще не знаю багато чого.

ОНОВЛЕННЯ: Після встановлення мого ключа 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"

Тепер цей рядок створить віддалене репо і навіть підштовхне його, але, на жаль, я не думаю, що я можу вказати ім'я репо, яке б я хотів. Я хотів, щоб його називали "dotfiles" на github, але gh gem просто використав назву поточної папки, яка була "жасоном", оскільки я був у своїй домашній папці. (Я додав квиток із проханням про бажану поведінку)

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;

Примітка. Ось $1те, repository nameщо передається як argumentвикликscript Зміни YOUR_GITHUB_USER_NAMEперед збереженням сценарію.

  1. Встановіть необхідні дозволи для scriptфайлу chmod 755 githubscript.sh

  2. Додайте каталог сценаріїв у файл конфігураційного середовища. 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.
Damiii

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

Ні, вам потрібно відкрити браузер щонайменше один раз, щоб створити ваш usernameGitHub, після створення, ви можете використовувати API GitHub для створення сховищ з командного рядка, виконуючи наступну команду:

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 для першої команди. Замініть КОД на код, який ви отримаєте від двофакторного постачальника аутентифікації. Замініть 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, використовуючи API REST для 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 = постачальник repo (g = GitHub, b = BitBucket)
  • -n = назвіть репо
  • -l = (необов’язково) встановити мову програми в репо

3

Я створив псевдонім 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
Використання пітона трохи більше і додає багато шуму у вигляді додаткових нахилів та інших пунктуацій. Я зробив версію з тільки Баш: stackoverflow.com/a/28924077/1423157
robru

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


3

Для всіх користувачів Python 2.7. * Навколо API Github існує обгортка Python, яка наразі є у версії 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

Для вказівки щодо створення маркера перейдіть сюди Це команда, яку ви введете (станом на дату цієї відповіді. (Замініть усі ключові слова 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

З причини реп я не можу додати це як коментар (куди краще піти з відповіддю Беннедіха ), але для командного рядка Windows ось правильний синтаксис:

curl -u YOUR_USERNAME https://api.github.com/user/repos -d "{\" ім'я \ ": \" YOUR_REPO_NAME \ "}"

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


Корисно знати для користувачів Windows. Ні, імена користувачів не можуть містити пробілів (Форма реєстрації на сайті github.com зазначає: "Ім'я користувача може містити лише буквено-цифрові символи або окремі дефіси, і не може починатися або закінчуватися дефісом"). Таким чином, не потрібне подвійне цитування імені користувача.
mklement0

Оболонка живлення Github не приймає -u з завитком у Windows :(
JuliandotNut

2

Відмова: Я є автором проекту з відкритим кодом

Ця функціональність підтримується: 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

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.