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?
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
--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
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:
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:
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.
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:
git-repo a fait le sale boulot pour vous. Il prend également en charge GitLab, GitHub et Bitbucket.
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
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
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
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
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
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é