1. 了解git

1.1 git历史

同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,于是整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。

到 2005 年的时候,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux的缔造者 Linus Torvalds )不得不吸取教训,只有开发一套属于自己的版本控制系统才不至于重蹈覆辙。他们对新的系统订了若干目标:

  • 速度
  • 简单的设计
  • 对非线性开发模式的强力支持(允许上千个并行开发的分支)
  • 完全分布式
  • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

1.2 git是什么

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

1.3 git可以做什么

  1. 版本控制: Git可以跟踪文件的更改,记录每个版本的变化,并允许您轻松地查看先前的版本、比较不同版本之间的差异以及恢复到以前的状态。这对于开发者来说非常有用,因为他们可以在开发过程中随时回顾代码的演变,并了解每个更改对代码的影响。
  2. 分支管理: Git允许您创建分支,这是项目开发中的一个关键概念。通过创建分支,您可以在不影响主要代码的情况下进行实验性的更改或并行开发多个功能。然后,您可以将这些更改合并回主要分支。
  3. 团队协作: Git使得多人协作变得容易。团队成员可以独立工作,并将他们的更改推送到共享的远程存储库。Git提供了工具来处理并发更改,并确保所有成员都能够获取最新的代码版本。
  4. 远程存储: 您可以将您的本地Git存储库连接到远程存储库(如GitHub、GitLab或Bitbucket),以便将您的代码备份到云端,并与其他人共享您的工作。这也使得团队可以跨不同位置共同开发项目。
  5. 代码审查: Git的分支和合并功能使得进行代码审查变得更加容易。团队成员可以创建拉取请求(Pull Requests)或合并请求(Merge Requests),并请求其他人审查他们的更改。这有助于确保代码质量,并提供反馈和建议。
  6. 项目发布: 使用Git,您可以轻松地管理项目的发布。您可以为每个发布版本创建一个标签,并将特定的提交集合标记为一个发布版本。这样,您可以随时查看项目的历史发布记录,并在需要时回滚到特定的版本。

1.4 优缺点

优点:

适合分布式开发,强调个体;

公共服务器压力和数据量都不会太大;

速度快、灵活;

任意两个开发者之间可以很容易的解决冲突;

离线工作。

缺点:

代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息;

权限控制不友好;如果需要对开发者限制各种权限的建议使用SVN。

1.5 安装git(windows)

官网

下一步下一步即可

2.结合idea使用(idea2019.3.5)

  • 首先注册gitee账号

gitee官网

1. idea添加gitee账号

  • 首先先安装gitee插件 安装完成提示重启idea

idea add gitlab account 只有token idea登陆gitlab账号_java

  • 修改gitee配置
  • idea添加账号密码
  • 如果本地配置了gitee远程ssh密钥登录可以勾选以下选项 (拉取仓库代码使用ssh)

idea add gitlab account 只有token idea登陆gitlab账号_开发者_02

2. idea分享项目到gitee

idea add gitlab account 只有token idea登陆gitlab账号_开发者_03


idea add gitlab account 只有token idea登陆gitlab账号_git_04


idea add gitlab account 只有token idea登陆gitlab账号_ide_05


idea add gitlab account 只有token idea登陆gitlab账号_git_06


idea add gitlab account 只有token idea登陆gitlab账号_开发者_07


idea add gitlab account 只有token idea登陆gitlab账号_git_08


idea add gitlab account 只有token idea登陆gitlab账号_git_09


idea add gitlab account 只有token idea登陆gitlab账号_开发者_10

  • 上述操作 代码已经提交到了本地仓库,现在上传到远程gitee仓库

idea add gitlab account 只有token idea登陆gitlab账号_intellij-idea_11


idea add gitlab account 只有token idea登陆gitlab账号_ide_12

  • 此时刷新gitee仓库 发现可以看到上传的代码

idea add gitlab account 只有token idea登陆gitlab账号_git_13


纠正错误

  • test-project.iml 文件不需要上传仓库

3. idea拉取gitee上的项目

idea add gitlab account 只有token idea登陆gitlab账号_intellij-idea_14

idea add gitlab account 只有token idea登陆gitlab账号_intellij-idea_15


idea add gitlab account 只有token idea登陆gitlab账号_java_16


idea add gitlab account 只有token idea登陆gitlab账号_git_17


idea add gitlab account 只有token idea登陆gitlab账号_git_18


idea add gitlab account 只有token idea登陆gitlab账号_intellij-idea_19


idea add gitlab account 只有token idea登陆gitlab账号_ide_20


idea add gitlab account 只有token idea登陆gitlab账号_intellij-idea_21


idea add gitlab account 只有token idea登陆gitlab账号_开发者_22


idea add gitlab account 只有token idea登陆gitlab账号_git_23


idea add gitlab account 只有token idea登陆gitlab账号_java_24


idea add gitlab account 只有token idea登陆gitlab账号_intellij-idea_25


idea add gitlab account 只有token idea登陆gitlab账号_git_26


idea add gitlab account 只有token idea登陆gitlab账号_git_27

4. 分支提交代码 合并代码 代码冲突 更新本地代码

理解分支

  • 分支是主线某个状态的一个复制, 在不影响主线情况下, 可以有新的变化
  • 我们的工作一般都是在一条主线(master)上进行, 每一次提交会形成一个commit对象, 如下图所示

客户提出了一个新的需求, 而这个需求的开发需要一段时间才能完成.

为了不影响主线的稳定性和持续进行. 我们会怎么做?

我们可以把整个项目复制一份, 在复制的项目上开发新功能, 开发完成通过测试后, 再将改动的代码整合回主线.

那么, 这个复制出来的项目就是一个分支

idea add gitlab account 只有token idea登陆gitlab账号_java_28


现在, 我们了解到分支的提出主要是为了开发新功能而不影响主线的正常运行

通过上面的例子, 我们大概可以知道

  1. 分支和主线有一部分内容是相同的, 有一部分是不同的
  2. 在分支上可以做新的开发, 而不会影响到原来的主线
  3. 在分支上开发完成后, 通常还是要将改动合并回主线

4.1 提交代码

创建分支,并提交代码到gitee仓库

idea add gitlab account 只有token idea登陆gitlab账号_git_29


idea add gitlab account 只有token idea登陆gitlab账号_ide_30


idea add gitlab account 只有token idea登陆gitlab账号_开发者_31


idea add gitlab account 只有token idea登陆gitlab账号_ide_32


然后对代码进行修改,通过分支进行代码提交

idea add gitlab account 只有token idea登陆gitlab账号_intellij-idea_33


idea add gitlab account 只有token idea登陆gitlab账号_ide_34


idea add gitlab account 只有token idea登陆gitlab账号_git_35

4.2 合并代码

  • 分支提交代码之后master是看不到代码的
  • 可以切换分支进行查看dev分支提交的代码
  • 那么既然分支已经提交了代码,怎样提交到master主分支上去呢?
  • 此时就需要在dev分支下创建一个pull request请求,请求合并到master主分支上
  • 然后在弹出的页面中,选择你要合并到的分支,提交备注等等,当然也可以选择合并后的操作,标题以及说明必填项,填好之后创建pull request
  • 然后依次完成审核以及测试

idea add gitlab account 只有token idea登陆gitlab账号_java_36


idea add gitlab account 只有token idea登陆gitlab账号_ide_37


idea add gitlab account 只有token idea登陆gitlab账号_intellij-idea_38

  • 接受之后会显示 已合并,此时去master分支查看代码
  • 切换master分支,发现主分支新增了代码

4.3 代码冲突

使用git产生冲突的条件:如果在远程的某一个文件内容发生修改了,而本地没有进行pull拉取,就会导致本地的分支落后,当修改完成之后push到远程的时候,就会产生冲突,而本地如果进行pull拉取远程文件的话,相等于你现在本地的文件就是远程的文件,不会有分支落后,当修改完push的时候,就不会产生冲突,所以建议使用git的时候,先pull之后,再去修改,修改完成之后再去push。

手动测试代码冲突的问题

idea add gitlab account 只有token idea登陆gitlab账号_ide_39

idea add gitlab account 只有token idea登陆gitlab账号_java_40

  • 首先在gitee上手动在项目目录下创建一个 README.md 文件
  • 然后本地代码是没有这个文件的

idea add gitlab account 只有token idea登陆gitlab账号_开发者_41

  • 然后在本地idea创建文件并推送,此时会提示由于远程仓库代码发生变动,需要拉取代码然后在提交你的代码,因为远程代码是有READNE.md的文件的,并且本地也创建了这个文件,此时拉取代码会出现冲突的问题
  • 此时有三个选项,要么保留你的,要么保留仓库的,第三个选项进行对比选择保留的代码
  • 然后在进行提交

4.4 更新本地代码

  • 对远程仓库代码进行更新,然后idea进行拉取