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?
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
--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 .
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:
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:
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.
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:
git-repo hat die schmutzigen Jobs für Sie erledigt. Es unterstützt auch GitLab, GitHub und Bitbucket.
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
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
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
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
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
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