Git——基础篇

Git简而言之就是个版本控制工具,用于跟踪和管理代码的工具。

版本控制

本地版本控制

就是我们自己本地对文档进行保存文件的每一个修改版本的记录。

集中式版本控制——SVN

有一个远程服务器对文档进行维护版本,历史版本存放在远程服务器中,所有人对该版本进行同步更新或提交修改,多对一的关系。

缺点时如果远程服务器宕机了那么就会有单点故障问题,导致不可用,且无法查看历史版本。

分布式版本控制

每个用户或者说使用者的电脑上都拥有一个版本控制仓库,因此所有人都可以在本地查看版本的历史记录,可以离线在本地提交,当需要提交到远程服务器上时只需执行push即可。当然push前要先拉去到远程服务器上最新的文档,本质上说和集中式版本控制差不多,最终都是以远程服务器上的文档为主,不同的是版本的迭代历史记录从远程服务器上只有一份变成了所有的人都维护保存一份所有的版本记录,理论上只要有一个用户的设备没有问题就能恢复所有的数据,但相对的增加了每个用户本地的存储空间的占用

优点是不会因为远程服务器的宕机等故障而导致版本丢失无法工作的问题,但只是尽可能地减少了问题导致的故障,提高了容错性,因为最终还是要以远程服务器上的版本为主,只是因为每个用户都维护了一份版本记录使得容错性大大提高,可以快速地使用本地版本数据恢复正常。

Git和SVN的区别

  • GIT是分布式版本控制,SVN是集中式版本控制。
  • GIT把内容按元数据方式存储(简单说就是Git在本地就是一个 克隆版的版本库 ),而SVN是按文件。
  • GIT分支和SVN的分支不同, SVN的分支就是版本库中的另外的一个目录,而Git的分支因为我们本地有个版本库而切换和使用非常简洁方便。
  • GIT没有一个全局的版本号,而SVN有。SVN的版本号实际是任何一个相应时间的源代码快照,而Git是所有人都有一份版本库,不需要像SVN这样处理。
  • GIT的内容完整性要优于SVN。 GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

Git和SVN的区别

GIT与SVN之间的五大基本区别

前提准备

linux基本命令

Git的命令窗

  1. #删除linux下全部文件,/斜杠表示从根目录开始递归迭代删除,千万不要乱使用
  2. rm -rf /

Git配置

  1. #查看git配置
  2. git config -l
  3. #查看git的系统级别的配置
  4. git config --system --list
  5. #git的本地或者说全局配置
  6. git config --global --list
  7. #设置全局用户名和邮箱,用于向git标识自己的身份id,git每次提交都会使用到该信息
  8. #全局配置用户名
  9. git config --global user.name "wayne"
  10. #全局配置邮箱
  11. git config --global user.email "eamil@qq.com"

Git配置文件地址

Git基本工作原理





Git项目搭建

  1. #在当前目录下新建一个git本地仓库
  2. git init
  3. #克隆远程仓库到本地
  4. git clone [url]
  5. git clone https://github.com/roylai47/git-test.git

创建远程项目

  1. #克隆远程仓库到本地 直接在idea的terminal窗口中执行git命令
  2. git clone [url]
  3. git clone https://github.com/roylai47/git-test.git

Git基本操作

基本操作

  1. #查看文件状态
  2. git status [filename]
  3. #查看所有文件状态
  4. git status
  5. #正常一次提交流程
  6. #先从远程服务器上拉取
  7. git pull origin master
  8. #添加所有文件到暂存区
  9. git add .
  10. #提交暂存区中的内容到本地仓库 -m 提交信息
  11. git commit -m "提交描述"
  12. #推送本地提交到远程服务器上
  13. git push origin master



忽略文件

  1. # 表示忽略这个文件夹里的文件
  2. /target/

常用.gitignore文件

文件1:

  1. ### gradle ###
  2. .gradle
  3. /build/
  4. !gradle/wrapper/gradle-wrapper.jar
  5. ### STS ###
  6. .settings/
  7. .apt_generated
  8. .classpath
  9. .factorypath
  10. .project
  11. .settings
  12. .springBeans
  13. ### IntelliJ IDEA ###
  14. /.idea/
  15. /private/
  16. /storage/
  17. /litemall.iml
  18. .checkstyle
  19. .idea
  20. *.iws
  21. *.iml
  22. *.ipr
  23. rebel.xml
  24. ### maven ###
  25. target/
  26. *.war
  27. *.ear
  28. *.zip
  29. *.tar
  30. *.tar.gz
  31. ### logs ####
  32. /logs/
  33. *.log
  34. ### temp ignore ###
  35. *.cache
  36. *.diff
  37. *.patch
  38. *.tmp
  39. *.java~
  40. *.properties~
  41. *.xml~
  42. ### system ignore ###
  43. .DS_Store
  44. Thumbs.db
  45. Servers
  46. .metadata
  47. upload
  48. gen_code

文件2:

  1. # Eclipse project files
  2. .project
  3. .classpath
  4. .settings
  5. # IntelliJ IDEA project files and directories
  6. *.iml
  7. *.ipr
  8. *.iws
  9. .idea/
  10. # Geany project file
  11. .geany
  12. # KDevelop project file and directory
  13. .kdev4/
  14. *.kdev4
  15. # Build targets
  16. /target
  17. */target
  18. # Report directories
  19. /reports
  20. */reports
  21. # Mac-specific directory that no other operating system needs.
  22. .DS_Store
  23. # JVM crash logs
  24. hs_err_pid*.log
  25. # SVN
  26. .svn
  27. # test log
  28. logs/
  29. #db
  30. db/

配置SSH公钥——用于ssh地址

  1. #生成ssh公钥
  2. ssh-keygen
  3. #增加后缀是可以指定公钥的加密方式为rsa
  4. ssh-keygen -t rsa
  5. #注意连续3次空格生成

地址C:\Users\castamere\.ssh

IDEA操作Git



实用操作

基于索引值的版本前进后退

  1. #基于索引值的版本前进后退,获取当前索引值
  2. git reflog
  3. #回退到索引值所在的版本 2cb2e6c
  4. git reset --hard 2cb2e6c
  5. #回退到某个分支
  6. git rest --hard origin/master
  7. #基于HEAD指针回退一步
  8. git reset --hard HEAD^
  9. #基于HEAD指针回退3步,就加3个^
  10. git reset --hard HEAD^^^
  11. #基于HEAD指针回退3步,就加~3
  12. git reset --hard HEAD~

Git合并冲突

  1. #当前分支dev,执行git merge master是把master分支合并到当前分支上
  2. git merge master

Git执行merge合并操作时,如果有冲突,会描述出冲突,并在冲突的位置加入冲突部分,需要我们人工介入处理。

删除下图中显示冲突的标示行,再把冲突的代码调整到我们想要的结果即可。

最后再提交push请求到远程服务器上就好了。

Git保证数据的完整性

Git通过加密比较加密结果

版本数据管理机制

SVN是增量版本数据管理机制,只保留变化的部分。

Git是快照流。

Gitlab服务器搭建

ce与ee的区别是ce是社区版(Community Edition),ee是企业版(Enterprise Edition)。



把上面的安装过程中的命令放在一个安装脚本中install.sh

然后再更改脚本执行权限为可执行文件

  1. chmod 755 install.sh
  2. #执行安装脚本
  3. ./install.sh
  4. #安装完成后需要重启服务器
  5. reboot
  6. #执行gitlab初始化配置
  7. gitlab-ctl reconfigure
  8. #启动gitlab
  9. gitlab-ctl start
  10. #停止gitlab
  11. gitlab-ctl stop
  12. #关闭防火墙,避免访问不了,生产上不要粗暴关闭防火墙,而是开放gitlab的端口号
  13. service firewalld stop

注意:执行前先保存快照用于安装出现问题时回滚。

gitlab包含了很多中间件比如redis、Nginx等。

扩展

  1. Git是Linus开发出来的,目前最优秀的版本控制工具。
  2. 所有下载慢的【需要连接外网或者访问资源服务器在国外的网站】软件或工具都可以通过镜像去下载,比如淘宝、阿里等的镜像。
  3. linux系统中,一切皆文件。
  4. 所有的配置文件,在本地都会保存一份。
  5. 配置环境变量只是为了能全局使用,并不影响软件的使用。如果想在任何位置都可以使用就需要配置环境变量。
  6. 暂存区本质上只是个文件Index.可以查看.git文件夹看到。
  7. idea的terminal窗口中执行git命令。
  8. git大全
  9. git历史记录的操作前进后退其实是操作HEAD指针的移动。

  1. Git中被删除的文件只要有提交记录就永远都可以从历史版本中拿到,只需要恢复到历史版本总拿到该文件,再回到最新的文件中添加即可。或者只是查看历史版本,然后复制出来即可。
  2. docker无法在centOS7以下搭建,不要选择安装centOS7以下的版本。

问题

重要:创建一个新项目,如何把新项目添加到gitlab或者github中?

步骤:

  1. 首先要现在github上创建一个项目名对于的远程仓库,比如说git-test。

  2. 然后把该项目拉去到本地来。执行pull命令

  3. 接着在idea中创建一个新项目,项目的路径就选择刚刚从github上拉去下来的git-test文件夹所在的路径。不用担心无法创建成功或者有冲突。

  4. 再把创建的项目初始化好,配置好.gitignore文件,把/target/ .idea等这些文件排除掉。

  5. 最后再提交代码并推送到远程服务器上,这样其他人就可以拉取到新项目的代码协同工作了。

  1. #暂存所有文件 .表示所有的,如果有指定的文件则在add 后输入指定的文件名
  2. git add .
  3. #提交到本地参考
  4. git commit -m "gitinit"
  5. #推送到远程服务器
  6. git push origin master

参考

尚硅谷Git :较全面

狂神Git :太过简单只能做到满足初学者日常提交使用仅此而已。

Git——基础篇的更多相关文章

  1. Git基础篇

    对于Git的一些基础了解,安装,里面的一些名词,这里就不做介绍了.主要记录怎么使用GIt. 本篇介绍: 配置个人信息        生成本地仓库并与远程库相连        添加SSH秘钥       ...

  2. 【Git - 基础篇】如何快速有效的管理你的代码 - 安装和配置

    [本文仅凭个人经验进行整理,如有错误,欢迎指正,互相学习^^] -------------------------------------------------------------------- ...

  3. 关于Eclipse使用Git基础篇

    一:Git的下载与安装与基本使用 1.打开eclipse->help->Eclipse Markplace->search->fiind输入Egit 你会看到如下截图(我的为已 ...

  4. Git基础篇【转】

    转自:https://i.cnblogs.com/EditPosts.aspx?opt=1 1.设置名字与邮箱 $ Git config –global user.name “YourName” $ ...

  5. GIT基础篇,配置账号及命令查看以及帮助命令

    提交用户名和邮件地址   1 安装完Git首先要设置你的用户名称与邮件地址.每一个Git的提交都会使用这些信息,并且它会写入到你的每一次提交中. 2 git config --global user. ...

  6. Git命令汇总(基础篇)

    自己用Git有一段时间了,随着项目越来越多,功能分支也随之增加,从简单的基础命令到随心所欲,需要自己不断地去尝试总结,下面来分享一下我的Git使用总结. 本章基础篇主要讲解一些Git代码提交流程和Gi ...

  7. g4e基础篇#2 Git分布式版本控制系统的优势

    g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索. 章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git ...

  8. g4e基础篇#3 Git安装与配置

    g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索. 章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git ...

  9. g4e基础篇#6 了解Git历史记录

    章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git 分布式版本控制系统的优势 Git 安装和设置 了解Git存储库(Repo) 起步 1 – 创建分支和保存代码 起步 2 – 了解Git ...

随机推荐

  1. python基础之python牛逼的设计模式

    七大设计原则: 1.单一职责原则[SINGLE RESPONSIBILITY PRINCIPLE]:一个类负责一项职责. 2.里氏替换原则[LISKOV SUBSTITUTION PRINCIPLE] ...

  2. JQuery 使用教程

    引言 JQuery 是一个 JavaScript 库,它极大地简化了 JavaScript 编程.JQuery 拥有丰富的选择器,可以非常方便的获取和操作 DOM 元素,而在 JQuery 中所有选择 ...

  3. centos7安装google-chrome

    完整的安装步骤:https://www.tecmint.com/install-google-chrome-on-redhat-centos-fedora-linux/ 1.简单安装测试版:sudo ...

  4. linux 系统监控命令之 top-(转自 Howie的专栏)

    top命令经常用来监控linux的系统状况,比如cpu.内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解. 本文通过一个运行中的 ...

  5. redis 和 mysql 的主从复制

    1. mysql主从复制 (1) 为什么要做主从复制? 1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写 ...

  6. nignx反向代理web服务器的配置与使用

    一.为什么要用nignx反向代理 1.负载均衡 当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃.为了避免服务器崩溃,让用户有更好的体验,我们通过负载均 ...

  7. .Net Core with 微服务 - Ocelot 网关

    上一次我们通过一张架构图(.Net Core with 微服务 - 架构图)来讲述了微服务的结构,分层等内容.从现在开始我们开始慢慢搭建一个最简单的微服务架构.这次我们先用几个简单的 web api ...

  8. 『动善时』JMeter基础 — 35、JMeter接口关联【JSON提取器】详解

    目录 1.JSON提取器介绍 2.JSON提取器界面详解 3.JSON提取器的使用 (1)测试计划内包含的元件 (2)HTTP Cookie管理器内容 (3)用户登陆请求界面内容 (4)JSON提取器 ...

  9. Guava-retry,java重试组件

    使用场景 在日常开发中,我们经常会遇到需要调用外部服务和接口的场景.外部服务对于调用者来说一般都是不可靠的,尤其是在网络环境比较差的情况下,网络抖动很容易导致请求超时等异常情况,这时候就需要使用失败重 ...

  10. 安装Linux操作系统过程及出现的问题

    写在前面的话:由于是昨天装的,很多图片没来得及及时的保存,只好凭记忆回想,出现的问题只能回忆起大致的操作及应用软件. 另外,目前是小白一枚. 在安装时,我一开始想直接采用硬盘安装,参考帖子:http: ...