设为首页 收藏本站
查看: 713|回复: 0

[经验分享] Git分布式版本控制

[复制链接]

尚未签到

发表于 2018-9-16 12:16:05 | 显示全部楼层 |阅读模式
  一、常见的版本管理工具有
  SVN 集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库挂了或者不可访问,所有的使用者无法使用SVN,无法进行提交或者备份文件
  Git 分布式的版本控制系统,在每个使用者电脑就有一个完整的数据仓库,没有网络依然可以使git,当然为了习惯团队协作,会将本地数据同步到git服务器或者GitHub等代码仓库
  二、Git介绍
  Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
  Git的三种重要模式,分别是已提交、已修改、已暂存
  已提交(committed):表示数据文件已经顺利提交到Git数据库中。
  已修改(modified):表示数据文件已经被修改,但未被保存到Git数据库中。
  已暂存(staged):表示数据文件已经被修改,并会在下次提交时提交到Git数据库中。
  提交前的数据文件可能会被随意修改或丢失,但只要把文件快照顺利提交到Git数据库中,那就可以完全放心了,流程为:
  1.在工作目录中修改数据文件。
  2.将文件的快照放入暂存区域。
  3.将暂存区域的文件快照提交到Git仓库中。
  三、Git安装
  [root@git-node1 ~]# getenforce #确认Selinux关闭状态
  Disabled
  [root@git-node1 ~]# systemctl stop firewalld #关闭防火墙
  yum install  git -y
  四、Git全局配置
  git config --global user.name "zcf"  # 配置git使用用户
  git config --global user.email "137182136766@139.com"  # 配置git使用邮箱
  git config --global color.ui true  # 语法高亮
  git config --list # 查看全局配置
  五、Git常用命令
  add #添加文件内容至索引
  bisect #通过二分查找定位引入 bug 的变更
  branch #列出、创建或删除分支
  checkout #检出一个分支或路径到工作区
  clone #克隆一个版本库到一个新目录
  commit #记录变更到版本库
  diff #显示提交之间、提交和工作区之间等的差异
  fetch #从另外一个版本库下载对象和引用
  grep #输出和模式匹配的行
  init #创建一个空的 Git 版本库或重新初始化一个已存在的版本库
  log #显示提交日志
  merge #合并两个或更多开发历史
  mv #移动或重命名一个文件、目录或符号链接
  pull #获取并合并另外的版本库或一个本地分支
  push #更新远程引用和相关的对象
  rebase #本地提交转移至更新后的上游分支中
  reset #重置当前HEAD到指定状态
  rm #从工作区和索引中删除文件
  show #显示各种类型的对象
  status #显示工作区状态
  tag #创建、列出、删除或校验一个GPG签名的 tag 对象
  六、Git初始化目录
  工作目录(git_data ):当前存放数据的地方
  暂存区域(.git):暂时存放数据的地方
  本地仓库(.git):永久存放数据的地方
  mkdir git_data
  cd git_data/
  # 初始化
  git init
  # 查看工作区状态
  git status
  七、Git添加文件
  [root@git git_data]# touch readme
  [root@git git_data]# git status
  # 未跟踪的文件:
  #   (使用 "git add ..." 以包含要提交的内容)
  #
  #readme    ###发现新建的readme文件  工作目录
  [root@git git_data]# git status
  # 位于分支 master
  # 要提交的变更:
  #   (使用 "git reset HEAD ..." 撤出暂存区)
  #
  #新文件:    readme  ####暂存区域
  [root@git git_data]# git commit -m "the first commit"
  [master 8ad0e05] the first commit
  1 files changed, 0 insertions(+), 0 deletions(-)
  create mode 100644 readme   #####存放到本地仓库
  八、Git 删除暂存区数据
  #####有些时候会向把已经添加到暂存区的文件移除,但仍然希望文件在工作目录中不丢失,换句话说,就是把文件从追踪清单中删除。
  ###没有添加到暂存区的数据直接rm删除即可
  ##已经添加到暂存区的数据
  Git rm --cached database  ##将文件从Git暂存区域的追踪列表移除(并不会删除当前目录内的数据文件)
  git rm -f  database  ##讲文件数据从Git暂存区和工作目录一起删除
  ####没有添加到暂存区的数据直接mv/rename 改名即可
  ####已经添加到暂存区的数据
  git mv readme notice
  九、Git历史记录
  #查看提交历史记录
  git log
  #查看最近几条记录
  git log -2
  #-p显示每次提交的内容差异,例如仅查看最近一次差异
  git log -p -1
  #--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息
  git log --stat -2
  #--pretty根据不同的格式展示提交的历史信息
  git log --pretty=oneline
  #以更详细的模式输出提交的历史记录
  git log --pretty=fuller -2
  #查看当前所有提交记录的简短SHA-1哈希字串与提交者的姓名,其他格式见备注。
  git log --pretty=fomat:"%h %cn"
  还可以使用format参数来指定具体的输出格式,这样非常便于后期编程的提取分析哦,常用的格式有:
  %s    提交说明。
  %cd    提交日期。
  %an    作者的名字。
  %cn    提交者的姓名。
  %ce    提交者的电子邮件。
  %H    提交对象的完整SHA-1哈希字串。
  %h    提交对象的简短SHA-1哈希字串。
  %T    树对象的完整SHA-1哈希字串。
  %t    树对象的简短SHA-1哈希字串。
  %P    父对象的完整SHA-1哈希字串。
  %p    父对象的简短SHA-1哈希字串。
  %ad    作者的修订时间。
  十、Git还原数据
  Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将
  HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避
  免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,
  另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会
  叫HEAD^,上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第
  五个提交版本。
  git reset --hard HEAD^ #→还原历史提交版本上一次
  git reset --hard 3de15d4 #→找到历史还原点的SHA-1值后,就可以还原(值不写全,系统
  会自动匹配)
  #####还原未来数据
  什么是未来数据?就是你还原到历史数据了,但是你后悔了,想撤销更改,但是git
  log已经找不到这个版本了。
  git reflog #→查看未来历史更新点
  十一、Git标签
  Git标签使用前面回滚使用的是一串字符串,又长又难记。
  git tag v1.0 #→当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。
  git tag #→查看当前所有的标签
  git show v1.0 #→查看当前1.0版本的详细信息

  git tag v1.2 -m "version 1.2>  git tag -d v1.0 #→我们为同一个提交版本设置了两次标签,删除之前的v1.0
  [root@centos7 git_data]# git reset --hard 0bdf2e7
  HEAD is now at 0bdf2e7 modified README file
  [root@centos7 git_data]# git reset --hard V1.0
  ####对比数据
  git diff可以对比当前文件与仓库已保存文件的区别,知道了对README作了什么修改后,再把它提交到仓库就放⼼多了。
  git diff README
  十二、分支结构
  在实际的项目开发中,尽量保证master分支稳定,仅用于发布新版本,平时不要随便直接修改里面的数据文件。
  那在哪干活呢?干活都在dev分支上。每个人从dev分支创建自己个人分支,开发完合并到dev分支,最后dev分支合并到master分支。
  [root@gitlab git_data]# git status
  # On branch master   #默认就在master分支
  [root@gitlab git_data]# git branch dev     #创建dev分支
  [root@gitlab git_data]# git branch          #查看当前所在分支/查看所有分支
  dev
  * master
  [root@gitlab git_data]# git checkout dev   #切换分支到dev
  [root@gitlab git_data]# git branch         #查看当前所在分支/查看所有分支
  * dev
  master
  [root@gitlab git_data]# git branch dev     #创建dev分支
  [root@gitlab git_data]# git branch          #查看当前所在分支/查看所有分支
  dev
  * master
  [root@gitlab git_data]# git checkout dev   #切换分支到dev
  [root@gitlab git_data]# git branch         #查看当前所在分支/查看所有分支
  * dev
  master
  注:切换分支之前请务必commit,否则修改会丢失。
  [root@gitlab git_data]# git checkout dev   #切换分支到dev
  [root@gitlab git_data]# echo "dev branch" >> kkk.txt
  [root@gitlab git_data]# git status
  [root@gitlab git_data]# git commit -a -m "dev-commit"   #提交
  十三、分支自动合并
  1)自动合并:只有文件同一行内容没有冲突,就可以自动合并
  [root@gitlab git_data]# git checkout master  #切换到master分支
  Switched to branch 'master'
  [root@gitlab git_data]# git merge dev    #把dev分支自动合并到当前分支
  Updating 242bac0..995e05e
  Fast-forward
  kkk.txt | 2 ++
  1 file changed, 2 insertions(+)
  2)合并冲突: 文件冲突 – 文件的同一行有不同的内容
  模拟冲突(分别修改不同分支文件中的同一行的内容并提交):
  echo "master-test"  >>kkk.txt    #在master分支向文件输出测试内容
  git commit -a -m "this is master-test"  #提交
  git checkout dev     #切换分支到dev
  echo "dev-test" >> kkk.txt   #在dev分支向文件输出测试内容
  git commit -a -m "this is dev-test"   #提交
  git branch master    #再次切换到master分支
  git merge dev    #进行合并
  3)合并冲突:
  [root@gitlab git_data]# git merge dev
  Auto-merging kkk.txt
  CONFLICT (content): Merge conflict in kkk.txt
  Automatic merge failed; fix conflicts and then commit the result.
  4)手动解决合并冲突
  修改提交的文件,保留要留下的内容,其他冲突内容删除
  [root@gitlab git_data]# cat kkk.txt
  test
  dev branch
  > dev
  #比如要保留master-test,其他提示内容都删除,删除后文件内容如下:
  [root@gitlab git_data]# cat kkk.txt
  test
  dev branch
  master-test
  #再次提交
  [root@gitlab git_data]# git commit -a -m "解决合并冲突"
  [master 071f8cd] 解决合并冲突
  #重新进行合并
  [root@gitlab git_data]# git merge dev
  Already up-to-date.
  可以看到,冲突已经解决。
  5)删除dev分支
  git branch -d dev
  十四、windows客户端使用
  windows的git,本质是windows上的linux系统
  TortoiseGit-2.2.0.0-64bit 给git加外壳, svn客户端的git版本
DSC0000.jpg

  十五、Git服务器
  1)使用GitHub或者码云等公共代码仓库
  2)使用GitLab私有仓库
  私有仓库GITLAB
  https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/
  机器内存给大点
  yum localinstall gitlab-ce-9.1.4-ce.0.el7.x86_64.rpm
  gitlab-ctl reconfigure #→初始化,就执行一次
  gitlab-ctl status/stop/start
  通过浏览器访问页面,设置初始密码,其他操作类似GitHUB。
  账户: root 密码自己设置为12345678
  注:gitlab搭配ssh默认端口引发的血战
  
  [ sed -i ‘s/#Port 22/Port 52113/g’ /etc/ssh/sshd_config
  #如果是默认的22,就必须修改,否则不生效,我这里改为了52113
  systemctl restart sshd #重启sshd服务
  grep “ssh_port” /etc/gitlab/gitlab.rb #修改gitlab里面的ssh_prot端口为自己服务器的sshd端口,声明gitlab.yml中的配置会被这个给覆盖
  gitlab_rails[‘gitlab_shell_ssh_port’] = 52113
  gitlab-ctl reconfigure #gitlab重新加载配置文件即可
  十六、GITHUB使用
  Github顾名思义是一个Git版本库的托管服务,是目前全球最大的软件仓库,拥有上百
  万的开发者用户,也是软件开发和寻找资源的最佳途径, Github不仅可以托管各种Git
  版本仓库,还拥有了更美观的Web界面,您的代码文件可以被任何人克隆,使得开发
  者为开源项贡献代码变得更加容易,当然也可以付费购买私有库,这样高性价比的私
  有库真的是帮助到了很多团队和企业


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-584525-1-1.html 上篇帖子: git版本控制器的安装使用 下篇帖子: git操作问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表