web-dev-qa-db-de.com

Wie erstelle ich ein neues Gitlab Repo aus meinem vorhandenen lokalen Git Repo mit CLI?

Ich habe viele lokale Git Repos auf meinem OSX. Mit der Befehlszeile möchte ich neue Gitlab-Repos unter https://gitlab.ccompanyname.com erstellen, um vorhandene lokale Repos zu bilden.

Kann man das machen? 

34
Jitendra Vyas

Erstellen Sie in GitLab neue leere Projekte für jedes Ihrer lokalen Repos, die Sie in GitLab verschieben möchten. Nachdem Sie das Projekt erstellt haben, werden Sie zur Standardprojektseite weitergeleitet. 

Dann cd in jedes Ihrer bestehenden Git Repos. Einen git remote add Origin <your new gitlab repo address> machen

Und dann ein git Push -u Origin master

Sie müssen dies für jedes Ihrer Repos tun, das Sie hinzufügen möchten.

Ihre Repo-Adresse erhalten Sie auf der Projektseite. Wie http und/oder ssh. Wenn Sie bereits einen Remote namens Origin auf Ihrem lokalen Computer haben, möchten Sie ihn möglicherweise zuerst umbenennen. Oder man kann das Gitlab etwas anderes nennen. Wenn Sie alle Ihre Zweige zu Gitlab verschieben möchten, können Sie einen git Push --all Origin ausführen. Wenn Sie Ihre Tags möchten, git Push --tags Origin

47
twk3

2018 Lösung: verwenden Sie einfach --set-upstream

Angenommen, Sie schreiben das Skript, das für jedes Ihrer lokalen Repos Folgendes ausführt, und ab Gitlab 10.5 können Sie dies ganz einfach tun verwenden

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

Dadurch wird ein neues Projekt auf Gitlab erstellt , ohne dass Sie es manuell auf dem Server erstellen müssen .


Aus der Dokumentation

Drücken Sie, um ein neues Projekt zu erstellen

Wenn Sie lokal ein neues Repo erstellen, können Sie anstelle von GitLab, um manuell ein neues Projekt zu erstellen, und dann das Repo per Push direkt an GitLab senden, um das neue Projekt zu erstellen, ohne Ihr Terminal zu verlassen. Wenn Sie Zugriff auf diesen Namespace haben, erstellen wir automatisch ein neues Projekt unter diesem GitLab-Namespace, dessen Sichtbarkeit standardmäßig auf Privat festgelegt ist (Sie können es später in den Projekteinstellungen ändern).

Dies kann mithilfe von SSH oder HTTP erfolgen:

## 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

Sobald der Push erfolgreich abgeschlossen wurde, wird in einer Remote-Nachricht der Befehl zum Festlegen der Remote-Adresse und der URL für das neue Projekt angezeigt:

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:
26
ted

Ich muss Ihnen zustimmen, dass die Dokumentation für den API-Wrapper von Gitlab Anwendungen von Drittanbietern nicht ideal ist, jedoch habe ich es geschafft, eine davon zum Laufen zu bringen.

Dazu habe ich einen Sandbox-Gitlab-Server (GitLab Community Edition 8.0.5) in einer Vagrant-Box mit Ubuntu 14.04 eingerichtet.

Nun, der verwendete API-Wrapper ist this (python-gitlab von Gauvain Pocentek). Ich habe mich für dieses Modell entschieden, da es von genügend Leuten (zum Zeitpunkt des Schreibens 118) in der Hauptrolle dargestellt wird und es in Python geschrieben ist, so dass die Portabilität kein Problem darstellt (Mein Host-Computer ist Windows mit Cygwin , aber ich werde für diese Antwort eine Unix-Syntax verwenden).

Die Installation ist mit pip ziemlich einfach:

$ Sudo pip install python-gitlab

Nach der Installation müssen Sie eine Konfigurationsdatei ändern, die nicht vorhanden ist out-of-the-box oder zumindest konnte ich sie nicht finden (die Dokumentation war nicht klar). Der "offizielle" Name dieser Datei ist .python-gitlab.cfg. Dies ist der Name, nach dem config.py standardmäßig gesucht wird.

Jedenfalls habe ich meine eigene Version von .python-gitlab.cfg basierend auf der Beispielssyntax erstellt, die im github des Projekts gefunden wurde.

[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)

Sie müssen sich ein privates Token von der Webschnittstelle (in Profileinstellungen :: Konto befinden, da, wie in README angegeben,

Es wird nur die Authentifizierung privater Token unterstützt (nicht Benutzer/Kennwort).


Nachdem dies erledigt ist, kann das Erstellen eines Projekts für http folgendermaßen durchgeführt werden:

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

und so für https:

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

Die oben verwendeten Schalter finden Sie in der Hilfe:

$ gitlab --help

Nun, vorausgesetzt, dass Sie sich um SSH-Schlüssel gekümmert haben (sowohl lokal als auch in der Webschnittstelle), und dass die Gitlab-Repo-Namen mit den Verzeichnissen in Ihrem lokalen Git übereinstimmen sollen, dann a Ein kleines bash-Skript wie das folgende kann die Projekterstellung und die lokalen Repos Push automatisieren:

#!/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="[email protected]$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'

Was dabei geschieht, ist das Erstellen von gitlab-Projekten, die nach den im äußeren lokalen git-Verzeichnis gefundenen Verzeichnisnamen benannt sind. Anschließend wird cd in jedes davon eingefügt, der Origin wird erneuert und der Push wird ausgeführt.

Hier ist zu erwähnen, dass gitlab Repo-URLs in Kleinbuchstaben konvertiert. Aus sampleRepo001 wird beispielsweise samplerepo001 in der Repo-URL. Aus diesem Grund konvertiere ich im Skript Namen in Kleinbuchstaben.

Und schließlich ist hier ein Beispiellauf des Skripts:

enter image description here

Zur Erinnerung: Wenn Sie dieses Skript verwenden möchten, testen Sie es gründlich, bevor Sie es auf den tatsächlichen Produktionsserver anwenden.


Update - Ich habe weitere Informationen zum Umgang mit HTTPS/SSL hinzugefügt.

9
sokin

Wenn Sie nodejs verwenden oder auch nur ein einfaches Verständnis davon haben, ist das Modul node-gitlab hervorragend. Auf einer selbst gehosteten Gitlab-Instanz konnte ich Projekte erstellen und die Repos aus einem Remote-Repository (einem lokalen Git-Server) importieren. Der Prozess sollte für ein lokales Repository ähnlich sein. Sie können einen lokalen Git-Server auf Ihrem Computer einrichten und diesen als import_url für jedes Gitlab-Projekt verwenden.

Sie können auch ein Skript schreiben, das die API zum Erstellen des Projekts verwendet, und dann jedes Repository in das entsprechende Projekt verschieben.

Pseudocode: Für jedes Repo im Verzeichnis:

  • Verwenden Sie die API zum Erstellen eines Projekts auf gitlab.com
  • git remote fügt gitlab-url-zu-gitlab-repo hinzu
  • git Push gitlab --mirror
1
user3606666

git-repo hat die schmutzigen Jobs für Sie erledigt. Es unterstützt auch GitLab, GitHub und Bitbucket.

1. Installation

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

sie benötigen möglicherweise pip3, wenn der obige Befehl nicht funktioniert.

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

2 Konfiguration

2.1 notwendige Konfiguration

git repo config

Schritt für Schritt werden Sie vom Befehlszeilentool gefragt, ob Sie Bitbucket, github, gitlab account einrichten möchten, und drücken Sie 'y/n' sowie Benutzername/Passwort. Wenn Sie nicht wissen, was es bedeutet, drücken Sie 'n', um zu überspringen. Die Konfigurationsdatei wird in ~/.gitconfig generiert. Vielleicht möchten Sie es später noch optimieren. 

(optional) Sie können das Token beispielsweise in ~/.gitconfig wie folgt manuell festlegen:

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

2.2 bessere Abkürzung

fügen Sie folgende Zeilen an ~/.gitconfig an. 

[alias]
hub = repo hub
lab = repo lab

warum? 

Weil Sie jetzt einfach shortcut verwenden können
git lab clone/howto 
git hub clone/howto 
in der Zukunft. 
Hinweis : Sie benötigen authentication, um private-Repositorys zu klonen

2.3 (optional) Privates Zugriffsrecht hinzufügen

cd ~/.ssh

sehen Sie nach, ob Sie eine id_rsa.pub-Datei haben. pub bedeutet öffentliche Datei, und ich empfehle Ihnen, nur copy den gesamten Inhalt und paste auf der öffentlichen ssh-Website von gitlab.com anzuzeigen. 
Erledigt.
Sie sollten keine anderen über die entsprechende Datei id_rsa anzeigen, die Ihr Schlüssel zum Zugriff auf das gitlab-Repository ist. Andere Clients/Computer mit id_rsa mit der Berechtigung chmod 600 id_rsa können das Repository steuern.

wenn Sie id_rsa.pub nicht sehen, können Sie es generieren mit:

ssh-keygen -t rsa

Drücken Sie enter, um die Standardeinstellung zu übernehmen. Jetzt können Sie id_rsa.pub und id_rsa im Verzeichnis ~/.ssh sehen. Wenn Sie standardmäßig einen anderen Namen als id_rsa verwenden, sollten Sie die Datei ~/.ssh/config folgendermaßen ändern:

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

3. git-repo Verwendung

wenn Sie ein neues Projekt starten, möchten Sie ein neues -Repository aus GitLab heraus erstellen, um Push zu:

git lab create <username>/howto

natürlich können Sie Repositorys löschen, auflisten oder andere Dinge tun.

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


Praktisches Beispiel

Angenommen, Sie haben ein lokales myproject-Verzeichnis entwickelt, in dem git für einige Zeit festgeschrieben wurde. Nun möchten Sie in GitLab hochladen.

erstellen Sie Remote Repo in Gitlab. Sie werden den Benutzernamen/mein Projekt in der Gitlab-Seite sehen.

git lab create username/myproject

Angenommen, es befindet sich eine .git-Datei im lokalen Verzeichnis myproject

cd myproject

verknüpfen Sie das lokale Verzeichnis mit dem Remote-Repo von gitlab.com.

git lab add username/myproject

laden Sie mein Projektverzeichnis auf gitlab.com hoch

git Push -u gitlab master

erledigt

0
anonymous