相信每一个CS专业的学生都听说过这么一个网站, 全球最大的同性交友网站–GitHub, 也知道git这么一个词, 他们究竟是干嘛的呢? 且听我娓娓道来
版本控制
版本控制是一种再开发过程中用于管理我们对于文件, 目录或工程等内容的修改历史, 方便查看更改历史记录, 备份以及恢复以前版本的软件工程技术.
作用
- 实现跨区域多人协同开发
- 追踪和记录一个或多个文件的历史记录
- 组织和保护代码和文档
- 统计工作量
- 并行开发, 提高开发效率
- 等等
如果多人开发必须要使用版本控制, 否则容易管理混乱.
主流的版本控制器
- Git
- SVN
- CVS
- VSS
- TFS
- BitKeeper
- 等等
三种分类
- 本地版本控制, 代表:RCS, 本地进行记录
- 集中版本控制, 代表:SVN, 版本信息保存在服务器上, 本地只有旧的版本, 需要联网去服务器请求, 最大的缺点是服务器坏了大家就没法工作了.
- 分布式版本控制, 代表:GIT, 每个人都有一个版本控制中心, 有全部的代码, 缺点是一个人可以全偷走, 优点是不会因为服务器损坏而不能工作.
Git和SVN的区别
SVN需要有中央服务器, 必须联网从服务器获取最新版本后, 才能工作.
Git没有中央服务器, 每个人的电脑就是一个完整的版本库, 工作的时候不需要联网了, git可以直接看到别人更改的东西.
Git是最先进的分布式版本控制工具.
Git的发展历史
Git和Linux是分不开的.
Linux之父linus创造了Linux之后, 全球有大量的程序员为其贡献了代码, 整整十年linus没有版本控制工具, 在系统维护和归档上花费了大量时间, 2002年开始使用BitKeeper, 但是很快在2005, 人家要收费了.
linus可谓是天才, 总结经验, 吸取教训, 一怒之下, 花了两周时间, 开发了Git??????
Git和linus一样, 免费, 开源.
git的安装
问度娘吧.
毁灭吧
linux基本命令
平时一定要多使用这些基础的命令!
cd: 改变目录。cd ..: 回退到上一个目录,直接cd进入默认目录pwd: 显示当前所在的目录路径。ls(ll): 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。touch: 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。rm: 删除一个文件, rm index.js 就会把index.js文件删除。mkdir: 新建一个目录,就是新建一个文件夹。rm -r: 删除一个文件夹, rm -r src 删除src目录mv: 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。reset: 重新初始化终端/清屏。clear: 清屏。history: 查看命令历史。help: 帮助。exit: 退出。#: 表示注释
git必要配置
查看配置:git config -l: 本文件下配置git config --system -l: 系统配置 git根目录/etc/gitconfiggit config --global --list: 当前用户配置 文档/.gitconfig
git config --global user.name "XXX": 配置用户名git config --global user.email "XXX": 配置邮箱
git基本理论
Git本地有三个工作区域:
基本命令
git add .: 将所有文件提交到暂存区.git commit: 将文件提交到本地仓库git push: 提交到远程仓库
本地仓库搭建:git init: 初始化本地仓库git clone: 克隆远程仓库到本地
git文件操作
文件有四种状态:
- Untracked: 未跟踪, 此文件在文件夹中, 但没有加入git库, 不参与版本控制, 通过
git add状态变为Staged. - Unmodify: 文件已入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致, 这种类型的文件有两种去处, 如果它被修改, 而变为
Modified, 如果使用git rm移出版本库, 则变为Untracked文件. - Modified: 文件已蟹盖, 仅仅是修改, 并没有进行其他的操作, 这个文件也有两个去处, 通过
git add可进入暂存Staged状态, 使用git checkout则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改. - Staged: 暂存状态, 执行
git commit则将修改同步到库中, 这时库中文件和本地文件又变为一致, 文件为Unmodify状态, 执行git reset HEAD filename取消暂存, 文件状态为Modified.
1 |
|
忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等.
在主目录下建立”.gitignore”文件,此文件有如下规则:
- 忽略文件中的空行或以井号(#)开始的行将会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
1 | *.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中! |
分支
1 | # 列出所有本地分支 |
如果同一个文件在合并分支时都被修改了则会引起冲突:解决的办法是我们可以修改冲突文件后重新提交!选择要保留他的代码还是你的代码!

