刀尖上起舞 發表於 2022-5-28 09:52:00

Git、GitLab、 GitHub 、Gitee 的使用

<h2 id="git">Git</h2>
<h3 id="git-介绍">Git 介绍</h3>
<p>​                &nbsp;&nbsp;&nbsp;&nbsp;Git 是一个免费的、开源的<strong>分布式版本控制系统</strong>,可以快速高效地处理从小型到大型的各种<br>
项目。(在公司里面就是管理代码的!)</p>
<p>​        &nbsp;&nbsp;&nbsp;&nbsp;Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作<br>
流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。</p>
<p><strong>Git保存的不是文件的变化或者差异,而是不同时刻的文件<mark>快照</mark>。</strong></p>
<p>​                &nbsp;&nbsp;&nbsp;&nbsp;版本控制 是一种<strong>记录文件内容变化</strong>,以便将来查阅特定版本修订情况的系统。</p>
<p>​                &nbsp;&nbsp;&nbsp;&nbsp;版本控制 其实最重要的是可以<strong>记录文件修改历史记录</strong>,从而让用户能够查看历史版本,<br>
方便版本切换。</p>
<h4 id="2为什么需要版本控制">2、为什么需要版本控制</h4>
<p>​        答:个人开发过渡到团队协作 。</p>
<h4 id="3版本控制工具">3、版本控制工具</h4>
<ul>
<li>
<p><strong>集中式版本控制工具</strong></p>
<p>CVS、<strong>SVN(Subversion)</strong>、VSS......</p>
<pre><code class="language-java">        集中化的版本控制系统诸如 CVS、SVN 等,都有一个单一的集中管理的服务器,保存
所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或
者提交更新。多年以来,这已成为版本控制系统的标准做法。
        这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什
么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要
远比在各个客户端上维护本地数据库来得轻松容易。
      
        事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕
机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
</code></pre>
<img src="http://img.zouma.work/image-20220425181550588.png" alt="image-20220425181550588" style="zoom: 50%">
</li>
<li>
<p><strong>分布式版本控制工具</strong></p>
<img src="http://img.zouma.work/image-20220425181629981.png" alt="image-20220425181629981" style="zoom: 67%">
<p>解决了 集中式版本控制工具的缺点</p>
<pre><code class="language-java">        像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码
仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用
其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次
对整个文件仓库的完整备份。
      
分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
// 1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
// 2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)


</code></pre>
</li>
</ul>
<h4 id="4git-简史">4、Git 简史</h4>
<p><img src="http://img.zouma.work/image-20220425183738238.png" alt="image-20220425183738238" loading="lazy"></p>
<h4 id="5工作机制">5、工作机制</h4>
<img src="http://img.zouma.work/image-20220425190227305.png" alt="image-20220425190227305" style="zoom: 67%">
<p>用语:添加到暂存区、提交到本地库、push 到远程库。</p>
<h4 id="6git--和-代码托管中心">6、Git和 代码托管中心</h4>
<p>​        代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为<strong>远程库</strong>。</p>
<p>代码托管中心 ---远程库</p>
<p>➢ <strong>局域网</strong><br>
✓ GitLab<br>
➢ <strong>互联网</strong><br>
✓ GitHub(外网)<br>
✓ Gitee 码云(国内网站)</p>
<h3 id="git-安装">Git 安装</h3>
<p>官网地址: https://git-scm.com/<br>
查看 GNU 协议,可以直接点击下一步。</p>
<p>next,next,next 一路默认就好了!</p>
<p>Finish 后, 右键,Git Bash 在 终端里输入<code>git --version</code>查看<code>git</code>版本,如图所示,说明 Git 安装成功。</p>
<img src="http://img.zouma.work/image-20220430135103348.png" alt=" " style="zoom: 80%">
<h3 id="git-常用命令">Git 常用命令</h3>
<p>基于开发案例,详细讲解 git 的常用命令</p>
<table>
<thead>
<tr>
<th>命令名称</th>
<th>作用</th>
</tr>
</thead>
<tbody>
<tr>
<td>git config --global user.name 用户名</td>
<td>设置用户签名</td>
</tr>
<tr>
<td>git config --global user.email 邮箱</td>
<td>设置用户邮箱</td>
</tr>
<tr>
<td><font color="#FF0000">git init</font></td>
<td>初始化本地库</td>
</tr>
<tr>
<td><font color="#FF0000">git status</font></td>
<td>查看本地库状态</td>
</tr>
<tr>
<td><font color="#FF0000">git add 文件名</font></td>
<td>添加到缓存区</td>
</tr>
<tr>
<td><font color="#FF0000">git commit -m "日志信息" 文件名</font></td>
<td>提交到本地库</td>
</tr>
<tr>
<td><font color="#FF0000">git reflog&nbsp; &nbsp; /&nbsp; &nbsp; &nbsp;git log</font></td>
<td>查看历史记录 / 详细信息</td>
</tr>
<tr>
<td><font color="#FF0000">git reset --hard 版本号</font></td>
<td>版本穿梭</td>
</tr>
</tbody>
</table>
<hr>
<h4 id="1设置用户签名和邮箱"><strong>1、设置用户签名和邮箱</strong></h4>
<p><strong>设置完后可以在<code> .gitconfig</code> 中查看</strong></p>
<p><strong>语法:</strong></p>
<p><code>git config --global user.name 用户名</code><br>
<code>git config --global user.email 邮箱</code></p>
<p><strong>查看:</strong></p>
<img src="http://img.zouma.work/image-20220430135203395.png" alt="image-20220430135203395" style="zoom: 67%">
<p><strong>说明:</strong><br>
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看<br>
到,以此确认本次提交是谁做的。<strong>Git 首次安装必须设置一下用户签名,否则无法提交代码。</strong></p>
<p><font color="#FF0000">※注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任<br>
何关系。</font></p>
<hr>
<h4 id="2初始化本地库"><strong>2、初始化本地库</strong></h4>
<p><strong>语法:</strong></p>
<p>​        <code>git init</code></p>
<p><strong>操作 及 查看:</strong></p>
<img src="http://img.zouma.work/image-20220430141941843.png" alt="image-20220430141941843" style="zoom: 80%">
<img src="http://img.zouma.work/image-20220430142003532.png" alt="image-20220430142003532" style="zoom: 80%">
<hr>
<h4 id="3查看本地库状态"><strong>3、查看本地库状态</strong></h4>
<p><strong>语法:</strong></p>
<p><code>git status</code></p>
<p><strong>操作:</strong></p>
<img src="http://img.zouma.work/image-20220430143017192.png" alt="image-20220430143017192" style="zoom: 80%">
<p>新增文件:hello.txt</p>
<img src="http://img.zouma.work/image-20220430144707321.png" alt="image-20220430144707321" style="zoom: 67%">
<img src="http://img.zouma.work/image-20220430144532839.png" alt="image-20220430144532839" style="zoom: 80%">
<p><strong>就是添加 到暂存区</strong></p>
<hr>
<h4 id="4添加到暂存区"><strong>4、添加到暂存区</strong></h4>
<p><strong>语法:</strong></p>
<p><code>git add</code> 文件名</p>
<p><strong>操作:</strong></p>
<img src="http://img.zouma.work/image-20220430145845989.png" alt="image-20220430145845989" style="zoom: 80%">
<p><strong>查看:</strong></p>
<p>​                此时我们再来看,git 的状态,添加到暂存区,文件由红转绿,这时候是可以删掉的,删也只是从暂存区里面删了,工作区的还是好好的!</p>
<img src="http://img.zouma.work/image-20220430150444312.png" alt="image-20220430150444312" style="zoom: 80%">
<h4 id="5提交到本地库"><strong>5、提交到本地库</strong></h4>
<p><font color="write"><strong>将暂存区的文件提交到本地库,形成自己的一个历史版本</strong></font></p>
<p><strong>基本语法:</strong></p>
<p><code>gitcommit -m "日志信息" 文件名</code></p>
<img src="http://img.zouma.work/image-20220430152227912.png" alt="image-20220430152227912" style="zoom: 80%">
<p>**create mode 100644 ** 是啥?</p>
<p><strong>100代表regular file,644代表文件权限</strong></p>
<h4 id="6查看历史">6、查看历史</h4>
<p><strong>语法:</strong></p>
<p><strong>git reflog 查看版本信息</strong><br>
<strong>git log查看版本详细信息</strong></p>
<p><strong>操作:</strong></p>
<img src="http://img.zouma.work/image-20220430153343274.png" alt="image-20220430153343274" style="zoom: 80%">
<hr>
<h4 id="7修改文件hellotxt">7、修改文件(hello.txt)</h4>
<ul>
<li>修改 <code>hello.txt</code> 之后,查看 <code>git</code> 状态(<code>git status</code> ),<strong>文件变红了,说明文件没有被追踪</strong>,(添加,提交)</li>
</ul>
<p>​       <img src="http://img.zouma.work/image-20220501143303816.png" alt="image-20220501143303816" style="zoom: 80%"></p>
<ul>
<li>
<p>所以再来一次,(<code>git add</code>) 添加到暂存区,文件变绿,说明已经添加到暂存区</p>
<img src="http://img.zouma.work/image-20220501143435262.png" alt="image-20220501143435262" style="zoom: 80%">
</li>
<li>
<p>(<code>git commit</code>) 文件绿色就可以提交到本地库,查看<code>git</code> 状态(<code>gitstatus</code>) ,这时它就又干净了</p>
<img src="http://img.zouma.work/image-20220501143527785.png" alt="image-20220501143527785" style="zoom: 80%">
</li>
<li>
<p>此时查看 历史记录</p>
<p><img src="http://img.zouma.work/image-20220501143641509.png" alt="image-20220501143641509" loading="lazy"></p>
</li>
</ul>
<hr>
<h4 id="8版本穿梭">8、版本穿梭</h4>
<p><strong>语法:</strong></p>
<p><strong><code>gitreset --hard</code>版本号</strong></p>
<p><strong>原理:</strong></p>
<p>​        底层就是移动的 head 指针</p>
<img src="http://img.zouma.work/image-20220501150509629.png" alt="image-20220501150509629" style="zoom: 80%">
<ul>
<li>
<p>先查看它的 历史记录,复制所需要的版本 <strong>(在这里演示的是第二次提交的版本)</strong></p>
<img src="http://img.zouma.work/image-20220501150712839.png" alt="image-20220501150712839" style="zoom: 80%">
</li>
<li>
<p>版本穿梭到第二个版本</p>
<img src="http://img.zouma.work/image-20220501150859000.png" alt="image-20220501150859000" style="zoom: 80%">
</li>
<li>
<p>此时查看历史记录,发现指针已经指向 第二个版本了</p>
<img src="http://img.zouma.work/image-20220501150950838.png" alt="image-20220501150950838" style="zoom: 80%">
</li>
</ul>
<p><strong>具体的说就是在 .git 目录下,有个 HEAD 的文件</strong></p>
<img src="http://img.zouma.work/image-20220501151200426.png" alt="image-20220501151200426" style="zoom: 50%">
<p><strong>指向了第三个版本,这里是我又转到了第三个版本</strong></p>
<img src="http://img.zouma.work/image-20220501151336550.png" alt="image-20220501151336550" style="zoom: 50%">
<h3 id="git-分支">Git 分支</h3>
<h4 id="1概述和优点">1、概述和优点</h4>
<img src="http://img.zouma.work/image-20220501151925175.png" alt="image-20220501151925175" style="zoom: 67%">
<p>​</p>
<p>​                在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。<font color="BLUE"><strong>使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时</strong><br>
<strong>候,不会影响主线分支的运行。</strong></font>对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(<strong>分支底层其实也是指针的引用)</strong></p>
<p><img src="http://img.zouma.work/image-20220501153013074.png" alt="image-20220501153013074" loading="lazy"></p>
<p><strong>分支的好处:</strong></p>
<p>(1)同时并行推进多个功能开发,提高开发效率</p>
<p>(2)各个分支在开发过程中,如果某一个分支开发失败,不会对其它分支有任何影响,失败的分支删除,重新开始即可。</p>
<hr>
<h4 id="2分支操作">2、分支操作</h4>
<table>
<thead>
<tr>
<th>命令名称</th>
<th>作用</th>
</tr>
</thead>
<tbody>
<tr>
<td>git branch 分支名</td>
<td>创建分支</td>
</tr>
<tr>
<td>git branch -v</td>
<td>查看分支</td>
</tr>
<tr>
<td>git checkout 分支名</td>
<td>切换分支</td>
</tr>
<tr>
<td>git merge 分支名</td>
<td>(合并分支)把指定的分支合并到当前分支</td>
</tr>
</tbody>
</table>
<h5 id="1查看分支">(1)查看分支</h5>
<p><strong>语法:</strong></p>
<p><code>git branch -v</code></p>
<p><strong>操作:</strong></p>
<p><img src="http://img.zouma.work/image-20220501154902969.png" alt="image-20220501154902969" loading="lazy"></p>
<h5 id="2创建分支">(2)创建分支</h5>
<p><strong>语法:</strong></p>
<p><code>git branch 分支名</code></p>
<p><strong>操作:</strong></p>
<p>比如说,我要给我的代码创建一个热修分支</p>
<img src="http://img.zouma.work/image-20220501155303502.png" alt="image-20220501155303502" style="zoom: 80%">
<h5 id="3-切换分支修改分支">(3) 切换分支&amp;修改分支</h5>
<p>master 分支 作为用户用的,所以我们在 master 分支上,引出了其它分支(快照,走向了不同的路径)</p>
<p>切换分支语法:<code>git checkout hot-fix</code></p>
<ul>
<li>
<p>OK,切换一下分支(<code>hot-fix</code>)</p>
<img src="http://img.zouma.work/image-20220501162146828.png" alt="image-20220501162146828" style="zoom: 80%">
</li>
<li>
<p>在 hot-fix 分支上,修改一下代码</p>
<img src="http://img.zouma.work/image-20220501163718629.png" alt="image-20220501163718629" style="zoom: 80%">
</li>
<li>
<p>追踪 hello.txt</p>
<p>add</p>
<img src="http://img.zouma.work/image-20220501163806402.png" alt="image-20220501163806402" style="zoom: 80%">
<p>commit</p>
<img src="http://img.zouma.work/image-20220501163834437.png" alt="image-20220501163834437" style="zoom: 80%">
</li>
<li>
<p>查看历史记录</p>
<img src="http://img.zouma.work/image-20220501163928732.png" alt="image-20220501163928732" style="zoom: 80%">
</li>
</ul>
<h5 id="4合并分支">(4)合并分支</h5>
<h6 id="1正常合并">1、正常合并</h6>
<p><strong>正常合并:</strong>master 没有修改,hot-fix 在 master 基础之上增加了两行东西,和 master 并不冲突。</p>
<p>【<strong>注意:</strong>】如果想把 hot-fix 分支 合并在 master 分支上,必须站在 master 分支上合并。</p>
<img src="http://img.zouma.work/image-20220501164721996.png" alt="image-20220501164721996" style="zoom: 80%">
<p><strong>结果:</strong></p>
<img src="http://img.zouma.work/image-20220501164753612.png" alt="image-20220501164753612" style="zoom: 80%">
<h6 id="2冲突合并">2、冲突合并</h6>
<p><strong>什么是冲突合并?</strong></p>
<p>​        &nbsp;&nbsp;&nbsp;&nbsp;合并分支时,两个分支在<strong>同一个文件的同一个位置</strong>有两套完全不同的修改。Git 无法替<br>
我们决定使用哪一个。必须人为决定新代码内容。</p>
<p><strong>演示一下冲突合并!</strong></p>
<ol>
<li>
<p>刚才正常合并了 hot-fix ,所以此时 hot-fix 和 master 两个分支内容是一样的,所以在 master 上首先修改。</p>
<p>【<strong>合并分支</strong>】只会修改主动合并的分支,不会修改要合并的分支。很容易理解!</p>
</li>
</ol>
<p>hello.txt 倒数第二行,添加 master test</p>
<p>​           <img src="http://img.zouma.work/image-20220501172633423.png" alt="image-20220501172633423" style="zoom: 80%"></p>
<ol start="2">
<li>
<p>切到 hot-fix 分支上,在 hello.txt 最后一行添加,hot-fix test</p>
<img src="http://img.zouma.work/image-20220501172753224.png" alt="image-20220501172753224" style="zoom: 80%">
</li>
<li>
<p>切回 master 分支,合并 hot-fix 分支</p>
<img src="http://img.zouma.work/image-20220501173238324.png" alt="image-20220501173238324" style="zoom: 80%">
<img src="http://img.zouma.work/image-20220501173501552.png" alt="image-20220501173501552" style="zoom: 80%">
</li>
</ol>
<p><strong>解决冲突</strong></p>
<ol>
<li>
<p>查看 git 状态</p>
<img src="http://img.zouma.work/image-20220501174032744.png" alt="image-20220501174032744" style="zoom: 80%">
<p>自动合并,代码冲突了,需要我们自己手动合并。OK ! 打开 hello.txt</p>
<img src="http://img.zouma.work/image-20220501173931133.png" alt="image-20220501173931133" style="zoom: 80%">
</li>
<li>
<p>手动,把想要的留下,不想要的去掉!</p>
<p><img src="http://img.zouma.work/image-20220501174746311.png" alt="image-20220501174746311" loading="lazy"></p>
</li>
<li>
<p>添加到暂存区,提交到本地库,形成历史版本<mark>【<strong>注意</strong>】这里不能带文件名,否则会报错</mark></p>
<img src="http://img.zouma.work/image-20220501175502505.png" alt="image-20220501175502505" style="zoom: 80%">
</li>
<li>
<p>再次查看</p>
<img src="http://img.zouma.work/image-20220501175530372.png" alt="image-20220501175530372" style="zoom: 80%">
</li>
</ol>
<p>​        【<strong>最后注意:</strong>】<strong>合并分支</strong>只会修改主动合并的分支,不会修改要合并的分支。</p>
<p>master、hot-fix 其实都是指向具体版本记录的指针。</p>
<p><strong>当前所在的分支,其实是由 HEAD 决定的。</strong>所以创建分支的本质就是多创建一个指针。<br>
HEAD 如果指向 master,那么我们现在就在 master 分支上。<br>
HEAD 如果执行 hotfix,那么我们现在就在 hotfix 分支上。</p>
<hr>
<h4 id="3git-团队协作机制">3、Git 团队协作机制</h4>
<h5 id="1团队内协作">1、团队内协作</h5>
<img src="http://img.zouma.work/image-20220501182124141.png" alt="image-20220501182124141" style="zoom: 67%">
<h5 id="2跨团队协作">2、跨团队协作</h5>
<p><img src="http://img.zouma.work/image-20220501184413112.png" alt="image-20220501184413112" loading="lazy"></p>
<hr>
<h2 id="github">GitHub</h2>
<h3 id="github-操作">GitHub 操作</h3>
<h4 id="1创建远程库--创建别名">1、创建远程库 &amp; 创建别名</h4>
<ul>
<li>
<p><strong>创建远程库</strong></p>
<p>略~   <strong>登录 GitHub</strong> <code>---&gt;</code><strong>new repository</strong></p>
</li>
<li>
<p><strong>创建别名</strong></p>
<p><code>git remote -v</code>      作用:查看当前所有远程地址别名</p>
<p><code>git remote add别名 远程地址</code></p>
<p>例子:<code>git remote add git-demo https://github.com/w-y-k/git-demo.git</code></p>
<p><img src="http://img.zouma.work/image-20220502210730251.png" alt="image-20220502210730251" loading="lazy"></p>
</li>
</ul>
<h4 id="2推送本地库到远程库--push">2、推送本地库到远程库<font color="red">push</font></h4>
<p><strong>语法:</strong><code>git push 别名 分支</code></p>
<p><strong>实例:</strong></p>
<p><strong>推送</strong></p>
<p><img src="http://img.zouma.work/image-20220502212043763.png" alt="image-20220502212043763" loading="lazy"></p>
<p><strong>成功:</strong></p>
<img src="http://img.zouma.work/image-20220502212720766.png" alt="image-20220502212720766" style="zoom: 80%">
<h4 id="3拉取远程库到本地库--pull">3、拉取远程库到本地库<font color="red">pull</font></h4>
<p><strong>语法:</strong></p>
<p><code>git pull 别名 分支名</code></p>
<p><strong>实例:</strong></p>
<p><code>git pull git-demo master</code></p>
<img src="http://img.zouma.work/image-20220502213308993.png" alt="image-20220502213308993" style="zoom: 80%">
<p>此时我们查看 git 状态</p>
<img src="http://img.zouma.work/image-20220502213403574.png" alt="image-20220502213403574" style="zoom: 67%">
<p>工作树是干净的,说明 <strong>pull 这个动作是会自动,提交本地库的!</strong></p>
<p>查看代码:发现已经拉取下了(<strong>本地库和远程库的代码已经同步了</strong>)</p>
<img src="http://img.zouma.work/image-20220502213508164.png" alt="image-20220502213508164" style="zoom: 80%">
<h4 id="4克隆远程库到本地-clone">4、克隆远程库到本地 <font color="red">clone</font></h4>
<p><font color="purple"><strong>clone 代码是不需要登录账号的 !</strong></font></p>
<p><strong>语法:<font color="red">git clone 项目地址</font></strong></p>
<p><strong>实例:</strong></p>
<p><code>git clone https://github.com/w-y-k/git-demo.git </code></p>
<p>总结:clone 会做如下操作。 <strong>1、拉取代码2、初始化本地库   3、创建别名</strong></p>
<hr>
<h3 id="团队内协作">团队内协作</h3>
<p>团队成员必须加入到 GitHub 项目团队里面去,才能进行 pull ,push 操作。</p>
<p><strong>项目管理员,添加团队成员</strong></p>
<img src="http://img.zouma.work/image-20220503120142594.png" alt="image-20220503120142594" style="zoom: 80%">
<p><img src="http://img.zouma.work/image-20220503120205536.png" alt="image-20220503120205536" loading="lazy"></p>
<p><strong>复制一下邀请函</strong>(其实也是一个连接地址),然后通过 钉钉,微信,发送给团队成员。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;团队成员,在自己的GitHub 里面的地址栏,复制管理员发来的邀请函。</p>
<img src="http://img.zouma.work/image-20220503120538926.png" alt="image-20220503120538926" style="zoom: 80%">
<p>然后就出现了,邀请函!接受,就称为项目团队的一员!可以,push 代码了。</p>
<img src="http://img.zouma.work/image-20220503120620437.png" alt="image-20220503120620437" style="zoom: 80%">
<h3 id="跨团队协作">跨团队协作</h3>
<p>另一个团队先要根据,本团队发来的链接,点击fork 叉 到 他 的远程库</p>
<p><img src="http://img.zouma.work/image-20220503160300528.png" alt="image-20220503160300528" loading="lazy"></p>
<img src="http://img.zouma.work/image-20220503160333814.png" alt="image-20220503160333814" style="zoom: 67%">
<p><strong>另一个团队,修改代码,之后,发送一个 Pull request ,</strong></p>
<p><img src="http://img.zouma.work/image-20220503145951223.png" alt="image-20220503145951223" loading="lazy"></p>
<p><strong>本团队,刷新之后, Pull request会出现一个请求,</strong></p>
<p><img src="http://img.zouma.work/image-20220503145918888.png" alt="image-20220503145918888" loading="lazy"></p>
<p><strong>本团队审核通过之后,可以</strong></p>
<p><img src="http://img.zouma.work/image-20220503150204001.png" alt="image-20220503150204001" loading="lazy"></p>
<h3 id="github_ssh-免密登录">GitHub_SSH 免密登录</h3>
<p><code>ssh-keygen</code>:生成 ssh 免密登录的协议</p>
<p><code>-t</code> :指定哪种加密算法来生成</p>
<p><code>rsa</code>: 著名的非对象加密协议</p>
<p><code>-C</code>:描述</p>
<p><strong>运行命令生成 <code>.ssh </code>公钥秘钥目录</strong></p>
<p>​        <strong>全:<code> ssh-keygen -t rsa -C wykwork2022@163.com</code></strong></p>
<p>复制公钥,然后在GitHubsettings 中添加SSH 公钥。</p>
<p>如下:</p>
<p>【注意】这里没有.ssh 目录,连敲三次回车</p>
<p><img src="http://img.zouma.work/image-20220503152105290.png" alt="image-20220503152105290" loading="lazy"></p>
<p><img src="http://img.zouma.work/image-20220503152302464.png" alt="image-20220503152302464" loading="lazy"></p>
<p><strong>测试 ssh 代码拉取,和推送</strong></p>
<p><strong>拉取:</strong></p>
<img src="http://img.zouma.work/image-20220503153900896.png" alt="image-20220503153900896" style="zoom: 80%">
<img src="http://img.zouma.work/image-20220503153930014.png" alt="image-20220503153930014" style="zoom: 80%">
<p><strong>ssh push 操作</strong></p>
<img src="http://img.zouma.work/image-20220503154134997.png" alt="image-20220503154134997" style="zoom: 80%">
<h2 id="idea-集成-git">IDEA 集成 Git</h2>
<h3 id="1环境准备">1、环境准备</h3>
<h4 id="配置-git-忽略文件">配置 Git 忽略文件</h4>
<img src="http://img.zouma.work/image-20220503154903657.png" alt="image-20220503154903657" style="zoom: 67%">
<p><strong>maven 项目的 target 目录</strong></p>
<p><strong>问题 1: 为什么要忽略它们?</strong></p>
<p>​        答:与项目实际功能无关,不参与服务器上的部署运行,消除 IDE 之间的差别。</p>
<p><strong>问题 2:怎么忽略?</strong></p>
<p>(1)配置一个文件(忽略文件)   xxx.ignore(前缀不重要,随便起,建议是 <code>git.ignore</code>)</p>
<p>这个文件存放位置,原则上哪里都可以,但是为了便于让 ~/.gitconfig 文件引用,建议也放在用户家目录下。</p>
<p><code>git.ignore</code>文件模板如下</p>
<pre><code class="language-ignore">Compiled class file
.class
</code></pre>
<h4 id="定位-git-程序">定位 Git 程序</h4>
<img src="http://img.zouma.work/image-20220503162637087.png" alt="image-20220503162637087" style="zoom: 67%">
<h3 id="2初始化--添加--提交">2、初始化 &amp; 添加 &amp; 提交</h3>
<p><strong>用 idea初始化本地库</strong></p>
<p><img src="http://img.zouma.work/image-20220503163220832.png" alt="image-20220503163220832" loading="lazy"></p>
<p>next</p>
<p><img src="http://img.zouma.work/image-20220503163356937.png" alt="image-20220503163356937" loading="lazy"></p>
<p><img src="http://img.zouma.work/image-20220503164004698.png" alt="image-20220503164004698" loading="lazy"></p>
<p>说明 这个项目被 Git 接管了!</p>
<p><strong>添加add 到暂存区</strong></p>
<img src="http://img.zouma.work/image-20220503165013811.png" alt="image-20220503165013811" style="zoom: 80%">
<p>都变绿了!</p>
<p><img src="http://img.zouma.work/image-20220503165054801.png" alt="image-20220503165054801" loading="lazy"></p>
<p><strong>提交 commit 到本地库</strong></p>
<img src="http://img.zouma.work/image-20220503165122843.png" alt="image-20220503165122843" style="zoom: 80%">
<p><strong>变白了,说明已经提交到本地库!</strong></p>
<p><img src="http://img.zouma.work/image-20220503165220997.png" alt="image-20220503165220997" loading="lazy"></p>
<h3 id="3切换版本">3、切换版本</h3>
<p><strong>蓝色的文件表示,这个文件被追踪过,但是被修改了,没有add,和 commit 。</strong></p>
<p><img src="http://img.zouma.work/image-20220503165746439.png" alt="image-20220503165746439" loading="lazy"></p>
<p>那们我们添加暂存区,提交本地库,(在 idea 里面,这个文件已经被追踪了,所以可以直接提交,不用添加暂存区了!)</p>
<p><strong>查看版本:</strong></p>
<p><img src="http://img.zouma.work/image-20220503170819242.png" alt="image-20220503170819242" loading="lazy"></p>
<p><strong>切换会 first 版本 ,发现代码发生了变化</strong></p>
<p><img src="http://img.zouma.work/image-20220503170851843.png" alt="image-20220503170851843" loading="lazy"></p>
<h3 id="4创建分支--切换分支">4、创建分支 &amp; 切换分支</h3>
<p>法1:</p>
<img src="http://img.zouma.work/image-20220503172859895.png" alt="image-20220503172859895" style="zoom: 80%">
<p>法2:</p>
<img src="http://img.zouma.work/image-20220503172915026.png" alt="image-20220503172915026" style="zoom: 80%">
<img src="http://img.zouma.work/image-20220503173039829.png" alt="image-20220503173039829" style="zoom: 80%">
<p>也可以在这里切换分支</p>
<img src="http://img.zouma.work/image-20220503173154927.png" alt="image-20220503173154927" style="zoom: 80%">
<h3 id="5合并分支">5、合并分支</h3>
<h4 id="正常合并">正常合并</h4>
<p><img src="http://img.zouma.work/image-20220503173746962.png" alt="image-20220503173746962" loading="lazy"></p>
<p><strong>合并成功!</strong></p>
<p><img src="http://img.zouma.work/image-20220503173914348.png" alt="image-20220503173914348" loading="lazy"></p>
<h4 id="冲突合并">冲突合并</h4>
<p>在同一位置,有两套不同的代码修改,由我们手动选择,需要的代码,或者说去掉哪些代码。</p>
<p>idea 非常的智能,如下!</p>
<p><img src="http://img.zouma.work/image-20220503175701659.png" alt="image-20220503175701659" loading="lazy"></p>
<p>手动合并成功!</p>
<img src="http://img.zouma.work/image-20220503175757099.png" alt="image-20220503175757099" style="zoom: 67%">
<h2 id="idea-集成-github">IDEA 集成 GitHub</h2>
<h3 id="1设置-github-账号">1、设置 GitHub 账号</h3>
<p>idea 使用 GitHub 要先登录 GitHub 的账号 ,用 账号密码登录非常慢,可能登录 100来次成功一次! 如下</p>
<img src="http://img.zouma.work/image-20220507195113411.png" alt="image-20220507195113411" style="zoom: 80%">
<p>所以我们使用 Token 登录!</p>
<p><strong>【注意】</strong>在 GitHub 中生成Token ,注意只能生成一次,刷新网页就找不到了,如果下次再用忘了的话只能重新申请了!</p>
<p><img src="http://img.zouma.work/image-20220507195613692.png" alt="image-20220507195613692" loading="lazy"></p>
<p><img src="http://img.zouma.work/image-20220507195559478.png" alt="image-20220507195559478" loading="lazy"></p>
<h3 id="2分享项目到-github">2、分享项目到 GitHub</h3>
<p>不用在 GitHub 创建远程库,直接从idea 中把项目分享到 GitHub 上。</p>
<p><img src="http://img.zouma.work/image-20220507200655877.png" alt="image-20220507200655877" loading="lazy"></p>
<p>next</p>
<p><img src="http://img.zouma.work/image-20220507200838274.png" alt="image-20220507200838274" loading="lazy"></p>
<h3 id="3推送代码到远程库">3、推送代码到远程库</h3>
<p>​                        &nbsp;&nbsp;&nbsp;&nbsp;<font color="purple">注意:push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,<br>
push 的操作是会被拒绝的。也就是说,要想 push 成功,一定要保证本地库的版本要比远程<br>
库的版本高!<strong>因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地</strong><br>
<strong>代码的区别!如果本地的代码版本已经落后,切记要先 pull 拉取一下远程库的代码,将本地</strong><br>
<strong>代码更新到最新以后,然后再修改,提交,推送!</strong></font></p>
<p><img src="http://img.zouma.work/image-20220507205803592.png" alt="image-20220507205803592" loading="lazy"></p>
<p><img src="http://img.zouma.work/image-20220507205832028.png" alt="image-20220507205832028" loading="lazy"></p>
<p><img src="http://img.zouma.work/image-20220507205840801.png" alt="image-20220507205840801" loading="lazy"></p>
<h3 id="4拉取远程库代码合并到本地库">4、拉取远程库代码合并到本地库</h3>
<p><img src="http://img.zouma.work/image-20220507204425828.png" alt="image-20220507204425828" loading="lazy"></p>
<p><img src="http://img.zouma.work/image-20220507204439682.png" alt="image-20220507204439682" loading="lazy"></p>
<h3 id="5克隆代码到本地">5、克隆代码到本地</h3>
<p><img src="http://img.zouma.work/image-20220507210118283.png" alt="image-20220507210118283" loading="lazy"></p>
<p><img src="http://img.zouma.work/image-20220507210135759.png" alt="image-20220507210135759" loading="lazy"></p>
<h2 id="gitee-码云">Gitee 码云</h2>
<h3 id="创建远程库">创建远程库</h3>
<p>和 GitHub 是一样的。</p>
<h3 id="idea-集成-gitee">IDEA 集成 Gitee</h3>
<ol>
<li>
<p>先在 idea 装一下 Gitee 插件,然后重启一下 idea。</p>
</li>
<li>
<p>在 Gitee 中添加自己的Gitee 账号。</p>
</li>
</ol>
<h3 id="导入-github-项目">导入 GitHub 项目</h3>
<p><strong>码云连接 GitHub 进行代码复制和迁移</strong></p>
<p>码云提供了直接复制 GitHub 项目的功能,方便我们做项目的迁移和下载。<br>
具体操作如下:</p>
<p><img src="http://img.zouma.work/image-20220508000612009.png" alt="image-20220508000612009" loading="lazy"></p>
<p><img src="http://img.zouma.work/image-20220508000624112.png" alt="image-20220508000624112" loading="lazy"></p>
<p><img src="http://img.zouma.work/image-20220508000639113.png" alt="image-20220508000639113" loading="lazy"></p>
<p>如果 GitHub 项目更新了以后,在码云项目端可以手动重新同步,进行更新!</p>
<p><img src="http://img.zouma.work/image-20220508000703809.png" alt="image-20220508000703809" loading="lazy"></p>
<p><img src="http://img.zouma.work/image-20220508000755249.png" alt="image-20220508000755249" loading="lazy"></p>
<h2 id="局域网代码托管平台-gitlab">局域网代码托管平台-GitLab</h2>
<h3 id="1简介和安装环境准备">1、简介和安装环境准备</h3>
<p><strong>简介:</strong></p>
<p>​        GitLab 是由 GitLabInc.开发,使用 MIT 许可证的基于网络的 Git 仓库管理工具,且具有<br>
wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。</p>
<p>​                GitLab 由乌克兰程序员 DmitriyZaporozhets 和 ValerySizov 开发,它使用 Ruby 语言写<br>
成。后来,一些部分用 Go 语言重写。截止 2018 年 5 月,该公司约有 290 名团队成员,以<br>
及 2000 多名开源贡献者。GitLab 被 IBM,Sony,JülichResearchCenter,NASA,Alibaba,<br>
Invincea,O’ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX 等组织使用。</p>
<p><strong>GitLab 官网地址</strong></p>
<p>官网地址:https://about.gitlab.com/<br>
安装说明:https://about.gitlab.com/installation/</p>
<h3 id="2安装--初始化服务--启动服务">2、安装 &amp; 初始化服务 &amp; 启动服务</h3>
<p><strong>服务器准备</strong><br>
&nbsp;&nbsp;&nbsp;&nbsp;准备一个系统为 CentOS7 以上版本的服务器,要求内存 4G,磁盘 50G。<br>
&nbsp;&nbsp;&nbsp;&nbsp;关闭防火墙,并且配置好主机名和 IP,保证服务器可以上网。<br>
&nbsp;&nbsp;&nbsp;&nbsp;此教程使用虚拟机:主机名:gitlab-server IP 地址:192.168.6.200<br>
<strong>安装包准备</strong><br>
Yum 在线安装 gitlab- ce 时,需要下载几百 M 的安装文件,非常耗时,所以最好提前把<br>
所需 RPM 包下载到本地,然后使用离线 rpm 的方式安装。<br>
<strong>下载地址:</strong><br>
&nbsp;&nbsp;&nbsp;&nbsp;https://packages.gitlab.com/gitlab/gitlab-<br>
&nbsp;&nbsp;&nbsp;&nbsp;ce/packages/el/7/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm<br>
注:资料里提供了此 rpm 包,直接将此包上传到服务器/opt/module 目录下即可。</p>
<h3 id="3登录-gitlab-并创建远程库">3、登录 GitLab 并创建远程库</h3>
<h3 id="4idea-集成-github">4、IDEA 集成 GitHub</h3>


</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:走马!,转载请注明原文链接:https://www.cnblogs.com/zou-ma/p/16319899.html</p><br><br>
来源:https://www.cnblogs.com/zou-ma/p/16319899.html
頁: [1]
查看完整版本: Git、GitLab、 GitHub 、Gitee 的使用