Git Notes
Git Notes
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
1 Git 简介
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS、Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git 与 SVN 区别点:
- Git 是分布式的,而SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
- Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似
.svn
、.cvs
、.git
等的文件夹里。 - Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
- Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
- Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
2 Git 基础操作
2.1 Git 安装
Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。
Git 各平台安装包下载地址为:https://git-scm.com/downloads。
2.2 Git 配置
Git的设置文件为 .gitconfig
,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。
1 |
|
2.3 Git 工作流程
一般工作流程如下:
- 克隆 Git 资源作为工作目录。
- 在本地的资源上添加或修改文件。
- 如果其他人修改了,你可以更新资源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
下图展示了 Git 的工作流程:
2.4 Git 文件的三种状态
我们先来理解下 Git 工作区、暂存区和版本库概念
- 工作区:就是你在电脑里能看到的目录。
- 暂存区:英文叫 stage,一般存放在
.git
下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。 - 版本库:工作区有一个隐藏目录
.git
,这个不算工作区,而是 Git 的版本库。
下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:
图中左侧为工作区,右侧为版本库。在版本库中标记为 index
的区域是暂存区,标记为 master
的是 master
分支所代表的目录树。
图中我们可以看出此时 HEAD
实际是指向 master
分支的一个“游标”。所以图示的命令中出现 HEAD
的地方可以用 master 来替换。
图中的 objects
标识的区域为 Git 的对象库,实际位于 .git/objects
目录下,里面包含了创建的各种对象及内容。
当对工作区修改(或新增)的文件执行 git add
命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
当执行提交操作 git commit
命令时,暂存区的目录树写到版本库(对象库)中,master
分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
当执行 git reset HEAD
命令时,暂存区的目录树会被重写,被 master
分支指向的目录树所替换,但是工作区不受影响。
当执行 git rm --cached <file>
命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行 git checkout .
或者 git checkout -- <file>
命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
当执行 git checkout HEAD .
或者 git checkout HEAD <file>
命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
2.5 新建仓库
有两种新建 Git 项目仓库的方法。 第一种是在现有项目或目录下导入所有文件到 Git 中; 第二种是从一个服务器克隆一个现有的 Git 仓库。
1. 在现有目录中初始化仓库
1 |
|
2. 克隆现有的仓库
1 |
|
2.6 添加 / 删除文件
1 |
|
2.7 代码提交
1 |
|
2.8 代码版本 / 提交切换
1. 查看过去版本/提交
1 |
|
2. 回退版本/提交
1 |
|
3. 重返未来版本
1 |
|
4. 撤销修改
1 |
|
3 Git 分支管理
1. 新建分支
1 |
|
2. 切换分支
1 |
|
3. 删除分支
1 |
|
4. 分支合并
1 |
|
4 Git 标签
1 |
|
5 远程仓库
1. 生成 SSH Key
在 Terminal 中生成 SSH Key
1 |
|
后面的 your_email@youremail.com 改为你 Gitee 账户的的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。打开 ~/.ssh 下的 id_rsa.pub,复制里面的 key。
或使用 Git Gui 生成 SSH Key
进入 Gitee 的设置界面
左选 SSH 公钥选项,在公钥位置粘贴复制的 key,然后点击确定。
2. 添加远程仓库
1 |
|
3. 远程仓库管理
1 |
|
6 Git 自定义
6.1 忽略特殊文件
在Git工作区的根目录下创建一个特殊的 .gitignore
文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。Github 的 Git 忽略模板 https://github.com/github/gitignore。
1 |
|
6.2 配置别名
1 |
|
6.3 Git 代理设置
1. HTTP 代理
1 |
|
2. SSH 代理
修改 ~/.ssh/config
文件(不存在则新建):
1 |
|
6.4 搭建 Git 服务器
使用 Gitea 搭建服务器,参考 用 Gitea 搭建自己的 Git 服务器。
6.5 Pycharm 的 Terminal 使用 Git Bash
1 |
|
6.6 修改 Git Bash 默认配置文件
在 Git Bash 默认配置文件 C:\Program Files\Git\ect\bash.bashrc
末尾添加:
1 |
|