Git 学习笔记
Git 简介:
Git,开源,分散型版本控制系统。由于 Linux 内核开发使用的 SCM 版权变更,Linux 创始人便创建了 Git。现在 Git 的仓库管理功能是 GitHub 的核心。
在 Git 之前还有 Apache 的 SVN,集中型。
集中型:将所有仓库集中存放在服务端,所以最终只有一个仓库。因此便于管理。缺点:服务器出现磁盘故障,版本库的完整性无法保证;服务器无法连接,无法获取最新的源码。
分散型:不存在服务端。开发者之间可以互相 pull 和 push,Fork 和 Pull Request,因此需要事先制定规范,不然初学者不知道最新的代码在哪个仓库。Fork 就是将 Git 的某个仓库复制到自己的账户下,但 Fork 的仓库和原仓库是不同的仓库。
由于 Git 和 GitHub 的普及,要是规则制定得当,分散型也能便于管理。
Git 与 SVN 的区别:
- Git 是分布式,最核心的区别。
- 所有的 SCM 都是把文件的元信息隐藏在类似 .svn 的文件夹里。在这种文件夹里,Git 按元数据存储内容,SVN 按文件。
- 分支不同。
- Git 没有全局版本号,SVN 有。Git 比 SVN 缺少的最大的特征。
- Git 内容完整性比 SVN 好:Git 内容存储使用 SHA-1 哈希算法。在分布式的基础上,进一步确保内容完整性,降低磁盘故障和网络问题对版本库的破坏。
Git 配置:
Linux 或者 Mac 环境以 LF 换行;Win 环境以 CRLF 换行。GitHub 中公开的代码大部分以 LF 换行,所以在安装 Git 的时候,应选择 Checkout CRLF,commit LF。
提供了一个 git config 工具,用来配置或读取相应的环境变量。在 Win 环境下,环境变量可以保存在三个地方的文件夹:
- 安装目录 / mingw64 / etc / gitconfig 文件:系统配置,对所有用户都适用。使用 git config --system [值] 命令读写。
- 用户主目录 / .gitconfig 文件:只适用该用户。使用 git config --global [值] 读写。
- 当前项目 / .git / config 文件:只适用当前项目。使用 git config 读写。适用范围越小的配置,会覆盖范围大的相同配置。
配置文本编辑器(默认可能是 vi 和 vim)和差异分析工具(也可以自己开发工具):
查看配置信息:
查看配置信息列表(如果没有添加选项,就可能会有重名的配置。从上到下,对应配置范围从大到小):
git config --list
读写某一个:
git config key [value]
或者直接找到文件进行编辑,还或者用命令(如在用户主目录下):
atom .gitconfig
Git 工作区、暂存区、版本库:
- 工作区:磁盘下能看到的目录(非隐藏目录)。
- 版本库:即之前提到的 .git 目录,是隐藏目录。
- 暂存区:一般存放在版本库的 index 文件中。英文名称为 stage 或者 index,故有时也称索引。
三者关系如下:
GitHub:
- 本地创建ssh key:ssh-keygen -t rsa -C "your_email@youremail.com"。直接全部回车,使用默认值(在用户目录下生成.ssh文件夹,存放公钥和私钥)。
- 打开公钥
id_rsa.pub
,复制key,然后在github上添加SSH Key。 - 验证是否成功:ssh -T git@github.com(使用某个ip第一次执行该命令,访问github时,会提示输入“密码”)。
- 设置用户名和邮箱(commit的时候会记录):
-
git config --global user.name "your name"
-
git config --global user.email "your_email@youremail.com"
-