Git和gitlab 持续集成的一大利器

Git

对于版本控制工具,是持续集成中的必不可少的阶段,我们需要使用一个版本控制的概念来让我们的代码利于维护,版本控制的概念最初是linux操作系统开发所衍生出的产物。如果对这个感兴趣可以网上看看为什么是linux操作系统开发所衍生出的产物。 我们先看下关于git的概念。推荐一个版本控制学习的网站,有利于对git的更加深入图形学习git

git概念:

Git 是分布式版本控制和源代码管理系统,重点使用和管理代码的速度。

Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发。

Git 是根据GNU通用公共许可证版本2的条款分发的自由/免费软件

git术语:

​ workspace:工作区

​ index/Stage:暂存区,

​ Repository:存储库,仓库

​ remote:远程仓库

使用Git:

速度快,设计简单,对非对称式的强力支持,完全分布式,有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)Git 不按照以上方式对待或保存数据。 反之,Git 更像是把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流。

Git 有三种状态,你的文件可能处于其中之一:

已提交(committed)、已修改(modified)和已暂存(staged)。

  • 已提交表示数据已经安全的保存在本地数据库中。
  • 已修改表示修改了文件,但还没保存到数据库中。
  • 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
Git 项目的三个工作区域的概念:

Git 仓库、工作目录以及暂存区域。

  • Git 仓库目录 是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
  • 工作目录 是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
  • 暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作‘索引’,不过一般说法还是叫暂存区域。
基本的 Git 工作流程如下:

​ 在工作目录中修改文件。

​ 暂存文件,将文件的快照放入暂存区域。

​ 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

​ 如果 Git 目录中保存着的特定版本文件,就属于已提交状态。 如果作了修改并已放入暂存区域,就属于已暂存状态。

​ 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

linux安装Git:

​ 安装命令:sudo apt-get install git

​ 查看版本:git version 2.7.4

​ git config 工具控制Git的行为和外观的配置变量

​ /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置

​ git config --list 命令来列出所有 Git 当时能找到的配置。

git命令:

git init 创建一个空的git仓库,或重新初始化一个现有的仓库,

git add命令将文件内容添加到索引(将修改添加到暂存区)。也就是将要提交的文件的信息添加到索引库中。

​ 在对工作树进行任何更改之后,并且在运行git commit命令之前,必须使用git add命令将任何新的或修改的文件添加到索引。该命令可以在提交之前多次执行。它只在运行git add命令时添加指定文件的内容; 如果希望随后的更改包含在下一个提交中,那么必须再次运行git add将新的内容添加到索引。

git clone: copy一个Git仓库到本地git clone [url]

git status: 查看是都有修改

git pull: 取回远程主机某个分支的更新,再与本地的指定分支合并,它的完整格式稍稍有点复杂。git pull <远程主机名> <远程分支名>:<本地分支名>

git push:命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相似。git push <远程主机名> <本地分支名>:<远程分支名>

一
	Clone就是将远程库的代码拷贝到本地
	填写远程和本地项目路径,点击“克隆“。这样就会将服务器上项目代码克隆到本地了。
二
	提交Commit和推送Push
	commit将工作空间修改提交到本地库。
	push将本地库修改提交到远程库。
三
	拉取pull和获取fetch
	pull 从远程拉取最新版本 到本地 自动合并 merge
	fetch 从远程获取最新版本 到本地 不会自动合并 merge
	虚线表示拉取到本地仓库
	实现表示拉取到本地仓库,并合并到工作空间

git工作方式:

​ 像 Subversion 一样,集中式工作流以中央仓库作为项目所有修改的单点实体。相比 SVN 缺省的开发分支 trunk,Git 叫做 master,所有修改提交到这个分支上。该工作流只用到 master 这一个分支。开发者开始先克隆中央仓库。在自己的项目拷贝中,像 SVN 一样的编辑文件和提交修改;但修改是存在本地的,和中央仓库是完全隔离的。开发者可以把和上游的同步延后到一个方便时间点。要发布修改到正式项目中,开发者要把本地 master 分支的修改『推(push)』到中央仓库中。这相当于 svn commit 操作,但 push 操作会把所有还不在中央仓库的本地提交都推上去。

​ 如果开发者本地的提交历史和中央仓库分歧,Git会拒绝push,提交否则会覆盖已经在中央仓库中的正式提交。

​ 在开发者提交自己功能修改到中央库前,需要先 fetch 在中央库的新增提交,rebase 自己提交到中央库提交历史之上。

​ 这样做的意思是在说,『我要把自己的修改加到别人已经完成的修改上。』最终的结果是一个完美的线性历史,就像以前的SVN 的工作流中一样。

​ 如果本地修改和上游提交有冲突,Git 会暂停 rebase 过程,给你手动解决冲突的机会。Git 解决合并冲突,用和生成提交一样的 git status 和 git add 命令,很一致方便。还有一点,
如果解决冲突时遇到麻烦,Git 可以很简单中止整个 rebase 操作,重来一次(或者让别人来帮助解决)。

1.创建一个空的git仓库,或重新初始化一个现有的仓库,

2.所有人进行克隆中央仓库:git clone http://github.com/path/to/repo.git基于你后续会持续和克隆的仓库做交互的假设,克隆仓库时 Git 会自动添加远程别名 origin 指回『父』仓库

3.提交:
rebase 操作过程是把本地提交一次一个地迁移到更新了的中央仓库 master 分支之上。这意味着可能要解决在迁移某个提交时出现的合并冲突,而不是解决包含了所有提交的大型合并时所出现的冲突。这样的方式让你尽可能保持每个提交的聚焦和项目历史的整洁。反过来,简化了哪里引入 Bug 的分析,如果有必要,回滚修改也可以做到对项目影响最小。

如果小红和小明的功能是相关的,不大可能在 rebase 过程中有冲突。如果有,Git 在合并有冲突的提交处暂停 rebase 过程,输出下面的信息并带上相关的指令:CONFLICT (content): Merge conflict in
git status:命令用于查看状态,及其出现问题的地方

如果执行遇到冲突:执行以下命令会回到原来的执行前的样子:git rebase --abort

pull Requests:

​ Pull Requests 是 Bitbucket 上方便开发者之间协作的功能。提供了一个用户友好的 Web 界面,在集成提交的变更到正式项目前可以对变更进行讨论。

​ 开发者向团队成员通知功能开发已经完成,Pull Requests 是最简单的用法。开发者完成功能开发后,通过 Bitbucket 账号发起一个 Pull Request。这样让涉及这个功能的所有人知道,要去做 Code Review 和合并到 master 分支。

​ 但是,Pull Request 远不止一个简单的通知,而是为讨论提交的功能的一个专门论坛。如果变更有任何问题,团队成员反馈在 Pull Request 中,甚至 push 新的提交微调功能。所有的这些活动都直接跟踪在 Pull Request 中。

gitLab:

​ GitLab 是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。

​ 它拥有与 Github 类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。

​ 团队成员可以利用内置的简单聊天程序 (Wall) 进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

Docker安装 gitlab:

​ 先进行拉取镜像:docker pull twang2218/gitlab-ce-zh

​ 用这个dockercompose启动这个:docker-compose up -d
​ 在docker-compose.yml配置如下:

​ hostname: 是本机的ip,

​ external_url: 是这个外部的使用 他必须和nginx的开放的端口一样

version: '3'
  services:
    gitlab:
    restart: always
    image: twang2218/gitlab-ce-zh
    hostname: '192.168.147.132'
    environment:
      TZ: 'Asia/Shanghai'
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.147.132:8080'
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
        unicorn['port'] = 8888
        nginx['listen_port'] = 8080
    ports:
      - '8080:8080'
      - '8443:443'
      - '2222:22'
      volumes:
        - /usr/local/docker/gitlab/config:/etc/gitlab
        - /usr/local/docker/gitlab/data:/var/opt/gitlab
        - /usr/local/docker/gitlab/logs:/var/log/gitlab

Nexus:

​ 其实就是maven的私服
​ Nexus 是一个强大的仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。2016 年 4 月 6 日 Nexus 3.0 版本发布,相较 2.x 版本有了很大的改变:

对低层代码进行了大规模重构,提升性能,增加可扩展性以及改善用户体验。

​ 升级界面,极大的简化了用户界面的操作和管理。

​ 提供新的安装包,让部署更加简单。

​ 增加对 Docker, NeGet, npm, Bower 的支持。

​ 提供新的管理接口,以及增强对自动任务的管理。

Docker 安装Nexus:

​ 在docker-compose中配置如下:

version: '3.1'
  services:
    nexus:
      restart: always
      image: sonatype/nexus3
      container_name: nexus
      ports:
        - 8081:8081
        volumes:
          - /usr/local/docker/nexus/data:/nexus-data	

通过:http://ip:port/用户名:密码:验证

注意:因为所有的data中需要权限创建一些文件:所以加入权限:

​ sudo chmod 777 data/

查看 内存:free -h

进程管理:

​ 获得htop :sudo install htop
​ htop:

默认账号密码:admin
admin123

使用maven私服:

​ 在maven中的settings.xml中加入;这里的密码如果修改了使用新的密码

  <server>
      <id>nexus-releases</id>
      <username>admin</username>
      <password>admin123</password>
  </server>

  <server>
      <id>nexus-snapshots</id>
      <username>admin</username>
      <password>admin123</password>
  </server>	

​ 配置自动化部署:这里的url是nexus中的路径。

<distributionManagement>
    <repository>
        <id>nexus-releases</id>
        <name>Nexus Release Repository</name>
        <url>http://127.0.0.1:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>nexus-snapshots</id>
        <name>Nexus Snapshot Repository</name>
        <url>http://127.0.0.1:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement> 

​ ID 名称必须要与 settings.xml 中 Servers 配置的 ID 名称保持一致。

​ 项目版本号中有 SNAPSHOT 标识的,会发布到 Nexus Snapshots Repository, 否则发布到 Nexus Release Repository,并根据 ID 去匹配授权账号

​ 部署到仓库:
​ mvn deploy

​ 配置代理仓库:

<repositories>
    <repository>
            <id>nexus</id>
            <name>Nexus Repository</name>
            <url>http://127.0.0.1:8081/repository/maven-public/</url>
            <snapshots>
                    <enabled>true</enabled>
            </snapshots>
            <releases>
                    <enabled>true</enabled>
            </releases>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
            <id>nexus</id>
            <name>Nexus Plugin Repository</name>
            <url>http://127.0.0.1:8081/repository/maven-public/</url>
            <snapshots>
                    <enabled>true</enabled>
            </snapshots>
            <releases>
                    <enabled>true</enabled>
            </releases>
    </pluginRepository>
</pluginRepositories>

如果这篇文章对你有帮助请点个赞,你的支持是我写作的最大的动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kay三石

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值