目录:
1.什么是Git
2.Git安装配置
3.Git工作流程
4.Git工作区、暂存区和版本库
5.创建仓库
6.基本操作
7.分支管理
8.查看提交历史
9.标签标记
10.远程仓库
11.服务器搭建
12.开发工具继承
13.案例:通过SSH协同开发应用
Git是一个开源的分布式版本控制系统,用于敏捷高效的处理任何项目的版本问题。Git是Linux Torvalds 为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
Git与常用的版本控制工具cvs、svn等不同,它采用了分布式版本库的方式。不必服务器端软件支持,它是主机本身既是客户端又是服务器。
1-2.关于项目版本管理
项目在开发过程中,经常会出现多人分工协作进行项目分发并开发整合的过程,所以项目在刚开始流行的时候经常会出现一些协作开发的同步的问题,同时存在项目整体进度的控制和管理的问题,所以在程序的开发行业衍生出来的版本管理工具。
版本管理工具,首先是一个内容管理工具,可以将项目的内容信息存放在版本管理服务器上方便项目组人员进行访问和查询修改。版本管理具有里程碑意义的主要有三个阶段:
cvs阶段——>svn阶段——>Git阶段
1-2-1.cvs阶段
项目搭建开发的过程中,每次提交项目都会将整个项目提交到服务器进行保存,服务器存储着项目的N个备份,开发过程中的协作效率低下,占用空间较大,同时也出现了各种传输问题,所以慢慢淡出了行业。
1-2-2.SVN阶段
考虑到cvs的缺陷,开发人员根据项目的实际情况,研发出专门针对项目版本控制的软件Subversion(简称SVN),SVN同样也是搭建服务器,让项目组成员将数据存储在服务器上,但是每次改动并提交的时候,SVN服务器并不重新保存整个项目的完整信息,而是和原来的项目进行对比,只保存改动的信息,这样就大大较少了空间的占用。所以至今为止,有很多公司依然选择使用SVN作为公司内部项目协作额版本控制软件。
1-2.3Git阶段
前面的CVS和SN都是基于一个服务器的,如果脱离服务器,项目的版本保存就没有了任何意义。Git恰恰处理了这样的问题,Git是一个分布式的版本控制系统,在Git中即使用户离线,也能进行项目的提交和更新操作,此时只是保存在本机的暂存区,等到下次连线到GitHub(类似服务器角色)时进行的整体的同步操作。
Git VS SVN
① Git是分布式的,SVN不是
②Git是按照元数据的方式存储内容,SVN是按照文件的形式存储
③Git和SVN中的分支不同
④Git没有全局版本号,SVN有
⑤Git内容的完整性由于SVN
2-2.Git工作流程
常规工作流程如下:
克隆Git资源作为目录
在克隆的资源上添加或者修改文件
如果是其他人修改过的文件,可以进行更新文件的操作
提交前的文件修改信息检查
提交修改
修改完成后,如果发现错误,撤回提交并再次修改后提交
一些常用的命令如下:
创建秘钥:ssh keygen -t rsa -C "邮箱名“”
git init dictoryname | 创建本地仓库,暂存区 |
git status | 查看当前工作区文件状态(管理|脱管) |
git add file | 将某个脱管的文件添加到Git版本管理中 |
git commit file -m ‘提交的注释’ | 提交修改后的文件,并必须提交注释 |
git log | 查看所有提交信息 |
gti diff | 查看工作区与暂存区文件的不同,也就是commit之后、push之前 |
git clone “服务器仓库地址” | 从远程服务器克隆项目到本地暂存区 |
git branch | 查看所有分支,绿色带星号为当前所在分支 |
git branch “新分支名称" | 增加一个分支 |
git chechout "分支名称" | 切换到某个指定分支 |
git merge "另一个分支名称“ | 将另一个分支的代码合并到当前分支 |
git branch -d “分支名称” | 删除指定分支 |
3.工作区、暂存区及版本库
基本概念
工作区:个人 PC 中能看到的文件目录结构
暂存区:stage/index,一般存放在.git/index 中,所以 git 中的暂存区也会 称为索引
版本库:工作区中的.git 隐藏文件,不算是工作区,而是 Git 的版本库。
当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新, 同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的 ID 被记录在暂存区的文件索引中。
当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支 指向的目录树所替换,但是工作区不受影响。
当执行 "git rm --cached
当执行 "git checkout ." 或者 "git checkout --
当执行 "git checkout HEAD ." 或者 "git checkout HEAD
4.Git 本地操作
创建工作目录——本地仓库
git init
Git 使用 git init 命令初始化一个 git 仓库。 git 很多命令都是在仓库中运行的,git init 执行完成后 Git 会在对应的目录中创建一 个.git 隐藏文件夹,文件夹中的文件包含了 git 所有元数据,其他的项目文件夹保持不变
使用当前文件夹作为 git 仓库 进入对应的文件夹中,执行 git init 命令即可
指定文件夹作为 git 仓库 执行 git init myrepo;
执行完成后,myrepo/文件夹下会出现一个.git 目录,
创建好的项目文件夹中,就可以通过 git add file_name 命令,就可以告诉 git 对指定 的文件进行跟踪操作。
最后对修改的文件进行提交操作
克隆项目到工作目录 所谓克隆项目,就是创建远程 git 仓库中的项目副本 git clone
4-2 基本操作【核心】
获取与创建项目命令 git init [
添加文件到缓存中——暂存区 git add
查看上次提交之后的修改状态 git status
查看具体的修改信息 git diff:查看尚未缓存的改动{尚未 add 操作} git diff --cached:查看已经缓存的改动 git diff HEAD:查看已经缓存和未缓存的所有改动 git diff --stat:查看摘要信息
添加内容到仓库中 git commit:将缓存区中的内容添加到仓库中。 git 为你的每一个提交记录名字和电子邮箱地址【教程开头使用 git config 配 置的用户信息】 git commit -m “注释内容”:-m 选项用于提交时添加注释内容
同时 git 提供了-a 选项,用于提示提交简略信息
取消缓存内容 git reset HEAD:用于取消用户已经缓存的内容 修改 README 和 file2 文件
取消 file2 缓存
从缓存区中移除 git rm
4-3 分支管理
很多的版本控制工具都是支持分支操作的,使用分支操作的意义是从开发的主线上分离开达 到不影响主线任务的同时进行功能开发 项目一旦创建,就会有一个主线分支 master,开发过程中,如果需要其他的并行开发 的需要,就会创建新的分支进行异步开发。
>> 列出分支 git branch
备注:前面有梅花图案,表示当前正在操作的分支。 >> 创建分支 git branch [branch_name]
备注:使用 git branch 命令,添加一个分支 shopcart。再列出当前所有分支,可以看到有两个分 支,并且当前是工作在 master 主分区中。
>> 切换分支 git checkout [branck_name]
备注:通过 git checkout 命令切换分支,切换完成后,通过列出分支命令 git branch 看到当前工 作在 shopcart 分支
>> 合并分支 git merge
备注:所谓合并分支,是指将指定分支的代码和当前分支进行合并,完成代码的共享,这里的 git merge 合并的是分支的内容。并不是将两个分支变成一个分支。
>> 删除分支 git branch –d [branch_name]
备注:通过 git branch -d
4-4查看提交历史
使用 git 提交/更新等操作、或者克隆项目等操作后,很多情况下需要查看某个项目的操作 历史记录信息
git log:专门用于查看所有的 git 仓库操作历史数据的命令 git log --online:查看项目的历史纪录的简洁版本 git log --graph:查看历史记录中的分支、合并等操作 git log --reverse:逆向显示所有的日志 git log --author:查看指定用户的提交日志 git log --before={3.week.age} --after{2015-10-11}:指定时间段查询 git log --no-merges:隐藏合并提交 >> git log $ git log
commit 75b98b48898557dadfeb75048f25025fc846d040
Author: muwenbin <[email protected]> Date: Mon Sep 5 17:02:04 2016 +0800
取消缓存测试
commit c25e6c14e45c44a94b169110ce342e9a6ef0202a Author: muwenbin <[email protected]>
Date: Mon Sep 5 16:58:07 2016 +0800
用户须知修改
.. .. .. .. .. .. ..
commit c25e6c14e45c44a94b169110ce342e9a6ef0202a
Author: muwenbin <[email protected]>
Date: Mon Sep 5 16:58:07 2016 +0800
用户须知修改
commit 1edb7a8ad089427e882c8f94c2d08d39eeef55ff
Author: muwenbin <[email protected]> Date: Mon Sep 5 16:56:13 2016 +0800
提交所有修改内容
5标签/标记操作
项目开发的过程中,会出现一些重要重大的改动,通常会称为里程碑版本等等,显示这 个版本的重要性,在使用 Git 操作的时候,同样也可以通过特殊的方式标记某个版本的特 殊性。
git tag
5-1 远程操作
以上所有的操作都是在本地执行,但是如果要团队协作开发项目,或者将项目分享给其 他人的话,就需要将项目数据放在其他人都能访问的服务器上。操作步骤如下: github 注册账号-> 本地生成 SSH 密钥-> 仓库中添加密钥-> SSH 通讯
5-2 注册账号
浏览器打开 http://github.com 网站 默认打开首页时,页头部分提示了注册,如果没有提示,点击导航区域的 Sign Up 进 入注册页面 注册需要填写邮箱、密码、确认密码。
15-3 创建仓库
注册成功之后,进入登录页面/点击导航 Sign In 进入登录页面
使用账号登录 github.com 网站,如下图所示:点击 New repositoy 创建项目仓库。
以上信息提示,可以从当前的仓库中克隆项目,也可以将本地项目推送到 GitHub 仓库中。
>> 推送项目 执行如下命令,将项目推送到远程仓库中
>> 查看仓库
5-4 远程操作命令
>> 查看远程仓库 git remote git remote –v -v 参数可以查看到每个仓库别名的实际连接地址
>> 提取远程仓库 git fetch
备注:命令执行完成后,需要通过 git merge 合并远程分支到你自己的分支中 git pull:从远程仓库提取数据并尝试合并到当前分支
>> 推送到远程仓库 git push [alias] [branch] 将 branch 分支推送称为 alias 远程仓库的 branch 分支 >> 删除远程仓库 git remote rm [repo_name]
6 IDE 工具集成 GIT
.、6-1 HBuilder 集成 GIT 开发
菜单-> 插件安装 EGIT->安装
共享项目 项目上右键点击 选择 Team->共享项目 在 Repository 中选择一个本地的 GIT 工作区 工作区可以先选择一个目录文件夹 点击 Create 按钮,会将选中的文件夹创建成 git 工作区 点击完成,就会将要共享的项目剪贴到工作区中 以后修改和提交的项目,都是 git 管理的项目,可以进行修改、提交、回退 等等各种操作。
1-5.2 WebStrom 集成 GIT 开发
1) 电脑上安装 git 客户端,下载地址:https://git-scm.com/downloads/ 2) 打开 webstrom,点击 File->Settings 3) 在设置窗口中,找到 Version Control->GitHub,填写配置
备注:填写在 GitHub 上注册的账号和密码
4) 配置 Git,找到 Version Control->Git
备注:上面红色标注区域,就是前面安装的 git 的可执行文件
5) 分享[share project on github]或者检出[checkout from..]项目
7 案例:SSH 协同开发项目配置
项目实际开发中,通常我们常见好一个项目,由第一个人将项目上传到创建好的 git 远 程仓库中。其他人更新到本地,并进行开发,开发的过程中会有【更新、提交、合并】等等 操作。如果只是使用账号创建的仓库,除了本人可以进行读取和提交的操作之外,其他登录 到 git 的账号只能读取你的项目而不能进行写入操作(如提交新文件等)。
这样的情况下,就需要对项目开发人员进行授权操作,有权限的开发人员才能进行项目 的读取/写入操作。
Git 出了上述的 HTTPS 项目操作之外,还有另一种 SSH 密钥匹配的操作,由每一个开 发人员在自己的个人 PC 上创建一个 SSH 密钥,然后将密钥提供给 GIT 远程仓库进行配置 添加,添加了 SSH 标识的客户端 PC 就可以对仓库进行读取/写入操作,由此完成多人协同 开发的目的。
1-6.1 多人协同开发案例
1) 项目发起人创建仓库。 创建公共仓库,名称为 1000phone_repo 选择 Public 选择生成 Readme.md 文件 提交创建仓库
2) 收集客户端 SSH 密钥 a) 参与项目开发的客户端 PC,在个人 PC 上,生成 SSH 密钥
b) 检测 Git 连接有效性
上图中如果出现 are you sure you want to continue connecting?输入 yes
提示 Hi ***! You’ve successfully authenticated..就表示接入成功。
密钥文件位置:通常情况,密钥文件会生成在 C:\Users\[username]\.ssh\文件夹的 下面,username 表示电脑的名称。
id_rsa.pub 内容如下(这个文件的内容,是需要提供给 github 进行配置的) : ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZw/UcMD6PKzyiUM+MVwKnuT66kUdaFmy3 WM2kQLnLGQ1bBXr/DpIDMt3k2VXAqaiDg5smKFNtb0LjSwqm0z1gVTYO3Upv/4sY O9Kmnr5H7yityMBih+8nOheRHmwFfUVOBpdOcZEOtf91gL2rmVn0BdO4tkh2lhYc lFIpm30UEVnvJUud04Qi468dNkb3hztAj1D5h60EhiHYUJLE8I/MhmRPRB1seMrA 5waBPkIf++qvoU/m6HLUBr6iLV95pb5VR0+DDaO4caqhMut4YOcmjKOY5ino8Vur Zp1k9oRsFrGdXq1KmxHVX86obk+fgjT4sedyL/cXP5qrKd04cVjt [email protected]
c) GitHub 添加密钥
点击 New SSH Key title 中输入你注册 github 用的邮箱,key 中输入前面的步骤中用 ssh 命令生成的 密钥文件内容即可。
点击 Add SSH Key 之后,添加完成。如下图所示:
此时,就可以向这个用户的所创建的仓库进行数据的增删改查了。
1-6.2 工具配置之 HBuilder
HBuilder 前面的内容中已经集成了 Git 插件,可以进行项目的操作。这部分讲解 Git 实 现团队协作。 主要有以下配置项: 1) 配置 SSH 进入选项配置
配置 SSH
备注:SSH2 主页,配置的是命令行生成的密钥文件目录【参考 1.2.13 章节】;私钥就是密钥文件名称, 将生成的 id_rsa、id_rsa.pub 以及 known_hosts 文件添加进来。确定即可。
2) 项目操作 a) 后续的项目操作,选项如下图:使用 SSH 传输协议,URI 也是 SSH 地址(GIT 仓 库中提供的地址,直接复制得到)
1-6.3 工具配置之 WebStrom
webstrom 因为直接配置的 git 客户端,客户端已经对密钥进行了处理。ws 不需要进行二 次处理了。直接进行如下配置即可。