如何使用CLI从我现有的本地git repo创建一个新的gitlab repo?

368yc8dk  于 2023-05-27  发布在  Git
关注(0)|答案(5)|浏览(183)

我在OSX上有很多本地Git仓库。使用命令行,我想从现有的本地仓库在https://gitlab.companyname.com上创建新的gitlab仓库。
有可能吗?

slmsl1lt

slmsl1lt1#

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

假设你会为每个本地仓库编写以下脚本,那么从Gitlab 10.5开始,你可以简单地使用

# To your own domain
git push --set-upstream address/your-project.git

# To gitlab.com with SSH
git push --set-upstream git@gitlab.example.com:username/new-repo.git master

# To gitlab.com with HTTP
git push --set-upstream https://gitlab.example.com/username/new-repo.git master

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

来自文档

按下创建新项目
当你在本地创建一个新的仓库时,不用在GitLab中手动创建一个新的项目,然后在本地克隆仓库,你可以直接将其推送到GitLab来创建新的项目,所有这些都不需要离开你的终端。如果您拥有相关命名空间的访问权限,GitLab会自动在该GitLab命名空间下创建一个新项目,默认情况下其可见性设置为Private(您可以稍后在项目的设置中更改它)。
这可以通过使用SSH或HTTPS来完成:

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

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

您可以将标志--tags传递给git push命令,以导出现有的存储库标记。
推送成功完成后,远程消息将指示设置远程的命令和新项目的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:
i7uq4tfw

i7uq4tfw2#

在GitLab中为每个要推送到GitLab的本地仓库创建新的空项目。创建项目后,将转到默认项目页面。
然后cd到你现有的每个git仓库中。做一个git remote add origin <your new gitlab repo address>
然后是git push -u origin master
您需要为要添加的每个存储库执行此操作。
您的仓库地址将在项目页面上提供给您。如http和/或ssh。如果您的本地计算机上已经有一个名为origin的远程服务器,您可能需要先重命名它。或者你可以给gitlab一个不同的名字。另外,如果你想把所有分支都推送到gitlab,你可以做一个git push --all origin如果你想要标签,git push --tags origin

2w2cym1i

2w2cym1i3#

我不得不同意你的观点,Gitlab的API Package 器third-party applications的文档并不理想,但我确实设法使其中一个工作。
为此,我在运行 Ubuntu 14.04 的vagrant box中设置了一个沙箱gitlab服务器(GitLab Community Edition 8.0.5)。
现在,我使用的API Package 器是this onepython-gitlab by Gauvain Pocentek)。我选择这个是因为它有足够多的人(写这篇文章时有118人),而且它是用python写的,所以可移植性不会成为问题(我的主机是 Windowscygwin,但我将使用unix语法来回答这个问题)。
使用pip安装非常简单:

$ sudo pip install python-gitlab

一旦安装完成,你就必须修改一个配置文件--这个配置文件不存在 * 开箱即用 *,或者至少我找不到它--(文档没有明确说明这一点)。这个文件的“官方”名称是.python-gitlab.cfg,这也是 * config.py * 默认搜索的文件。
无论如何,我基于在项目的github上找到的示例语法创建了自己的.python-gitlab.cfg版本,如下所示:

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

您必须从Web界面获取私人令牌(可在 * 配置文件设置 *::Account),因为正如README所指出的,
仅支持私有令牌身份验证(不支持用户/密码)。
处理好后,创建项目可以这样实现,对于http

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

比如https

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

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

$ gitlab --help

现在,* 假设 * 你已经处理了SSH密钥(本地和web界面中),并且你希望gitlab仓库名称与本地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'

它所做的是创建以外部本地git目录中的目录名命名的gitlab项目,然后将cd放入每个项目中,更新原始目录,然后执行推送。
这里要提到的一件事是,gitlab将repo url转换为小写,例如,在repo的url中,sampleRepo001变为samplerepo001;这就是为什么我在脚本中将目录名转换为小写。
最后,这里是脚本的一个示例运行:

需要提醒的是,如果您想使用这个脚本,在应用到实际的生产服务器之前要进行彻底的测试。

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

ttcibm8c

ttcibm8c4#

如果你使用nodejs,或者对它有一个简单的了解,node-gitlab模块是很棒的。在一个自托管的Gitlab示例上,我已经能够创建项目并从远程存储库(本地git服务器)导入repos。对于本地存储库,该过程应该类似。你可以在你的机器上设置一个本地git服务器,并将其用作每个Gitlab项目的import_url。
或者,您可以编写一个脚本,该脚本将使用API创建项目,然后将每个存储库推送到其各自的项目。
伪代码:对于目录中的每个存储库:

  • 使用API在www.example.com上创建项目gitlab.com
  • git remote add gitlab url-to-gitlab-repo
  • git push gitlab --mirror
eimct9ow

eimct9ow5#

在GitLab中创建一个新的空项目后,它会向您显示执行此操作的命令列表。下面是推送现有本地存储库的命令示例。下面是GitLab提供的不同示例的图像。

推送已有的Git仓库

cd existing_repo
git remote rename origin old-origin
git remote add origin ssh://git@gitlab.companyname.com:1234/existing_repo/project.git
git push -u origin --all
git push -u origin --tags

GitLab说明示例

相关问题