1、版本控制系统
(1)本地版本控制系统;
(2)集中化的版本控制系统(客户端是最新的版本)
- eg:SVN:不支持离线提交版本更新;中心服务器崩溃,所有人无法正常工作;版本数据库故障后,所有更新历史记录会丢失);
(3)分布式版本控制系统(基于服务器、客户端的运行模式,去中心化)(eg:Git)
- 客户端是服务器的完整备份
- 客户端断网后仍支持离线本地提交版本更新
- 服务器故障或损坏,可用人一个客户端的备份进行恢复
2、SVN与Git记录的比较
(1)SVN的差异比较
存储的是一组基本文件和每个文件随时间逐步累积的差异(即记录每一次的差异)。节省磁盘空间,耗时且效率低。版本切换时,需要去掉部分差异
(2)Git的记录快照
在原有的文件版本基础上生成一份新的文件,类似于备份。文件未修改的话,不重新存储文件,只保留一个链接指向之前存储的文件。占用磁盘空间大,版本切换非常快,切换时恢复目标版本的快照即可
(3)Git的代码一般情况下都在本地进行提交,联网之后或者完成之后再推到中心服务器上
3、Git中的三种状态:已修改、已暂存、已提交
在工作区修改文件——将下次要提交的更改进行暂存——提交更新,找到暂存区的文件,将快照永久存在仓库中
工作区——暂存区——仓库
4、配置用户信息
git config --global user.name "用户名"
git config --global user.mail "邮箱"
git config --list --global 查看所有的全局配置项
5、git常用命令
// 获取帮助信息
git help config | git config -h
/** 获取git仓库的两种方式 */
1、将尚未进行版本控制的本地目录转换为git仓库
打开“Git bash”
执行git init命令将当前的目录转化为git仓库
2、从其它服务器克隆一个已存在的git仓库
/* 显示文件暂存状态 */
git status
git status --short
git status -s
/* 跟踪一个文件,将文件添加至暂存区 */
// 功能1:可以用它开始跟踪新文件
// 功能2:将已跟踪的、且已修改的文件放到暂存区
// 功能3:把有冲突的文件标记为已解决的状态
git add 文件名
/* 提交更新,写文件名,提交这个文件,不写文件名,提交所有的文件 */
git commit (文件名) -m "描述"
/* 撤销修改(只能撤销工作区的操作) */
git checkout -- 文件名
// 撤销工作区未暂存的所有修改
git checkout .
/* 一次性暂存多个文件 */
git add .
/* 从暂存区中移除对应的文件 */
git reset HEAD -- 要移出的文件名称
// 从暂存区移除多个文件
git reset HEAD -- .
git restore --staged <文件名>
/* 跳过暂存区 */
git commit -a -m "描述信息"
/* 从git中移除文件 */
// 从仓库中和工作区都移除
git rm -f 文件名
// 只从仓库中移除,工作区保留
git rm --cached 文件名
6、忽略文件(.gitignore,文件在忽略之前已经提交,那此文件将不会被忽略)
(1)以#开头的是注释
(2)以/结尾的是目录
(3)以/开头防止递归(/TODO忽略当前目录下的TODO文件夹,subdir/TODO不会忽略其它文件夹下面的TODO)
(4)以!开头的是取反(除了自身其它都忽略)
(5)glob模式对文件盒文件夹进行匹配
* 匹配0或多个任意字符
[abc] 匹配任何一个列在方括号中的字符
? 只匹配一个任意字符
[a-b] 从a到b之间的字符都可以匹配
7、查看提交历史
// 查看完整提交历史(当前版本之前),最近的在最上面按q键停止
git log
// 查看最近的n条提交历史
git log -n
// 让提交信息在同一行显示
git log -n --pretty=oneline
// 让提交信息在同一行显示,并自定义输出格式
// %h(提交的简写哈希值)
// %an(作者名字)
// %ar(作者修订日期,按多久以前的方式显示)
// %s(提交说明)
git log -n --pretty=format:"%h | %an | %ar | %s"
8、回退到指定版本
// 在第一行查看所有的版本
git log --pretty=oneline
// 根据指定的提交ID,回退到指定版本
git reset --hard <CommitID>
// 在旧版本中执行此命令,查看命令的操作历史(当前版本之后的也能看到)
git reflog --pretty=oneline
// 再次根据最新提交的ID,跳转到最新的版本
git reset --hard <CommitID>
9、开源
开源:不仅提供程序,还提供程序的源代码
闭源:只提供程序,不提供程序源代码
10、开源协议(拥抱开源:我为人人,人人为我)
1、BSD
2、Apache Licence2.0
3、GPL
具有传染性的一种开源协议,不允许修改后和衍生的代码作为闭源的商业软件发布和销售
使用GPL的最著名的软件项目是:Linux
4、LGPL
5、MIT
目前限制最少的协议,在修改代码后,需要有作者的许可
使用MIT的软件项目有jquery&nodejs
网友评论