如何使用CLI从我现有的本地git仓库创建新的gitlab仓库?

Jit*_*yas 42 git gitlab

我的OSX上有很多本地git回购.使用命令行我想在https://gitlab.ccompanyname.com上创建新的gitlab repos ,形成现有的本地存储库.

有可能吗?

twk*_*wk3 48

在GitLab中为要推送到GitLab的每个本地存储库创建新的空项目.创建项目后,您将进入默认项目页面.

然后cd进入你现有的每个git repos.做一个git remote add origin <your new gitlab repo address>

然后一个 git push -u origin master

您需要为要添加的每个存储库执行此操作.

您的回购地址是在项目页面上提供给您的.作为http和/或ssh.如果您的本地计算机上已有远程调用源,则可能需要先重命名它.或者你可以把gitlab称为不同的东西.此外,如果你想将所有分支推送到gitlab,你可以做一个git push --all origin如果你想要你的标签,git push --tags origin

  • "在GitLab中创建新的空项目"这就是问题所在.我想从CLI做到这一点 (10认同)
  • 也许我们应该先`git remote remove origin` (2认同)

ted*_*ted 31

2018解决方案:只需使用 --set-upstream

假设您将负责编写将为您的每个本地仓库执行以下操作的脚本,似乎从Gitlab 10.5开始,您可以简单地使用

git push --set-upstream address/your-project.git
Run Code Online (Sandbox Code Playgroud)

这将在Gitlab上创建一个新项目,而无需在服务器上手动创建它


来自文档

按下以创建新项目

当你在本地创建一个新的repo时,不是去GitLab手动创建一个新项目,然后推送repo,你可以直接将它推送到GitLab来创建新项目,所有这些都不需要离开你的终端.如果您有权访问该命名空间,我们将在该GitLab命名空间下自动创建一个新项目,默认情况下其可见性设置为Private(您可以稍后在项目的设置中更改它).

这可以通过使用SSH或HTTP来完成:

## Git push using SSH
git push --set-upstream git@gitlab.example.com:namespace/nonexistent-project.git master

## Git push using HTTP
git push --set-upstream https://gitlab.example.com/namespace/nonexistent-project.git master
Run Code Online (Sandbox Code Playgroud)

推送成功完成后,远程消息将指示设置远程的命令和新项目的URL:

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:
Run Code Online (Sandbox Code Playgroud)

  • 在实践中,我最终这样做:`git push --set-upstream https://gitlab.com/myName/myProject.git master`。不知道为什么文档使用“ gitlab.example.com”。 (2认同)
  • 因为你可以在你的服务器上托管你自己的 gitlab 实例,并在这样的子域上提供它 (2认同)

sok*_*kin 9

我必须同意你的看法,Gitlab的API包装器第三方应用程序的文档并不理想,但我确实设法使其中一个工作.

为此,我在运行Ubuntu 14.04的流浪盒中设置了一个沙箱gitlab服务器(GitLab Community Edition 8.0.5).

现在,我使用的API的包装是这一个(上python-gitlab戈万Pocentek).我之所以选择这个,是因为它有足够的人(在编写时118)并且用python编写,因此可移植性不会成为问题(我的主机是带有cygwin的Windows,但我将使用unix语法来回答这个问题) .

安装非常简单pip:

$ sudo pip install python-gitlab
Run Code Online (Sandbox Code Playgroud)

一旦安装,你将不得不修改配置文件 - 开箱即用,或者至少,我找不到它 - (文档不清楚这一点).这个文件的"官方"名称是.python-gitlab.cfg,这是config.py默认搜索的名称.

无论如何,我.python-gitlab.cfg根据项目的github上的示例语法创建了我自己的版本,如下所示:

[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)
Run Code Online (Sandbox Code Playgroud)

你必须从Web界面(在Profile Settings :: Account中找到)获得一个私人令牌,因为正如README指出的那样,

仅支持私人令牌身份验证(不是用户/密码).


在完成此操作后,可以像这样创建项目,用于http:

$ gitlab -c "PATH/TO/YOUR/.python-gitlab.cfg" --gitlab remote project create --name YOUR_PROJECT_NAME
Run Code Online (Sandbox Code Playgroud)

并喜欢这样https:

$ gitlab -c "PATH/TO/YOUR/.python-gitlab.cfg" --gitlab remote-ssl project create --name YOUR_PROJECT_NAME
Run Code Online (Sandbox Code Playgroud)

上面使用的开关可以通过查看帮助找到:

$ gitlab --help
Run Code Online (Sandbox Code Playgroud)

现在,假设您已经处理了SSH密钥(本地和Web界面),并且您希望gitlab repo名称与本地git中的目录相同,那么,bash像下面这样的小脚本,可以自动化项目创建和本地回购推送:

#!/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'
Run Code Online (Sandbox Code Playgroud)

它的作用是创建以在外部本地git目录中找到的dirnames命名的gitlab项目,然后cd进入每个目录,更新原点然后执行推送.

这里要提到的一件事是gitlab将repo urls转换为小写,例如sampleRepo001变成samplerepo001repo的url; 这就是我在脚本中将dirnames转换为小写的原因.

最后,这是脚本的示例运行:

在此输入图像描述

提醒一下,如果要使用此脚本,请在应用于实际生产服务器之前进行彻底测试.


更新 - 我添加了一些有关如何处理HTTPS/SSL的信息.