web-dev-qa-db-fra.com

Comment créer un nouveau dépôt gitlab à partir de mon dépôt local existant, à l'aide de la CLI?

J'ai de nombreux dépôts git locaux sur mon OSX. À l’aide de la ligne de commande, je souhaite effectuer de nouveaux dépôts dans gitlab sur https://gitlab.ccompanyname.com , à partir du dépôt local existant.

Est-il possible de faire ça? 

34
Jitendra Vyas

Créez de nouveaux projets vides dans GitLab pour chacun de vos dépôts locaux que vous souhaitez envoyer à GitLab. Après avoir créé le projet, vous serez redirigé vers la page de projet par défaut. 

Puis cd dans chacun de vos dépôts git existants. Faites un git remote add Origin <your new gitlab repo address>

Et puis un git Push -u Origin master

Vous devrez le faire pour chacun des dépôts que vous souhaitez ajouter.

Votre adresse de dépôt vous est donnée sur la page du projet. Comme http et/ou ssh. Si vous avez déjà une télécommande appelée Origin sur votre ordinateur local, vous voudrez peut-être d'abord la renommer. Ou vous pouvez appeler le gitlab un nom différent. De plus, si vous voulez envoyer toutes vos branches à gitlab, vous pouvez faire un git Push --all Origin Si vous voulez vos tags, git Push --tags Origin

47
twk3

Solution 2018: utilisez simplement --set-upstream

En supposant que vous preniez soin de rédiger le script qui ferait ce qui suit pour chaque dépôt local, il semble que, à partir de Gitlab 10.5, vous pouvez simplement utiliser 

git Push --set-upstream address/your-project.git

Cela créera un nouveau projet sur Gitlab sans que vous le créiez manuellement sur le serveur


De la documentation

Push pour créer un nouveau projet

Lorsque vous créez un nouveau référentiel localement, au lieu d'aller dans GitLab pour créer manuellement un nouveau projet, puis appuyez sur le référentiel, vous pouvez directement le transférer dans GitLab pour créer le nouveau projet, sans quitter votre terminal. Si vous avez accès à cet espace de noms, nous créerons automatiquement un nouveau projet sous cet espace de noms GitLab avec sa visibilité définie sur Privé par défaut (vous pourrez le modifier ultérieurement dans les paramètres du projet).

Cela peut être fait en utilisant soit SSH ou HTTP:

## Git Push using SSH
git Push --set-upstream [email protected]:namespace/nonexistent-project.git master

## Git Push using HTTP
git Push --set-upstream https://gitlab.example.com/namespace/nonexistent-project.git master

Une fois le Push terminé, un message distant indique la commande permettant de définir la télécommande et l'URL du nouveau projet:

remote:
remote: The private project namespace/nonexistent-project was created.
remote:
remote: To configure the remote, run:
remote:   git remote add Origin https://gitlab.example.com/namespace/nonexistent-project.git
remote:
remote: To view the project, visit:
remote:   https://gitlab.example.com/namespace/nonexistent-project
remote:
17
ted

Je suis d’accord avec vous pour dire que la documentation du wrapper API de Gitlab des applications tierces n’est pas idéale, mais j’ai réussi à en faire fonctionner une.

Pour cela, j'ai configuré un serveur sandbox gitlab (GitLab Community Edition 8.0.5) dans une boîte de dialogue vagabonde exécutant Ubuntu 14.04.

Maintenant, le wrapper d'API que j'ai utilisé est celui-ci (python-gitlab sur Gauvain Pocentek). J'ai choisi celui-ci parce qu'il contient suffisamment de personnes (118 au moment de l'écriture) et qu'il est écrit en python pour que la portabilité ne soit pas un problème (ma machine hôte est Windows avec cygwin , mais j'utiliserai la syntaxe unix pour cette réponse).

L'installation est assez facile avec pip:

$ Sudo pip install python-gitlab

Une fois installé, vous devrez modifier un fichier de configuration qui n'existe pas prêt à l'emploi ou, du moins, je ne pouvais pas le localiser (la documentation n'était pas claire à ce sujet). Le nom "officiel" de ce fichier est .python-gitlab.cfg et il s'agit de celui que config.py recherche par défaut.

Quoi qu'il en soit, j'ai créé ma propre version de .python-gitlab.cfg basée sur l'exemple de syntaxe trouvé dans le fichier github du projet, qui se présente comme suit:

[global]
# required setting
default = local
# optional settings
ssl_verify = false
timeout = 5

[local]
# url = http://10.0.3.2:8080
# get the private token from the gitlab web interface
# private_token = vTbFeqJYCY3sibBP7BZM

[remote]
url = YOUR SERVER URL GOES HERE
private_token = YOUR PRIVATE TOKEN GOES HERE
ssl_verify = false

[remote-ssl]
url = YOUR HTTPS URL GOES HERE (eg https://gitlab.ccompanyname.com))
private_token = YOUR PRIVATE TOKEN GOES HERE
ssl_verify = true (VALID CERTIFICATE) OR false (SELF-SIGNED CERTIFICATE)

Vous devrez vous procurer un jeton privé à partir de l'interface Web (présent dans Paramètres du profil :: Compte) car, comme l'indique le README,

Seule l’authentification par jeton privé est prise en charge (pas utilisateur/mot de passe).


Une fois que cela est fait, créer un projet peut être réalisé comme ceci, pour http:

$ gitlab -c "PATH/TO/YOUR/.python-gitlab.cfg" --gitlab remote project create --name YOUR_PROJECT_NAME

et comme ceci pour https:

$ gitlab -c "PATH/TO/YOUR/.python-gitlab.cfg" --gitlab remote-ssl project create --name YOUR_PROJECT_NAME

Les commutateurs utilisés ci-dessus peuvent être trouvés en consultant l'aide:

$ gitlab --help

Maintenant, en supposant que vous vous êtes occupé des clés SSH (localement et dans l'interface Web) et que vous voulez que les noms de référentiels gitlab soient les mêmes que les répertoires de votre git local, Le petit script bash comme celui-ci peut automatiser la création du projet et le dépôt local. Push:

#!/usr/bin/bash

cd 'PATH/TO/YOUR/REPOS/DIRECTORY' # enter your local repos dir here
server="YOUR SERVER" # enter your server URL
user="YOUR USER" # enter your user name
gitlab_cfg="PATH/TO/YOUR/.python-gitlab.cfg" # enter the location of config file
#method="remote" # uncomment for http, comment for https
method="remote-ssl" # uncomment for https, comment for http
for i in $( ls -1 ); do 
    echo
    echo
    echo '>> Creating Project'
    gitlab -c $gitlab_cfg --gitlab $method project create --name $i
    echo '>> Project ' $i 'created'
    echo '>> ------'
    cd $i
    li=$( tr '[A-Z]' '[a-z]' <<< $i) # convert dirname to lowercase, safe with older bashes (<4)
    Origin="git@$server:$user/$li.git"
    echo ">> Reassigning Origin to : $Origin"
    git remote rm Origin
    git remote add Origin $Origin
    git remote -v
    echo '>> Pushing local repo to gitlab'
    git Push -u Origin master
    echo '>> Done'
    echo
    echo
    cd ..
done
echo
echo 'Operation finished'

Cela crée des projets gitlab nommés d'après les noms trouvés dans le répertoire git local externe, puis des variables cd dans chacun d'eux, renouvelle l'Origine puis exécute le Push.

Une chose à mentionner ici est que gitlab convertit les URL de dépôt en minuscules, par exemple, sampleRepo001 devient samplerepo001 dans l'URL du référentiel; c'est pourquoi je convertis des noms de répertoire en minuscules dans le script.

Et, enfin, voici un exemple d'exécution du script:

enter image description here

Pour rappel, si vous souhaitez utiliser ce script, effectuez un test complet avant de l'appliquer au serveur de production réel.


Update - J'ai ajouté quelques informations supplémentaires sur la gestion du protocole HTTPS/SSL.

9
sokin

Si vous utilisez nodejs, ou même si vous en avez une compréhension simple, le module node-gitlab est génial. Sur une instance Gitlab auto-hébergée, j'ai pu créer des projets et importer le dépôt à partir d'un référentiel distant (un serveur git local). Le processus doit être similaire pour un référentiel local. Vous pouvez configurer un serveur Git local sur votre ordinateur et l'utiliser comme import_url pour chaque projet Gitlab.

Ou bien, vous pouvez écrire un script qui utilisera l'API pour créer le projet, puis chargez chaque référentiel dans son projet respectif.

Pseudocode: Pour chaque repo dans le répertoire:

  • Utiliser l'API pour créer un projet sur gitlab.com
  • git à distance ajouter gitlab url-to-gitlab-repo
  • git Push gitlab --mirror
1
user3606666

git-repo a fait le sale boulot pour vous. Il prend également en charge GitLab, GitHub et Bitbucket.

1. Installation

apt-get install python-pip
pip install git-repo

vous aurez peut-être besoin de pip3 si la commande ci-dessus ne fonctionne pas.

(optional)
apt-get install python3-pip
pip3 install git-repo

2 configuration

2.1 configuration nécessaire

git repo config

L’outil en ligne de commande vous demandera, étape par étape, si vous souhaitez configurer bitbucket, github, un compte gitlab, appuyez sur 'y/n' et sur nom d’utilisateur/mot de passe en conséquence. Si vous ne savez pas ce que cela signifie, appuyez sur 'n' pour sauter. Le fichier de configuration sera généré dans ~/.gitconfig. Vous voudrez peut-être le modifier ensuite. 

(facultatif) par exemple, vous pouvez définir manuellement le jeton dans ~/.gitconfig comme suit:

[gitrepo "gitlab"]
    token = xxxxxxx
[gitrepo "github"]
    token = xxxxxxx

2.2 meilleur raccourci

ajoute les lignes suivantes à ~/.gitconfig. 

[alias]
hub = repo hub
lab = repo lab

pourquoi? 

Parce que maintenant vous pouvez simplement utiliser shortcut
git lab clone/howto 
git hub clone/howto 
A l'avenir. 
Note : vous avez besoin de authentication pour cloner les dépôts private

2.3 (facultatif) ajout de droits d'autorisations privées

cd ~/.ssh

voyez si vous avez le fichier id_rsa.pub. pub signifie un fichier public et je vous recommande juste copy tout le contenu et paste sur la page Web publique gitlab.com. 
Terminé.
Vous ne devez pas montrer aux autres utilisateurs le fichier correspondant id_rsa, qui est la clé pour accéder au référentiel gitlab. Les autres clients/ordinateurs ayant id_rsa, avec la permission chmod 600 id_rsa, pourront contrôler le référentiel.

si vous ne voyez pas id_rsa.pub, vous pouvez le générer en utilisant:

ssh-keygen -t rsa

Appuyez sur enter pour le laisser par défaut. Vous pouvez maintenant voir id_rsa.pub et id_rsa dans le répertoire ~/.ssh. Si vous utilisez un nom autre que id_rsa par défaut, vous devez modifier le fichier ~/.ssh/config comme suit:

# private account
Host github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github

3. Utilisation de git-repo

lorsque vous démarrez un nouveau projet, vous souhaitez créer un nouveau référentiel , en dehors de GitLab, pour envoyer à:

git lab create <username>/howto

bien sûr, vous pouvez supprimer, lister les référentiels, ou faire autre chose.

git lab delete <username>/howto
git lab list <username>
git lab clone <username>/howto
git clone [email protected]:<username>/howto


Exemple pratique

En supposant que vous ayez développé un répertoire myproject local avec git validé pendant un certain temps. Maintenant, vous voulez télécharger sur GitLab.

créer un repo distant dans gitlab. Vous verrez le nom d'utilisateur/mon projet dans la page gitlab.

git lab create username/myproject

En supposant qu'il y ait un fichier .git dans le répertoire myproject local

cd myproject

lier le répertoire local au dépôt distant gitlab.com.

git lab add username/myproject

télécharger le répertoire de mon projet sur gitlab.com

git Push -u gitlab master

terminé

0
anonymous