§ Git环境
§ Git介绍
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。。
§ Git与SVN区别
Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。 如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,来适应 Git 提供的一些概念和特征。 Git 与 SVN 区别点:
- 1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
- 2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
- 3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
- 4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
- 5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
§ Git安装配置
在使用Git前我们需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。
Git 各平台安装包下载地址为:http://git-scm.com/downloads (opens new window)
§ window系统上安装
在 Windows 平台上安装 Git 同样轻松,有个叫做 msysGit 的项目提供了安装包,可以到 GitHub 的页面上下载 exe 安装文件并运行:
安装包下载地址:https://gitforwindows.org/ (opens new window)
官网慢,可以用国内的镜像:https://npm.taobao.org/mirrors/git-for-windows/ (opens new window)。
完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一个图形界面的 Git 项目管理工具。
在开始菜单里找到"Git"->"Git Bash",会弹出 Git 命令窗口,你可以在该窗口进行 Git 操作.
§ Mac系统上安装
在 Mac 平台上安装 Git 最容易的当属使用图形化的 Git 安装工具,下载地址为:
http://sourceforge.net/projects/git-osx-installer/ (opens new window)
安装界面如下所示:
§ Git工作流程
简单介绍 Git 的工作流程。
一般工作流程如下:
克隆 Git 资源作为工作目录。
在克隆的资源上添加或修改文件。
如果其他人修改了,你可以更新资源。
在提交前查看修改。
提交修改。
在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
下图展示了 Git 的工作流程:
§ Git工具
§ Sourcetree
§ Sourcetree介绍
Sourcetree是由Atlassian开发的免费Git图形界面工具,可以操作任何Git库。支持window 和 Mac。
§ 下载安装
首先从官网 (opens new window)下载SourceTree并安装,然后直接运行SourceTree。
§ 使用说明
第一次运行SourceTree时,SourceTree并不知道我们的Git库在哪。如果本地已经有了Git库,直接从资源管理器把文件夹拖拽到SourceTree上,就添加了一个本地Git库。
也可以选择从远程克隆到本地。§ 添加仓库
mac下从url克隆:
windows下从url克隆:
§ 抓取、获取分支信息
抓取(mac下的名字)获取(Windows下的名字)指获取服务端git库的变更信息,比如落后几个版本,超前几个版本,我们平常多人协作的项目,提交代码前需要先获取一下,如果服务端有新的提交,再拉取下别人的更改,可以减少代码冲突。(菜单栏)
§ 拉取代码:
我先将界面分为 菜单栏、左侧栏、文件栏、变更栏、底部栏以方便下文介绍。
直接点击菜单栏的 拉取 按钮即可将远程代码变更拉取到本地§ 提交代码:
§ 正常提交
首先将未暂存的文件选中,点击后面的暂存所选;或者直接点击暂存所有。(文件栏)
在下方文本框输入本次代码变动的说明。(底部栏)
sourcetree默认不会推送到远程仓库,打勾立即推送变更到origin。(底部栏)
点提交即可(如果没有打勾立即推送变更到远程,还需手动点击菜单栏的推送)\
这里我模拟一些变更,随便改点代码,然后保存,再次回到提交界面。
变更栏会包含本次所有变更,其中+代表本次增加行;-代表本次删除行;前面2个行号依次代码变更前行号,变更后的行号。为了保证代码变更尽可能的少,我们需要丢弃一些无意义的变更,如153行的删了一行dt/dt,随后又增加了一行dt/dt,造成这种现象一般是代码格式化或者不小心增加了某些空格等不可见字符导致,我们可以直接选中那2行,然后点击上方的丢弃行。
需要注意的是,丢弃不等于删除,丢弃所丢的东西是那一行的变更,比如是+号,那么丢掉代表不增加这一行,减号-同理丢的是不删除这一行,也就是恢复这一行。
sourcetree会把所有的变更以区块来分组,所以如果是整个区块的变更都没有意义,可直接丢弃整个块,如图:
随后暂存所选提交(文件栏)
§ 暂存代码
暂存和丢弃类似,是将代码片段暂存到本地暂存区 以备提交,提交时所提交的代码就是暂存区的代码。当我们某个功能已经实现了,但是又想优化一下代码,可又担心等会没优化成功,此时的代码丢失,如果没有git之前,我们可能会备份一份代码,这里只需要暂存代码即可。暂存后,正常修改,后续的变更会出现在未暂存文件中的变更栏中。
此时无论是丢弃,还是继续暂存都是基于上次已暂存的文件。
当然,你也可以提交代码,来实现类似功能。
§ 解决冲突
当我和别人改了相同文件的相同行时,(大部分我们多人改变了一个文件,git都会帮我们处理掉,自动合并,但是当改变同一文件的相同行时,在拉取时就会有冲突)如图:
我们可以先将我们代码贮藏起来(菜单栏),然后再拉取代码,接着应用贮藏,应用后冲突的文件会显示出来
这个时候,我们需要指定一个版本,比如是别人的版本为准,还是我的版本,随后右键文件选择 解决冲突使用我的版本(左侧栏选择文件状态-》工作副本)
变更栏可以看到updated upstream 是别人改的版本,+====下面我改的版本。
如果远程和本地都有问题,建议打开ide工具编辑后提交。
§ 新开分支
在项目中,我们可能分为开发分支、集成分支、生成环境分支等,这时我们只需要在某个节点上右键选择分支即可
输入一个辨识度强的分支名,点击"创建分支"即可。便可在ST的左侧栏的"分支"树形结构下看到新建的分支了。
不过这里要注意的是此时该分支只是存在于操作者本地,如果该分支是需要团队共享的,那还需要操作者将其提交到服务端,即 推送分支。
§ 推送分支
新开的分支不会在远程显示,所以需要将分支推送到远程。
确认之后,其他小伙伴就可以看到你创立的分支了!
§ 切换分支
需要切换到不同分支时,直接双击想要切换的分支即可。
§ 拉取远程分支
找到远程对应的想拉取的分支右键,点击 检出 即可。
§ 回滚提交
有些时候,我们提交的代码有问题,需要回滚回去。
§ 回滚某次提交
将某次变更(在sourcetree里是某个节点)右键选择回滚提交。
§ 回滚文件
§ 忽略文件
项目中,有一些文件夹是需要忽略,而不需要提交到仓库里,比如bin目录下、target目录下的文件。
这里支持忽略单个文件、忽略所有扩展名、或略文件夹下的一切等。之后,我们不会看到这些文件变动。
需要说明的是忽略文件,只能忽略未跟踪文件,如果已跟踪文件(之前被提交过),需要先将这些文件删除后,提交代码库,再次忽略文件。
§ 合并分支
由图中可以看出,我们的测试分支代码落后master分支2个节点,我们可以在master分支上右键选择合并到当前分支
当有冲突时,需要和上文中介绍的那样解决冲突,然后提交;如果没有冲突,需要手动点击推送按钮将合并后的变更提交到远程
§ 查看文件变动历史
我们时常需要查看某个文件变动的历史,这里我们可以右键查看文件的 变更历史
点击后效果如图:
§ 标签的使用
我们有些时候需要给一个变更增加一个标签,比如稳定版1.0的标签
效果如下:
§ 注:
- 尽可能丢弃一些无意义的变更
- 尽可能按模块分配开发人员任务
- 合并分支后需立刻解决掉冲突
- 减少单个文件内代码变动的区块
- 如果使用我的版本解决问题,需告知对方