web-dev-qa-db-fra.com

Est-il possible de créer un dépôt distant sur GitHub à partir de la CLI sans ouvrir le navigateur?

J'ai créé un nouveau référentiel Git local:

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

Existe-t-il une commande git permettant de créer un nouveau repo distant et d'envoyer mon commit à GitHub à partir d'ici? Je sais que ce n'est pas grave de lancer un navigateur et de se diriger vers créer un nouveau référentiel , mais s'il existe un moyen de réaliser cela à 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 dépôt distant à partir de la CLI à l'aide de commandes git. L'article de Tim Lucas dans Nice Configuration d'un nouveau référentiel git distant est le plus proche que j'ai trouvé, mais GitHub ne fournit pas d'accès à Shell .

331
anddoutoi

Vous pouvez créer un référentiel GitHub via la ligne de commande à l'aide de l'API GitHub. Découvrez le API du référentiel . Si vous faites défiler 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 (à droite ci-dessus, une section qui explique comment un repo avec l'API aussi). Évidemment, vous ne pouvez pas utiliser git pour le faire, mais vous pouvez le faire via la ligne de commande avec un outil tel que curl.

En dehors de l'API, il est impossible 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 à Shell, etc., à part l'API GitHub, le seul moyen de créer un référentiel consiste à utiliser l'interface Web de GitHub.

207
mipadi

Commandes CLI pour github API v3 (remplace 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
312
bennedich

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 vith Github)


Explication de ces commandes ...

Créer un repo 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 également 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 ne donnez que le nom d'utilisateur (comme dans l'exemple ci-dessus), curl demandera un mot de passe.
    • Si vous ne souhaitez pas saisir le mot de passe, consultez la documentation de githubs api sur Authentification
  • "-d" est un paramètre curl qui vous permet d’envoyer POST données 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 vers

git remote add Origin [email protected]:nyeates/projectname.git
  • ajout d'une définition pour l'emplacement et l'existence d'un dépôt connecté (distant) sur github
  • "Origine" est un nom par défaut utilisé par git pour indiquer l'origine de la source
    • techniquement, ne vient pas de github, mais maintenant, le repo de github sera la source de l'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.

Poussez le repo local au github

git Push Origin master
  • Appuyez sur la télécommande d'origine (github) à partir de la branche locale principale
67
Nay

Si vous installez defunkt's excellent Hub outil, alors cela devient aussi simple que

git create

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

50
cavalcade

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

  1. Installez Hub ( GitHub ).

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

      git clone https://github.com/github/hub.git && cd hub && ./script/build
      
  2. Accédez à votre dépôt ou créez-en un vide: mkdir foo && cd foo && git init.

  3. Run: hub create, il vous posera pour la première fois des informations d'identification GitHub.

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

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

    Hub demandera le nom d'utilisateur et le mot de passe GitHub la première fois qu'il aura besoin d'accéder à l'API et l'échangera contre un jeton OAuth qu'il enregistrera dans ~/.config/hub.

    Pour nommer explicitement le nouveau référentiel, passez NAME, éventuellement sous la forme ORGANIZATION/NAME à créer dans une organisation dont vous êtes membre.

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

    Pour éviter d’être invité, utilisez les variables d’environnement GITHUB_USER et GITHUB_PASSWORD.

  4. Puis validez et appuyez comme d'habitude ou vérifiez hub commit/hub Push.

Pour plus d’aide, lancez: hub help.

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

15
kenorb

Il y a un github gem officiel qui, je pense, fait cela. J'essaierai d'ajouter plus d'informations au fur et à mesure que j'apprendrai, mais je viens tout juste de découvrir ce petit bijou, alors je ne sais pas grand chose pour le moment.

UPDATE: Après avoir défini ma clé d'API, je peux créer un nouveau référentiel sur github via la commande create, mais je ne peux pas utiliser la commande create-from-local, qui est supposée utiliser le fichier local en cours. repo et faire une télécommande correspondante sur github.

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

Si quelqu'un a des idées à ce sujet, j'aimerais savoir ce que je fais de travers. Il y a déjà un numéro classé .

UPDATE: 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 (j'ai supprimé le dossier .git).

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

Maintenant, cette ligne va créer le repo distant et même le Push, mais malheureusement, je ne pense pas pouvoir spécifier le nom du repo que je voudrais. Je voulais que cela s'appelle "dotfiles" sur github, mais la gemme gh n'utilisait que le nom du dossier actuel, qui était "jason" puisque j'étais dans mon dossier personnel. (J'ai ajouté n ticket demandant le comportement souhaité)

gh create-from-local

En revanche, cette commande accepte un argument spécifiant le nom du référentiel distant, mais elle est conçue pour démarrer un nouveau projet à partir de zéro, c'est-à-dire qu'après l'appel de cette commande, vous obtenez un nouveau référentiel distant suivi d'un référentiel local. dans un sous-dossier nouvellement créé par rapport à votre position actuelle, les deux avec le nom spécifié comme argument.

gh create dotfiles
11
Jason Marcell

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

Il est difficile 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, à savoir/home/USER_NAME/Desktop/my_scripts nommé githubscript.sh
  2. Modifiez et enregistrez le code suivant dans le fichier 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 [email protected]:YOUR_GITHUB_USER_NAME/$1.git;

NB Ici $1 est le repository name qui est passé en tant que argument lors de l'appel de la script Modifiez YOUR_GITHUB_USER_NAME avant de sauvegarder le script.

  1. Définissez les autorisations requises sur le fichier scriptchmod 755 githubscript.sh

  2. Incluez le répertoire de 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 .bashrc et .profile dans le terminal. source ~/.bashrc ~/.profile;

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

9
Nasif Md. Tanjim

Nope, vous devez ouvrir un navigateur au moins une fois pour créer votre username sur GitHub. Une fois créé, vous pouvez utiliser GitHub API 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"}'
4
Arpit

Pour les utilisateurs disposant d'une authentification à deux facteurs, vous pouvez utiliser la solution bennedich, mais il vous suffit d'ajouter l'en-tête X-Github-OTP pour la première commande. Remplacez CODE par le code obtenu auprès 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
4
user886596

Pour les rubis:

gem install githubrepo
githubrepo create *reponame*

entrez le nom d'utilisateur et le mot de passe comme demandé

git remote add Origin *ctrl v*
git Push Origin master

Source: Elikem Adadevoh

3
Benjamin Dunphy

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

Basé sur l'autre réponse de @Mechanical Snail, sauf sans l'utilisation de python, ce que j'ai trouvé excessivement excessif. 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"
3
robru

J'ai créé un alias Git pour ce faire, basé sur 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, lancez

$ git hub-new-repo

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

3
Mechanical snail

Pour obtenir des instructions sur la création d'un jeton, allez here C’est la commande que vous allez taper (à compter de 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 contenant 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

2
reubano

Pour tous les Python 2.7. * Utilisateurs. Il existe un wrapper Python autour de API Github actuellement en version 3, appelé GitPython . Installez simplement en utilisant easy_install PyGithub ou 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 documents d'objet Repository sont ici .

2
quine

Pour des raisons de représentation, je ne peux pas ajouter ceci sous forme de commentaire (où il serait préférable d'aller avec 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. 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.

2
traycerb

Ce dont vous avez besoin est hub . Hub est un wrapper en ligne de commande pour git. Il a été fait pour s’intégrer avec git natif en utilisant 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
2
cnvzmxcvmcx

Disclamier: Je suis l'auteur du projet open source

Cette fonctionnalité est supportée 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
};
2
Chris Stryczynski

J'ai trouvé cette solution qui me plaisait: 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 vers le 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'"}'
}

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

0
Joshua Dance