我的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
ted*_*ted 31
--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)
我必须同意你的看法,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的信息.