Est-il possible de créer un référentiel distant sur GitHub à partir de la CLI sans ouvrir le navigateur?

348

J'ai créé un nouveau dépôt Git local:

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

Existe-t-il une commande git pour créer un nouveau référentiel distant et pousser mon commit sur GitHub à partir d'ici? Je sais que ce n'est pas grave de simplement lancer un navigateur et de créer un nouveau référentiel , mais s'il y a un moyen d'y parvenir à partir de la CLI, je serais heureux.

J'ai lu une grande quantité d'articles mais aucun que j'ai trouvé ne mentionne comment créer un référentiel distant à partir de la CLI en utilisant les commandes git. Bel article de Tim Lucas Mettre en place un nouveau référentiel git distant est le plus proche que j'ai trouvé, mais GitHub ne fournit pas d'accès shell .

anddoutoi
la source

Réponses:

215

Vous pouvez créer un référentiel GitHub via la ligne de commande à l'aide de l'API GitHub. Découvrez l' API du référentiel . Si vous faites défiler vers le bas environ un tiers du chemin, vous verrez une section intitulée "Créer" qui explique comment créer un référentiel via l'API (juste au-dessus, c'est une section qui explique comment créer un référentiel avec l'API, aussi ). Évidemment, vous ne pouvez pas l'utiliser gitpour le faire, mais vous pouvez le faire via la ligne de commande avec un outil comme curl.

En dehors de l'API, il n'y a aucun moyen de créer un dépôt sur GitHub via la ligne de commande. Comme vous l'avez noté, GitHub n'autorise pas l'accès au shell, etc., donc à part l'API GitHub, la seule façon de créer un dépôt est via l'interface Web de GitHub.

mipadi
la source
73
Merci un tas de mipadi! Je ne connaissais pas l'API GitHub. Pour tout le monde avec le même problème, ce que je l'ai fait basiquement: curl -F 'login=username' -F 'token=API Token' https://github.com/api/v2/yaml/repos/create -F name=reponame. Votre jeton API peut être trouvé sur le site GitHub, cliquez sur Paramètres du compte , recherchez les informations administratives et le jeton API (chaîne longue de 32 caractères).
anddoutoi
1
Il semble que ce soit obsolète, du moins je n'y trouve pas le jeton API.
Joachim Breitner
12
API Version 3 Syntaxe donnée ci-dessous via @bennedich stackoverflow.com/a/10325316/305633
JiminyCricket
2
@cseder: Git n'en a pas besoin pour créer un dépôt, mais en configurer un sur GitHub le fait. Je ne pense pas que Mercurial vous permette de créer un référentiel sur un serveur distant en poussant vers un référentiel inexistant non plus.
mipadi
5
@cseder: La question est de savoir s'il est possible de créer un référentiel distant sur GitHub via l'API GitHub, pas comment créer un nouveau référentiel et le pousser vers un référentiel existant sur GitHub.
mipadi
321

Commandes CLI pour github API v3 (remplacer tous les mots clés 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 [email protected]:USER/REPO.git
git push origin master
Bennedich
la source
43
Le léger problème avec la première commande est que vous laissez votre mot de passe GitHub dans votre ~/.bash_history. Je suggère de remplacer -u 'USER:PASS'par -u 'USER', puis curl vous demandera le mot de passe de manière interactive.
ivanzoid
20
Pour rendre le repo privé dès le début, utilisez:curl -u 'USER' https://api.github.com/user/repos -d '{"name":"REPO", "private":"true"}'
Joe Fletcher
3
J'ai écrit un script bash pour nous faire économiser de la frappe. Prend l'entrée de l'utilisateur et a des valeurs par défaut sensibles: gist.github.com/robwierzbowski/5430952
RobW
3
Voici comment l'ajouter en tant git config --global alias.gh-create '!sh -c "curl -u \"USERNAME\" https://api.github.com/user/repos -d \"{\\\"name\\\":\\\"$1\\\"}\"" -'
Robin Winslow
13
Ne pas oublier que vous pouvez générer un jeton d' accès et de l' utiliser de cette façon: curl https://api.github.com/user/repos?access_token=myAccessToken -d '{"name":"REPO"}'. :-)
Ionică Bizău
69

Cela peut être fait avec trois commandes:

curl -u 'nyeates' https://api.github.com/user/repos -d '{"name":"projectname","description":"This project is a test"}'
git remote add origin [email protected]:nyeates/projectname.git
git push origin master

(mis à jour pour l'API Github v3)


Explication de ces commandes ...

Créer un dépôt github

    curl -u 'nyeates' https://api.github.com/user/repos -d '{"name":"projectname","description":"This project is a test"}'
  • curl est une commande unix (ci-dessus fonctionne aussi sur mac) qui récupère et interagit avec les URL. Il est généralement déjà installé.
  • "-u" est un paramètre curl qui spécifie le nom d'utilisateur et le mot de passe à utiliser pour l'authentification du serveur.
    • Si vous donnez simplement le nom d'utilisateur (comme indiqué dans l'exemple ci-dessus) curl vous demandera un mot de passe.
    • Si vous ne voulez pas avoir à taper le mot de passe, consultez la documentation de l'api githubs sur l' authentification
  • "-d" est un paramètre curl qui vous permet d'envoyer des données POST avec la requête
  • "nom" est la seule donnée POST requise; J'aime aussi inclure "description"
  • J'ai trouvé qu'il était bon de citer toutes les données POST avec des guillemets simples ''

Définir où pousser

git remote add origin [email protected]:nyeates/projectname.git
  • ajouter la définition de l'emplacement et de l'existence du dépôt (distant) connecté sur github
  • "origine" est un nom par défaut utilisé par git pour savoir d'où vient la source
    • techniquement ne vient pas de github, mais maintenant le repo github sera la source d'enregistrement
  • "[email protected]: nyeates" est une connexion ssh qui suppose que vous avez déjà configuré une paire de clés ssh de confiance avec github.

Pousser le dépôt local vers Github

git push origin master
  • pousser vers la télécommande d'origine (github) depuis la branche locale principale
Non
la source
54

Si vous installez l' excellent outil Hub de defunkt , cela devient aussi simple que

git create

Selon les mots de l'auteur, " hub est un wrapper de ligne de commande pour git qui vous rend meilleur chez GitHub. "

cavalcade
la source
3
J'AIME hub! Est également utile le hub- ou comme hubc'est généralement le cas pour git... git fork, ce qui crée un fork du référentiel pour le pwdréférentiel cloné dans lequel vous vous trouvez ... Yay.
Alex Gray
2
cet outil est génial! Il prend soin de stocker votre jeton d'authentification pour que vous n'ayez pas à taper votre mot de passe encore et encore. Consultez également le plugin ZSH pour github.
Dorian
19

Étapes simples (en utilisant git+ hub=> GitHub ):

  1. Installez Hub ( GitHub ).

    • OS X: brew install hub
    • avoir Go :go get github.com/github/hub
    • sinon (avoir Go aussi):

      git clone https://github.com/github/hub.git && cd hub && ./script/build
      
  2. Accédez à votre prise en pension ou en créer un vide: mkdir foo && cd foo && git init.

  3. Exécuter:, hub createil vous posera des questions sur les informations d'identification GitHub pour la première fois.

    Usage: hub create [-p] [-d DESCRIPTION] [-h HOMEPAGE] [NAME]

    Exemple: hub create -d Description -h example.com org_name/foo_repo

    Le hub demandera le nom d'utilisateur et le mot de passe GitHub la première fois qu'il a besoin d'accéder à l'API et de l'échanger contre un OAuthjeton, qu'il enregistre ~/.config/hub.

    Pour nommer explicitement le nouveau référentiel, passez-le NAME, éventuellement sous ORGANIZATION/NAMEforme pour créer sous une organisation dont vous êtes membre.

    Avec -p, créez un référentiel privé, et avec -det -hdéfinissez respectivement la description et la page d'accueil du référentiel URL.

    Pour éviter d'être invité, utilisez GITHUB_USERet GITHUB_PASSWORDvariables d'environnement.

  4. Ensuite, validez et appuyez comme d'habitude ou cochez hub commit/ hub push.

Pour plus d' aide, exécutez: hub help.

Voir aussi: Importer un référentiel Git à l'aide de la ligne de commande sur GitHub.

kenorb
la source
Comment puis-je définir les variables d'environnement GITHUB_USER et GITHUB_PASSWORD?
Kasper
1
Vous pouvez probablement les exporter, voir: GH # 245 .
kenorb
1
Fonctionné très bien pour moi, la note "hub" est également disponible sur MacPorts.
tiktak
Je pense que c'est ce que je cherchais! :)
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ
11

Il y a un joyau github officiel qui, je pense, fait cela. J'essaierai d'ajouter plus d'informations au fur et à mesure que j'apprendrai, mais je ne fais que découvrir ce joyau, donc je ne sais pas encore grand-chose.

MISE À JOUR: Après avoir défini ma clé API, je suis capable de créer un nouveau dépôt sur github via la createcommande, mais je ne suis pas en mesure d'utiliser la create-from-localcommande, qui est censée prendre le dépôt local actuel et faire une télécommande correspondante sur github.

$ gh create-from-local
=> error creating repository

Si quelqu'un a un aperçu de cela, j'aimerais savoir ce que je fais mal. Un problème a déjà été déposé .

MISE À JOUR: J'ai finalement réussi à faire fonctionner cela. Je ne sais pas exactement comment reproduire le problème, mais je viens de recommencer à zéro (suppression du dossier .git)

git init
git add .emacs
git commit -a -m "adding emacs"

Maintenant, cette ligne va créer le référentiel distant et même pousser vers lui, mais malheureusement, je ne pense pas pouvoir spécifier le nom du référentiel que j'aimerais. Je voulais qu'il soit appelé "dotfiles" sur github, mais la gemme gh a juste utilisé le nom du dossier actuel, qui était "jason" puisque j'étais dans mon dossier personnel. (J'ai ajouté un ticket demandant le comportement souhaité)

gh create-from-local

Cette commande, en revanche, accepte un argument pour spécifier le nom du référentiel distant, mais elle est destinée à démarrer un nouveau projet à partir de zéro, c'est-à-dire qu'après avoir appelé cette commande, vous obtenez un nouveau référentiel distant qui suit un référentiel local dans un sous-dossier nouvellement créé par rapport à votre position actuelle, tous deux avec le nom spécifié comme argument.

gh create dotfiles
Jason Marcell
la source
3
Ce projet n'a pas eu de travail sur lui depuis quelques années, n'a pas fonctionné pour moi, et, comme impliqué ici , est mort. Il a apparemment été remplacé par l' outil hub , comme suggéré dans cette réponse .
jameshfisher
9

Pour créer rapidement le référentiel distant à l'aide d'un shell Bash

Il est fastidieux de taper le code complet chaque fois qu'un référentiel doit être créé

curl -u 'USER' https://api.github.com/user/repos -d '{"name":"REPO"}' git remote add origin [email protected]:USER/REPO.git git push origin master

Une approche plus simple consiste à:

  1. créer un script shell dans un répertoire ie / home / USER_NAME / Desktop / my_scripts nommé githubscript.sh
  2. Modifiez et enregistrez le code suivant dans le githubscript.shfichier
#!bin/bash
curl -u 'YOUR_GITHUB_USER_NAME' https://api.github.com/user/repos -d "{\"name\":\"$1\"}";
git init;
git remote add origin [email protected]:YOUR_GITHUB_USER_NAME/$1.git;

NB Voici $1le repository namequi est passé en tant que argumentlors de l'appel de lascript modification YOUR_GITHUB_USER_NAMEavant d'enregistrer le script.

  1. Définissez les autorisations requises sur le scriptfichier chmod 755 githubscript.sh

  2. Incluez le répertoire des scripts dans le fichier de configuration de l'environnement. nano ~/.profile; export PATH="$PATH:$HOME/Desktop/my_scripts"

  3. Définissez également un alias pour exécuter le fichier githubscript.sh. nano ~/.bashrc; alias githubrepo="bash githubscript.sh"

  4. Rechargez maintenant les fichiers .bashrcet .profiledans le terminal. source ~/.bashrc ~/.profile;

  5. Maintenant, pour créer un nouveau référentiel, c'est demo-à- dire : githubrepo demo;

Nasif Md. Tanjim
la source
1
Dans votre code, j'ai changé cette partie: git remote add origin [email protected]:YOUR_GITHUB_USER_NAME/$1.git; pour les git remote add origin https://github.com/YOUR_GITHUB_USER_NAME/$1.git; utilisateurs qui n'utilisent pas la clé SSH.
Damiii
5

Basé sur l'autre réponse de @Mechanical Snail, sauf sans l'utilisation de python, que j'ai trouvé excessivement exagéré. Ajoutez ceci à votre ~/.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 [email protected]:$GHUSER/$REPO.git; git push origin master"
robru
la source
J'adore cet alias. Merci encore, @Robru. PS si cela ne fonctionne pas ou cesse de fonctionner après une nouvelle installation du système d'exploitation .. assurez-vous que curl est installé!
daveloyall
5

Non, vous devez ouvrir un navigateur au moins une fois pour créer votre usernamesur GitHub, une fois créé, vous pouvez utiliser l'API GitHub pour créer des référentiels à partir de la ligne de commande, en suivant la commande ci-dessous:

curl -u 'github-username' https://api.github.com/user/repos -d '{"name":"repo-name"}'

Par exemple:

curl -u 'arpitaggarwal' https://api.github.com/user/repos -d '{"name":"command-line-repo"}'
Arpit Aggarwal
la source
1
Ensuite, git remote add origin https://github.com/github-username/repo-name.gitpour lier votre projet local à github. Pour l'exemple, la commande ressemblerait à ceci:git remote add origin https://github.com/arpitaggarwal/command-line-repo.git
SherylHohman
4

Pour les utilisateurs avec une authentification à deux facteurs, vous pouvez utiliser la solution de bennedich, mais il vous suffit d'ajouter l'en-tête X-Github-OTP pour la première commande. Remplacez CODE par le code que vous obtenez du fournisseur d'authentification à deux facteurs. Remplacez USER et REPO par le nom d'utilisateur et le nom du référentiel, comme vous le feriez dans sa solution.

curl -u 'USER' -H "X-GitHub-OTP: CODE" -d '{"name":"REPO"}' https://api.github.com/user/repos
git remote add origin [email protected]:USER/REPO.git
git push origin master
user886596
la source
3

J'ai écrit un script astucieux pour cela appelé Gitter utilisant les API REST pour GitHub et 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 = créer un nouveau référentiel
  • -r = fournisseur de référentiel (g = GitHub, b = BitBucket)
  • -n = nommez le repo
  • -l = (facultatif) définissez la langue de l'application dans le référentiel
D.Deriso
la source
3

J'ai créé un alias Git pour ce faire, basé sur la réponse de Bennedich . Ajoutez ce qui suit à votre ~/.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\", \"[email protected]:{0}/{1}.git\".format(user, repo)]); check_call([\"git\", \"push\", \"origin\", \"master\"])'"

Pour l'utiliser, exécutez

$ git hub-new-repo

depuis n'importe où dans le référentiel local et entrez votre mot de passe Github lorsque vous y êtes invité.

Escargot mécanique
la source
Cela n'a pas fonctionné pour moi. Il renvoie «Aucun fichier ou répertoire de ce type»
adamwong246
Cela n'a pas fonctionné pour moi non plus. Il revientcurl: (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
Da Frenk
1
L'utilisation de python est un peu trop et ajoute beaucoup de bruit sous la forme de barres obliques inverses supplémentaires et d'autres ponctuations. J'ai fait une version avec juste bash: stackoverflow.com/a/28924077/1423157
robru
3

Ce dont vous avez besoin, c'est d'un hub . Hub est un wrapper de ligne de commande pour git. Il a été conçu pour s'intégrer à git natif en utilisant un alias. Il essaie de fournir des actions github dans git, y compris la création d'un nouveau référentiel.

→  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
la source
3

Pour les rubis:

gem install githubrepo
githubrepo create *reponame*

entrez le nom d'utilisateur et pw comme demandé

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

Source: Elikem Adadevoh

Benjamin Dunphy
la source
3

Pour tous les utilisateurs de Python 2.7. *. Il existe un wrapper Python autour de l' API Github qui est actuellement sur la version 3, appelé GitPython . Installez simplement en utilisant easy_install PyGithubou 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)

Les Repositorydocuments d'objet sont ici .

quine
la source
2

Pour obtenir des instructions sur la création d'un jeton, cliquez ici. Voici la commande que vous saisirez (à la date de cette réponse. (Remplacez tous les mots clés CAPS):

curl -u 'YOUR_USERNAME' -d '{"scopes":["repo"],"note":"YOUR_NOTE"}' https://api.github.com/authorizations

Une fois que vous avez entré votre mot de passe, vous verrez ce qui suit qui contient votre jeton.

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

Vous pouvez révoquer votre jeton à tout moment en allant ici

reubano
la source
2

Pour des raisons de représentant, je ne peux pas ajouter ceci en tant que commentaire (où cela irait mieux avec la réponse de Bennedich ), mais pour la ligne de commande Windows, voici la syntaxe correcte:

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

C'est la même forme de base, mais vous devez utiliser des guillemets doubles (") au lieu de simples, et échapper les guillemets doubles envoyés dans les paramètres POST (après l'indicateur -d) avec des barres obliques inverses. J'ai également supprimé les guillemets simples autour de mon nom d'utilisateur, mais si votre nom d'utilisateur avait un espace (possible?), il aurait probablement besoin de guillemets doubles.

plateau
la source
Bon à savoir pour les utilisateurs de Windows. Non, les noms d'utilisateur ne peuvent pas contenir d'espaces (le formulaire d' inscription sur github.com indique: "Le nom d'utilisateur ne peut contenir que des caractères alphanumériques ou des tirets simples, et ne peut pas commencer ou se terminer par un trait d'union"). Ainsi, aucune citation double du nom d'utilisateur n'est nécessaire.
mklement0
Github Power Shell n'accepte pas -u avec curl, sur Windows :(
JuliandotNut
2

Disclamier: je suis l'auteur du projet open source

Cette fonctionnalité est prise en charge par: https://github.com/chrissound/Human-Friendly-Commands c'est essentiellement ce script:

#!/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 [email protected]:"$GITHUB_USER"/"$projName".git
  git push origin master
};
Chris Stryczynski
la source
C'est en effet la nouvelle façon d'utiliser un GitHub Personal Access Token . (L'ancienne façon de l'ajouter via ?access_token=${ACCESSTOKEN}ne fonctionne plus.
not2qubit
0

J'ai trouvé cette solution qui m'a plu: https://medium.com/@jakehasler/how-to-create-a-remote-git-repo-from-the-command-line-2d6857f49564

Vous devez d'abord créer un jeton d'accès personnel Github

Ouvrez votre ~ / .bash_profile ou ~ / .bashrc dans votre éditeur de texte préféré. Ajoutez la ligne suivante près du haut de votre fichier, où se trouvent les autres variables exportées:

export GITHUB_API_TOKEN=<your-token-here>

Quelque part ci-dessous, par vos autres fonctions bash, vous pouvez coller quelque chose de similaire au suivant:

function new-git() {
    curl -X POST https://api.github.com/user/repos -u <your-username>:$GITHUB_API_TOKEN -d '{"name":"'$1'"}'
}

Désormais, chaque fois que vous créez un nouveau projet, vous pouvez exécuter la commande $ new-git awesome-repopour créer un nouveau référentiel public distant sur votre compte utilisateur Github.

Joshua Dance
la source
-2

voici mes premières commandes git (éventuellement, cette action a lieu dans 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
la source
1
Le repo Hello-World devrait être disponible sur GitHub dans ce cas, ne résout pas le problème dans la question.
JuliandotNut
-2

J'ai récemment découvert create-github-repo . Du fichier Lisezmoi:

Installer:

$ npm i -g create-github-repo

Usage:

$ export CREATE_GITHUB_REPO_TOKEN=<access_token>
$ create-github-repo --name "My coolest repo yet!"

Ou:

$ create-github-repo <access_token> --name "My coolest repo yet!"
anddoutoi
la source
-7

créer un nouveau référentiel sur la ligne de commande

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

pousser un référentiel existant depuis la ligne de commande

git remote add origin https://github.com/**<gituserID>/<RepositoryName>**.git

git push -u origin master
Pavan
la source
1
Cela ne fonctionne pas; il ne crée pas le référentiel distant .
Matthew Read