zoukankan      html  css  js  c++  java
  • Git笔记

    Git笔记

    为什么要学Git?

    多人运动!版本控制,也叫做版本迭代

    image-20200802001431387

    没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,

    • 如软件代码的一致性
    • 软件内容的冗余
    • 软件过程的事物性
    • 软件开发过程中的并发性
    • 软件源代码的安全性
    • 以及软件的整合等问题

    那么如何管理多人协同开发项目?

    版本控制

    一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

    优点

    • 实现跨区域多人协同开发
    • 追踪和记载一个或者多个文件的历史记录
    • 组织和保护你的源代码和文档
    • 统计工作量
    • 并行开发、提高开发效率
    • 跟踪记录整个软件的开发过程
    • 减轻开发人员的负担,节省时间,同时降低人为错误

    主流产品

    • Git
    • SVN(Subversion)
    • CVS(Concurrent Versions System)
    • VSS(Micorosoft Visual SourceSafe)
    • TFS(Team Foundation Server)
    • Visual Studio Online

    目前影响力最大且使用最广泛的是Git与SVN,GitHub和Gitee社区也非常火热。

    版本控制的分类

    本地版本控制

    记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。

    集中版本控制

    所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。

    代表产品:SVN、CVS

    分布式版本控制

    所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

    代表:Git

    Git与SVN的区别

    SVN是集中式版本控制系统,版本库集中放在中央服务器。

    工作时用自己的电脑,先从中央服务器获取最新的版本,然后工作,完成工作后,再把自己做完的活推送到中央服务器。

    集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。

    Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库。

    工作的时候不需要联网了,只需在连网时push到相应的服务器或其他用户。

    协同的方法:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,

    这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

    Git是目前世界上最先进的分布式版本控制系统

    Git历史

    Git起源于 Linux,Linux内核维护最初提交到 BitKeeper上,到2005年 BitKeeper的商业公司收回 Linux内核社区免费使用 BitKeeper的权利。

    于是Linux之父Linus torvalds(李纳斯·托沃兹 )决定开发自己的版本系统,仅用两周就开发出了 Git!

    Git是免费、开源的,最初Git是为辅助 Linux 内核开发的,来替代 BitKeeper!

    Git安装

    打开 git官网 ,下载git对应操作系统的版本。

    下载对应的版本即可安装!安装:无脑下一步即可!

    说明

    • Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多
    • Git CMD:Windows风格的命令行
    • Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

    Git配置

    查看所有配置:git config -l

    *注意必须要配置用户名和邮箱,表明身份

    git config --global user.name "用户名"

    git config --global user.email "邮箱"

    所有的配置文件都保存在本地

    系统级配置

    在安装目录的etc文件夹下的gitconfig

    image-20200803222452443

    用户级配置

    在当前登录的用户目录下也有gitconfig文件

    image-20200803222938461

    Git核心

    本地工作区分为

    • 工作目录 Working Directory 平时存放项目代码的地方
    • 暂存区 Staging Area 保存即将提交到本地仓库的文件列表信息
    • 资源库 Respository 存放数据的位置,包含所有提交的版本

    image-20200803224813663

    工作流程

    • 在工作目录添加或修改文件
    • 将需要进行版本管理的文件放入暂存区
      • git add .
    • 将暂存区的文件提交到本地仓库
      • git commit
    • 提交到远程仓库
      • git push

    文件状态

    • Untracked:未跟踪,不参与版本控制
    • Unmodify:文件入库但未修改
    • Modified:文件已修改,但仍未放到暂存区
    • Staged:暂存状态,commit之后提交到本地仓库

    .gitignore文件配置忽略信息

    语法规则:

    • 注释

    • 可以使用Linux通配符
      • *任意多个字符
      • ?一个字符
      • [abc]可选字符范围
      • {“str1”,"str2"} 可选字符串
    • !文件名,该文件除外
    • /目录 往上忽略
    • 目录/ 往下忽略
      • target/ 表示target目录下的都不参与版本控制

    相关命令

    命令 说明
    git init 在目录创建一个全新的仓库
    git clone [url] 从远程克隆一个仓库
    git status 查看文件状态
    **git commit -m **[msg] 提交并附带说明

    还有远程仓库(Remote)托管代码的服务器,简单认为项目组中一台电脑用于远程数据交换

    使用码云

    注册->登录->设置个人信息

    设置本机SSH公钥,免密连接

    首先输入命令 ssh-keygen -t rsa生成公钥文件

    image-20200803235701931

    然后到当前登录的用户目录下找到.ssh文件夹

    image-20200804101039205

    打开id_rsa.pub文件,全选,拷贝到码云的ssh设置中

    image-20200804101229778

    创建仓库

    image-20200804002118289

    创建好仓库之后就可以邀请团队成员

    image-20200804101549318

    IDEA集成Git

    1. 按照平时的方法创建项目,第一次使用时需要指定Git的执行文件

    image-20200804161059065

    • 将当前项目设为版本控制后就可以看到右上角多了一些图标

    image-20200804161450853

    image-20200804161629153

    • 也可以在项目的文件夹下打开bash窗口,执行git init初始化仓库
    1. 修改文件,使用IDEA操作git

      点击右上角绿色的打勾按钮,会显示下图的内容。

      一般先commit到本地仓库,再push到远程仓库。

      熟练之后可以两步一起操作,一步到位!

    image-20200804160654590

    记得提交版本时添加备注信息哦

    如果没有push成功还可以重新上传

    image-20200804162326386

    使用命令无非就三部曲

    • git add.
    • git commit -m "说明信息"
    • git push

    分支说明

    多人协作时非常重要!

    master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作。

    而是在dev分支下工作,若需要发布新版本再将稳定的dev分支代码合并到master主分支上。

    在分支合并时,出现文件冲突,协商之后选择一个稳定的文件。

    git branch 查看所有分支

    git branch -r 查看所有分支

    git btanch dev 创建开发dev分支

    git btanch -d dev 删除dev分支

    git checkout -b dev 创建并选择dev分支

    git merge [branch] 合并指定分支到当前分支

    git push origin --delete [分支 名] 删除远程分支

    git branch -dr [remote/branch] 删除远程分支

    还有很多学习资料在码云下面可以参考

    image-20200804164623176

    深入学习

    总结

    最后记录一下这次团队协作开发的感受。

    最初不明白分支的概念,项目开始就一直在主分支上工作

    image-20200804164942371

    刚开始的时候经常发生文件冲突,后来给每个人分模块在各自的包下写代码。冲突明显减少

    image-20200804165118246

    在两周时间里,有很积极的同学,也有懒散的同学。但总的来说大家都挺努力~

    要怪就怪自己管理经验不足,以后分配任务一定不能分多,而且重要的任务需要自己负责。

    不能让某个环节堵塞整个项目进度。比如项目的登录功能,负责的同学一周没做出来??

    后面很多功能都需要从session提取登录人信息,当时也没想到伪造默认登录人,一直干等着。

    如果某个人负责的模块难度超过了他的能力,及时换人调整。否则给再久的时间也是徒劳。

    为期两周的团队合作,最大的感触就是人和人之间是有差距的,不能用对自己的要求去对待别人。

    宽容理解走得慢的同学,给他们一些简单的工作。鼓励和带动上进的同学,保证项目正常完成。

  • 相关阅读:
    Percona Toolkit安装、使用
    Mysql 5.6主从搭建
    AngularJs 抓狂系列索引
    AngularJs 抓狂之: $q promise 自动unwarp功能被禁用了
    AngularJs 的 好文章
    AngularJs 抓狂之:Angular的元素是驼峰命名法,但是HTML属性是用-分隔的,两者不一致!
    Ajax请求永远是304的解决方案
    Java 7 Pocket Guide 读书笔记
    MFC中获取App,MainFrame,Doc和View类等指针的方法
    Thrift实践:(一)安装 -- 未完待续
  • 原文地址:https://www.cnblogs.com/1101-/p/13434568.html
Copyright © 2011-2022 走看看