用户唯美 發表於 2023-2-15 08:51:00

企业级GitLab在Docker部署使用

<h1>一、部署gitlab</h1>
<p>这里使用的是Centos8,安装Docker环境 ,这里不说了,参考:https://www.cnblogs.com/wei325/p/15139701.html</p>
<p>gitlab有ce版和ee版,ce版为免费版本;ee版为企业版本,需要收费;企业使用ce版足够了,这里用ce版。</p>
<h2><strong>1)拉取Gitlab镜像</strong></h2>
<div class="cnblogs_code">
<pre>docker pull gitlab/gitlab-ce</pre>
</div>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230210174905315-1517718515.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><strong>2)启动Docker</strong></h2>
<p>  先建3个目录用于把gitlab的文件挂载出来</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">安装程序目录</span>
mkdir -p /home/gitlab/<span style="color: rgba(0, 0, 0, 1)">etc
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">数据目录</span>
mkdir -p /home/gitlab/<span style="color: rgba(0, 0, 0, 1)">opt
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">日志目录</span>
mkdir -p /home/gitlab/log</pre>
</div>
<p>启动docker</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">docker run \
</span>-<span style="color: rgba(0, 0, 0, 1)">itd\
</span>-p 8180:80<span style="color: rgba(0, 0, 0, 1)"> \
</span>-p 8122:22<span style="color: rgba(0, 0, 0, 1)"> \
</span>-v /home/gitlab/etc:/etc/<span style="color: rgba(0, 0, 0, 1)">gitlab\
</span>-v /home/gitlab/log:/var/log/<span style="color: rgba(0, 0, 0, 1)">gitlab \
</span>-v /home/gitlab/opt:/var/opt/<span style="color: rgba(0, 0, 0, 1)">gitlab \
</span>--<span style="color: rgba(0, 0, 0, 1)">restart always \
</span>--privileged=<span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)"> \
</span>--<span style="color: rgba(0, 0, 0, 1)">name gitlab \
gitlab</span>/gitlab-ce</pre>
</div>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230213094220544-674555943.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;8180端口:gitlab管理页面端口</p>
<p>&nbsp;8122端口:SSH端口,拉代码时的端口</p>
<p>&nbsp;   -v xxx:把Docker里面的目录映射到本机上</p>
<p>查看启动的gitlab</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230213164231894-1454109873.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<h2>&nbsp;3)修改配置</h2>
<p>docker安装gitlab,创建项目时,默认项目URL访问地址显示的是容器主机地址(容器id),所以我们需要修改为一个固定可以外部访问的地址及宿主机地址,这样才可以进行pull/push代码</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre>vi /home/gitlab/etc/<span style="color: rgba(0, 0, 0, 1)">gitlab.rb

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 取消external_url注释,地址为宿主机地址,默认80端口,如果加端口,则前面容器映射的端口也要跟着改</span>
external_url 'http://1.15.63.120<span style="color: rgba(0, 0, 0, 1)">'

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">ssh主机ip</span>
gitlab_rails['gitlab_ssh_host'] = '1.15.63.120<span style="color: rgba(0, 0, 0, 1)">'
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">ssh连接端口</span>
gitlab_rails['gitlab_shell_ssh_port'] =8122

<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 重载服务</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> docker exec -t gitlab gitlab-ctl reconfigure</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> docker exec -t gitlab gitlab-ctl restart</span></pre>
</div>
<p>&nbsp;</p>
<h2><strong>&nbsp;4)修改root密码</strong></h2>
<p>启动docker后,gitlab已经能访问了,但还没有设置密码</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230213165124680-1719028102.png" alt="" loading="lazy"></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 进入容器内部</span>
docker exec -it gitlab /bin/<span style="color: rgba(0, 0, 0, 1)">bash
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 进入控制台</span>
gitlab-rails console -<span style="color: rgba(0, 0, 0, 1)">e production
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 查询id为1的用户,id为1的用户是超级管理员</span>
user = User.where(id:1<span style="color: rgba(0, 0, 0, 1)">).first
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 修改密码为Root123456!!,复杂度要高点</span>
user.password=<span style="color: rgba(0, 0, 0, 1)">'Root123456!!'
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 保存</span>
user.save!
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 退出</span>
exit</pre>
</div>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230213174424741-1596965393.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;设置完再去登录,就能登录成功了!</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230213174703525-1033339339.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><strong>&nbsp;5)服务器卡顿问题解决</strong></h2>
<p>这里用的是腾讯云服务器,2核4G,因为gitlab会用比较多的内存和cpu,这个配置装了后服务器变得卡顿,解决办法。</p>
<p>1、创建swap分区</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">查看swap分区情况,如果看到没有东西就是没有swap分区 </span>
cat /proc/<span style="color: rgba(0, 0, 0, 1)">swaps
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">创建swap分区,注意:创建swap大小为bs*count=4294971392(4G),/data/swap目录若无则找/mnt/swap</span>
dd <span style="color: rgba(0, 0, 255, 1)">if</span>=/dev/zero of=/data/swap bs=512 count=8388616
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">把上文件的文件做成swap分区</span>
mkswap /data/<span style="color: rgba(0, 0, 0, 1)">swap
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">cat /proc/sys/vm/swappiness,如果不是60,则设置</span>
sysctl -w vm.swappiness=60
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">启用swap分区</span>
swapon /data/<span style="color: rgba(0, 0, 0, 1)">swap
echo “</span>/data/swap swap swap defaults 0 0” &gt;&gt; /etc/<span style="color: rgba(0, 0, 0, 1)">fstab
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">再次查看swap分区</span>
cat /proc/swaps</pre>
</div>
<p>&nbsp;</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230213172715625-706358936.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>2、修改配置把进程数据变少</p>
<p>在挂载出来的本机文件上改,目录为/home/gitlab/etc/gitlab.rb,修改完重启容器生效</p>
<div class="cnblogs_code">
<pre>vi /home/gitlab/etc/<span style="color: rgba(0, 0, 0, 1)">gitlab.rb
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">把下面3个取消注释,工作进程减少,最低为2</span>
puma['worker_processes'] = 2<span style="color: rgba(0, 0, 0, 1)">
puma['min_threads'] </span>= 2<span style="color: rgba(0, 0, 0, 1)">
puma['max_threads'] </span>= 2

<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 重载服务</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> docker exec -t gitlab gitlab-ctl reconfigure</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> docker exec -t gitlab gitlab-ctl restart</span></pre>
</div>
<p>&nbsp;</p>
<p>做完这些,服务器占用资源就降下来了,也不会卡顿了。</p>
<h2>&nbsp;6)gitlab用户头像显示不了问题</h2>
<p>在本地安装完GitLab服务后,会发现用户的头像部分显示不了。</p>
<p>原因是因为GitLab默认使用了Gravatar的头像,而Gravatar目前是被墙的,所以访问不了。</p>
<p>需要更换其URL为国内的某个镜像URL。</p>
<div class="cnblogs_code">
<pre>docker exec -it gitlab /bin/<span style="color: rgba(0, 0, 0, 1)">bash
vim </span>/etc/gitlab/gitlab.rb</pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">### Gravatar Settings
# gitlab_rails[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">gravatar_plain_url</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">http://www.gravatar.com/avatar/%{hash}?s=%{size}&amp;d=identicon</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
# gitlab_rails[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">gravatar_ssl_url</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">https://secure.gravatar.com/avatar/%{hash}?s=%{size}&amp;d=identicon</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
gitlab_rails[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">gravatar_plain_url</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">http://sdn.geekzu.org/avatar/%{hash}?s=%{size}&amp;d=identicon</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)"> #添加这一行
gitlab_rails[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">gravatar_ssl_url</span><span style="color: rgba(128, 0, 0, 1)">'</span>] = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">https://sdn.geekzu.org/avatar/%{hash}?s=%{size}&amp;d=identicon</span><span style="color: rgba(128, 0, 0, 1)">'</span> #添加这一行</pre>
</div>
<p>保存退出</p>
<p>重新加载配置</p>
<div class="cnblogs_code">
<pre>gitlab-ctl reconfigure</pre>
</div>
<p>&nbsp;</p>
<h1>二、使用gitlab</h1>
<h2><strong>1)设置关闭自动创建账号功能</strong></h2>
<p>gitlab默认是开放注册账号功能的,在企业里面使用是不允许的,用户的账号是通过管理员创建出来的</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230213231523409-1987098044.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>管理员登录进后台</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230213231956068-242321910.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2><strong>&nbsp;2)创建项目</strong></h2>
<p><strong><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230213232833998-335728715.png" alt="" loading="lazy"></strong></p>
<p>&nbsp;</p>
<p><strong><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230213233001023-1239716721.png" alt="" loading="lazy"></strong></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230213233726588-279600408.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230213234136671-2080948189.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<h2>&nbsp;3)创建用户,组群,给项目权限</h2>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230213235531219-1975158686.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214000314204-806068189.png" alt="" loading="lazy"></p>
<p>把用户test加入到Test.Demo的项目里面</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214110931179-2049737626.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214111219767-1482691563.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;成功把用户加了进来<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214111307335-1808663230.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214111512390-1781561226.png" alt="" loading="lazy"></p>
<p>GitLab用户权限管理:</p>
<p>GitLab用户在组中有五种权限:Guest、Reporter、Developer、Maintainer、Owner</p>
<p>1.Guest:可以创建issue、发表评论、不能读写版本库</p>
<p>2.Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限</p>
<p>3.Developer:可以克隆代码、开发、提交、push、研发人员可以赋予这个权限</p>
<p>4.Maintainer:可以创建项目、添加 tag 、保护分支、添加项目成员、编辑项目、核心研发负责人可以赋予这个权限</p>
<p>5.Owner:可以设置项目的访问权限-Visibility Level、删除项目、迁移项目、管理组成员、项目经理,部门经理可以赋予这个权限</p>
<h1>三、Git拉取和提交GitLab代码</h1>
<h2>&nbsp;1)安装git客户端</h2>
<p>官网地址:https://git-scm.com/downloads/</p>
<p>下载后,一直下一步安装即可。安装完成后,桌面鼠标右键能看到如下图的两个菜单</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214113247557-1001954672.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>&nbsp;2)git生成SSH Key</h2>
<p>git客户端要连接仓库,就要先生成ssh key,ssh key有公钥和私钥,生成后把公钥填到git站点上,现在生成ssh key</p>
<p>点击Git Bash Here</p>
<p>2.1设置用户名</p>
<div class="cnblogs_code">
<pre>git config --global user.name 'test'</pre>
</div>
<p>test为自己的用户名,可以随便填,注意提交记录的时候会显示这个用户名,所以一般填员工的姓名好辨认谁提交了代码</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214113721893-183390783.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;2.2设置邮箱</p>
<div class="cnblogs_code">
<pre>git config --global user.email 'test@qq.com'</pre>
</div>
<p>这个邮箱也是可以随便填,一般填员公在公司的邮箱</p>
<p>上两步生成的信息会在C:\Users\账号 下生成.gitconfig配置文件,特别注意此文件不能删除,此文件记录了账号和邮箱。</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214114308947-1482830307.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;2.3生成ssh key</p>
<div class="cnblogs_code">
<pre>ssh-keygen -t rsa -C “test@qq.com”</pre>
</div>
<p>填刚才的邮箱,输入后一直回车即可</p>
<p>生成的ssh key信息保存在 C:\Users\账号下的.ssh文件夹里</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214114759384-1678149059.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<h2>&nbsp;3)把生成的公钥填到gitlab</h2>
<p>&nbsp;git客户端要和gitlab连接,需要把公钥里面的内容填到gitlab上</p>
<p>回到gitlab,每个员工都会有独立的ssh key,这里我登录test账号,表示把本机的git和test账号关联</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214115330589-1355423954.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;<img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214115604880-1513217670.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<h2>&nbsp;4)拉取项目和提交文件</h2>
<p><strong>4.1克隆项目</strong></p>
<p>找到项目的ssh地址,也可以通过http地址</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214141206783-539268505.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;在本机上建一个文件夹放拉取的项目,在文件夹的路径里打开 Git Bash&nbsp;</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre>git clone ssh地址</pre>
</div>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214141339905-699797619.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;第一次拉取时会报一个无法验证主机真实性,输入yes,然后会在 ssh key的文件夹下的kenown_hosts里面生成gitlab信息,下次就不会询问了。</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214141817313-1657858331.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;克隆完成后,可以看到项目已经被拉下来了,因为是一个空项目,所以还没有东西,只有一份描述文档</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214141920551-712311644.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p><strong>&nbsp;4.2提交文件</strong></p>
<p>我们新增加一个文件 abc.txt</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214142223635-202979082.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;现在的文件是在工作区,然后把文件add到暂存区</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">把文件添加到暂存区</span>
git add *
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">查看文件变化状态</span>
git status</pre>
</div>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214142801662-1334637780.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p><strong>&nbsp;4.3提交文件到本地仓库</strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">提交修改到本地仓库 </span>
git commit -m '提交一个文本文档'</pre>
</div>
<p><strong><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214143228794-36505486.png" alt="" loading="lazy"></strong></p>
<p><strong>4.4把本地仓库同步到远程仓库</strong></p>
<p>因为这里是一个main分支,developer不能推送到main分支,所以这里给一下maintainer权限给test用户。正常企业里面开发,开发人员只有开发分支(dev),</p>
<p>测试分支(test)的权限,main分支只能看,不能提交代码的,因为main分支要保持着随时能发布,不能签提交代码,要由项目负责人从测试分支(test)合并 代码到main分支。</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214144324986-1481907441.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;推送代码</p>
<div class="cnblogs_code">
<pre>git push</pre>
</div>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214144509172-21843174.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>这里把本地仓库同步到远程仓库,到远程仓库看一下就能看到提交记录了</p>
<p><img src="https://img2023.cnblogs.com/blog/630011/202302/630011-20230214145135675-1297476047.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;如果想拉取最新的代码,则用git pull</p>
<p>&nbsp;到这里gitlab部署和使用就完成了,git如果命令行方式觉得麻烦,则可以用小乌龟git的界面可视化操作</p>
<p>小乌龟git下载地址为:https://tortoisegit.org/download</p>
<p>其余的开发IDE也都会自带有git插件,这个就不多说啦。</p><br><br>
来源:https://www.cnblogs.com/wei325/p/17106525.html
頁: [1]
查看完整版本: 企业级GitLab在Docker部署使用