Возможно ли создать удаленное репо на 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 в определенном формате API github
- "имя" - единственные необходимые данные 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
С официальным новым интерфейсом командной строки 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):
Зайдите в свой репо или создайте пустой:
mkdir foo && cd foo && git init
,Бежать:
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
переменные средыЗатем совершите и нажмите как обычно или проверьте
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
Более простой подход:
- создать сценарий оболочки в каталоге, например, /home/USER_NAME/Desktop/my_scripts с именем
githubscript.sh
- Измените и сохраните следующий код в
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
перед сохранением скрипта.
Установите необходимые разрешения для
script
файлchmod 755 githubscript.sh
Включите каталог scripts в файл конфигурации среды.
nano ~/.profile; export PATH="$PATH:$HOME/Desktop/my_scripts"
Также установите псевдоним для запуска файла githubscript.sh.
nano ~/.bashrc; alias githubrepo="bash githubscript.sh"
Теперь перезагрузите
.bashrc
а также.profile
файлы в терминале.source ~/.bashrc ~/.profile;
Теперь создать новый репозиторий, т.е.
demo
:githubrepo demo;
И принятый ответ, и ответ, получивший наибольшее количество голосов, уже устарели. Парольная аутентификация устарела и будет удалена 13 ноября 2020 года в 16:00 UTC.
Теперь можно использовать GitHub API с помощью токенов личного доступа.
Вам необходимо (заменить ВСЕ ключевые слова CAPS):
- Создайте личный токен доступа через сайт. Да, вы должны использовать браузер, но только один раз для всех последующих обращений. Надежно храните токен.
- Создайте репо через
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"}'
- Добавьте новый источник и нажмите на него:
git remote add origin git@github.com:USER/REPO.git
git push origin master
Это имеет тот недостаток, что вам нужно каждый раз вводить токен, и он появляется в вашей истории bash.
Чтобы этого избежать, вы можете
- Сохраните заголовок в файле (назовем его, скажем,
HEADER_FILE
)
Authorization: token MY_ACCESS_TOKEN
- Читаем 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
- Чтобы сделать вещи более безопасными, вы можете установить права доступа на 400, а пользователю - root.
chmod 400 HEADER_FILE
sudo chown root:root HEADER_FILE
- Теперь для доступа к заголовочному файлу потребуется 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