git及gitlab的使用

            git及gitlab使用说明

经理要求抛弃掉svn使用git作为版本管理工具,由于之前完全没有解除使用过,自己学着搭建gitlab,看很多介绍git及gitlab使用的文章,越看越迷糊,最终就形成了如下的文档。目前已经团队已经在使用git、gitlab,也遇到了很多问题。接下来能成熟使用后重新写一篇吗。这篇先丢这里了。

1.你应该知道的Git、GitLab、SourceTree

1.1 关于 Git 你应该知道

 Git 是一个分布式版本控制系统。分布式的意思是,每个人电脑上都是一份完整的代码库,包含了所有的代码提交历史。由于 Git 分布式的特点,在没有网络的情况下,依然可以自由地将代码提交的本地的代码库中,等网络恢复后再推送到服务器,开发更加灵活和自由。

重要概念:本地一个代码库,对本地文件的所有操作,最后都是提交到这个代码库中。同时可以设置多个远程(remote,默认的remote通常用origin表示),当你要将代码更新到服务器上时(称作push),就通过设置的remote,更新到指定的服务器。

关于多个remote:例如其他公司的开发人员,在自己的公司中开发代码,将默认remote设置为公司自己的源码管理服务器,同时设置另外一个remote为移动的源码服务器。这样即可以将代码提交到自己公司的服务器,同时也可以提交到移动的服务器。

总之就一句话:git是一个分布式版本控制系统。每个人自己的本地库就相当于一个完整的SVN服务器。

SVN是这样工作的

Git是这样工作的:

每个开发者都拥有一个git仓库,每个git仓库都相当于一台完整的svn服务器,开发者只需提交版本记录到自己本地库中。有需要时向远程仓库进行推送。

1.2 关于GitLab你应该知道

Gitlab Git 服务端的集成管理平台,提供了:

1.     代码托管服务

2.     访问权限控制

3.     问题跟踪,bug的记录、跟踪和讨论

4.     Wiki,项目中一些相关的说明和文档

5.     代码审查,可以查看、评论代码

1.3 关于SourceTree你应该知道

SourceTree只是Git系统的一个管理工具,百度百科的定义是这样的:SourceTree Windows Mac OS X 下免费的 Git Hg 客户端管理工具,同时也是MercurialSubversion版本控制系统工具。支持创建、克隆、提交、pushpull 和合并等操作。

SourceTree拥有一个精美简洁的界面,大大简化了开发者与代码库之间的Git操作方式,这对于那些不熟悉Git命令的开发者来说非常实用。

2.我们应该这样工作

    认识了三款工具的不同,现在开始我们的工作。

我们使用Git进行版本管理,使用GitLab对我们的代码进行托管。每个开发者从上游仓库(GitLab)获取到最新的代码,形成自己的本地仓库。一般,我们从develop分支形成自己的分支,比如我从远程的develop分支检出本地分支dev_jwx,我的开发工作和bugfix就基于我的dev_jwx分支进行(我甚至可以把本地分支dev_jex命名为develop,和远程分支一样的名称),当远程develop分支有版本变动时会通知我有哪些变动,我根据自己的实际需要可以选择是否更新这些变动。当我的开发工作完成后,我会把本地的dev_jwx分支推送到GitLab上。如果我希望我GitLab上的工作被纳入正式工作,那么我会发起一个Merge Request,请求把我的最新修改并入正式工作中。我们的工作流程可以用这样的一张图来说明:

有一点值得说明的是,请注意黄色线应该从GitLab中央仓库节点开始。当前分支的工作结束后我们应该发起Merge Request,在发起Merge Request时我们应该先从GitLab中央仓库的develop分支拉取更新(pull)代码,这期间可能出现冲突,我们必需先解决冲突然后把Pull成功的代码Push到我们的GitLab开发者分支,然后再发起Marge Request

3.在SourceTree上我们这样做

    无论是在SourceTree上还是在Eclipse上,我们的工作都应当是先从GitLab里创建自己的分支。检出对应分支到自己本地之后就可以开始我们的工作,进行完一些工作我们需要推送当前任务到我们的GitLab分支,因为最终的成果是从我们的GitLab分支合并到GitLab中央仓库的develop分支的,当然,只有在完成当前分支的需求或当前分支的某个阶段性成果后我们才会去请求把我们的GitLab分支合并进GitLab中央仓库的develop分支。请记得,在我们请求合并我们的开发者分支之前,先从develop分支拉取最新的代码以保证我们工作不是徒劳的。

3.1拉取项目

3.1.1创建GitLab开发者分支

我们应现在GitLab上创建自己的分支,自己的分支是基于develop分支而来。

注意命名及上游分支的选取

 

3.1.2在SourceTree上检出分支

在SourceTree上,把GitLab上的分支检出到本地。

 

 

3.2 工作中普通的推送

工作中的一般推送我们可以直接点击推送菜单,选择推送到自己的开发者分支即可。

如果其他同事有在你的分支上进行工作,请自行拉取同步代码,解决冲突之后提交、推送到自己分支。

3.3合并请求

    当前分支工作结束后我们希望上游仓库接受我们的工作成果,就需要在GitLab上发起Merge Request。此时GitLab中央仓库的develop可能已经发了一些版本的迭代,我们先推送本地最新代码到我们的GitLab分支,然后检出最新的develop分支到本地,把develop分支合并进我们的开发分支(可能会有冲突,需要解决冲突),之后推送到我们的GitLab开发者分支就可以发起合并请求了。

3.3.1 先推送最新修改

 

3.3.2 检出develop分支

可以看出,develop分支已经比我的dev_jiawenxiao分支快了几个版本

3.3.3 把develop分支合并进我的分支(同步代码排除冲突)

3.3.4 合并后推送

可以看到,我的dev_jiawenxiao分支已经与develop保持了同步

3.3.5发起合并请求

4.在Eclipse上我们这样做

4.1拉取项目

4.1.1创建GitLab开发者分支

注意分支命名和父分支

4.1.2在Eclipse上导入工程

File-->Import-->Git-->Projectsfrom Git-->Clone URI

4.2工作中的普通推送

 

 

4.3合并请求

在这里,我们所做的操作和SourceTree上是一样的。可以回顾下3.3节中的说明以加深理解。

4.3.1 先推送最新修改

4.3.2 与develop分支对比解决冲突

4.3.3 把develop分支合并进我的分支

4.3.4 合并后推送

 

4.3.5 发起合并请求

 

5.对,就是这样

现在回头再看看,我们的所有操作都是基于这张图的:

合并操作是最有可能出现问题的部分,很大可能都是冲突造成的,请耐心解决冲突后合并。

 

 

 

下面是一个 GitLab 触发 Jenkins 执行流水线并将流水线结果反馈给 GitLab 的示例: 1. 创建 Jenkins Job 首先,需要在 Jenkins 中创建一个 Job,用于执行 GitLab 合并请求触发的流水线。这个 Job 的主要作用是拉取代码,执行构建操作,生成流水线报告,并将报告发送给 GitLab。具体而言,这个 Job 需要完成以下几个步骤: - 拉取代码:从 GitLab 上指定的分支中拉取代码。 - 执行构建操作:根据项目的具体需求,执行编译、测试、打包、部署等操作。 - 生成流水线报告:将构建过程中的日志、测试结果、代码覆盖率等信息汇总成一份流水线报告。 - 将报告发送给 GitLab使用 GitLab 提供的 API,将流水线报告发送给 GitLab。 2. 创建 GitLab Pipeline 接下来,在 GitLab 中创建一个 Pipeline,用于触发 Jenkins Job 执行。具体而言,需要在 GitLab 中创建一个 `.gitlab-ci.yml` 文件,配置如下: ``` stages: - test jenkins: stage: test script: - curl -X POST http://<JENKINS_HOST>/job/<JOB_NAME>/build --user <USERNAME>:<API_TOKEN> --data-urlencode json='{"parameter": [{"name":"GITLAB_SOURCE_BRANCH", "value":"$CI_MERGE_REQUEST_SOURCE_BRANCH"}, {"name":"GITLAB_TARGET_BRANCH", "value":"$CI_MERGE_REQUEST_TARGET_BRANCH"}, {"name":"GITLAB_PROJECT_ID", "value":"$CI_PROJECT_ID"}, {"name":"GITLAB_MERGE_REQUEST_IID", "value":"$CI_MERGE_REQUEST_IID"}, {"name":"GITLAB_MERGE_REQUEST_TITLE", "value":"$CI_MERGE_REQUEST_TITLE"}, {"name":"GITLAB_CI_PIPELINE_ID", "value":"$CI_PIPELINE_ID"}, {"name":"GITLAB_CI_COMMIT_SHA", "value":"$CI_COMMIT_SHA"}]}' -H "Content-Type:application/x-www-form-urlencoded" only: - merge_requests ``` 这个配置文件中包含一个 `jenkins` Job,它的作用是触发 Jenkins Job 执行。具体而言,它通过 `curl` 命令调用 Jenkins 的 API,将 GitLab 中的一些信息(如分支、项目 ID、合并请求 ID 等)传递给 Jenkins,以便 Jenkins 在执行 Job 时获取这些信息。 3. 在 Jenkins 中配置构建参数 为了使 Jenkins Job 能够获取 GitLab 中的一些信息,需要在 Jenkins 中配置一些构建参数。具体而言,需要在 Jenkins Job 的配置页面中添加以下参数: - GITLAB_SOURCE_BRANCH:合并请求的源分支。 - GITLAB_TARGET_BRANCH:合并请求的目标分支。 - GITLAB_PROJECT_ID:GitLab 项目的 ID。 - GITLAB_MERGE_REQUEST_IID:合并请求的 ID。 - GITLAB_MERGE_REQUEST_TITLE:合并请求的标题。 - GITLAB_CI_PIPELINE_ID:GitLab 的 Pipeline ID。 - GITLAB_CI_COMMIT_SHA:GitLab 的 Commit SHA。 这些参数的值将在触发 Jenkins Job 时通过 API 传递进来,并且可以在 Jenkins Job 中使用。 4. 在 Jenkins 中配置流水线 最后,在 Jenkins 中配置流水线,用于执行构建操作、生成流水线报告,并将报告发送给 GitLab。具体而言,可以使用 Jenkins 的 Pipeline 语法,编写一个包含以下步骤的流水线: - 拉取代码:从 GitLab 上指定的分支中拉取代码。 - 执行构建操作:根据项目的具体需求,执行编译、测试、打包、部署等操作。 - 生成流水线报告:将构建过程中的日志、测试结果、代码覆盖率等信息汇总成一份流水线报告。 - 将报告发送给 GitLab使用 GitLab 提供的 API,将流水线报告发送给 GitLab。 具体而言,可以使用 Jenkins 的 `sh` 命令执行 Shell 脚本,或者使用 Jenkins 插件执行特定的构建操作。在生成流水线报告时,可以使用 Jenkins 的插件或者自定义脚本,将日志、测试结果、代码覆盖率等信息汇总成一份报告。在将报告发送给 GitLab 时,可以使用 Jenkins 的 `curl` 命令调用 GitLab 的 API,将报告发送到指定的合并请求中。 以上就是一个 GitLab 触发 Jenkins 执行流水线并将流水线结果反馈给 GitLab 的示例,具体的流水线操作需要根据项目的实际需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值