概述
一直想写一下 git 的笔记, 只是都没有时间去做, 只能空闲的时候慢慢的补齐了;
毫无疑问, git
是目前最优秀的分布式版本控制工具, 没有之一; 作为一个码农, git
已经是一项必备的技能了, 许多优秀的社区都是基于 git
去做的版本控制; 比如全球最大的程序猿同性交友网站 github
;
git 有很多种使用方式, 我们可以使用 git bash
这种命令行模式, 也可以使用 TortoiseGit
或者是 SourceTree
这样的 GUI 工具, 这些 GUI 工具也能提供多种功能; 而个人还是比较倾向于命令行的方式, 第一个是逼格比较高, 第二个是大多数的 GUI 软件都只实现了 git 所有功能的一个子集以降低操作难度; 命令行的模式下才能执行所有的 git 命令, 虽然大多数是开发中用不到的;
安装和配置
git 的安装也是比较简单的, git 下载官网 找到和操作系统相对应的版本, 一路 next 就可以了;
安装完之后, 快捷菜单里面会出现 Git GUI Here
和 Git Bash Here
; 我们可以打开 Git Bash
, 在命令行界面里面输入:
$ git --version
git version 2.18.0.windows.1
能出现 git
的版本号, 就表示我们的 git 已经安装成功; 我们后面所有的操作都是基于 Git Bash
来进行的;
安装完成之后, 我们可以使用 git
来获取 git 的升级:
$ git clone git://git.kernel.org/pub/scm/git/git.git
初始化配置
git
自带一个 git config
的工具来帮助设置 git
的外观和行为的配置变量;
当安装完 git
之后, 应做的第一件事就是设置用户名和邮件地址;
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
因为 git
是分布式管理系统, git
的每一次提交都会记录上用户名和邮箱, 并且不可修改; 需要注意的是 --global
选项只要运行一次, 之后无论在改系统上做任何事情, 都会使用 global 的配置; 当然也可以对某个仓库指定不同的用户名和Email地址.
文本编辑器
git
会使用操作系统默认的编辑器, 通常是 vim
, 如果想使用其他的编辑器, 可以这样设置:
$ git config --global core.editor emacs
检查配置项
如果想要检查配置项, 可以使用 git config --list
命令来列出所有 git
能找到的配置;
$ git config --list
core.symlinks=false
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
...
也可以使用 git config <key>
来检查某一项的配置:
$ git config user.name
Git 版本库
版本库又名仓库, 英文名 repository
, 可以理解为版本库就是一个目录, 这个目录里面的所有文件都能被 git 管理, 每一个文件的增, 删, 改都会被 git 跟踪, 以便任何时候都可以找到文件记录;
创建版本库有两种方法, 第一种是通过 git init
把当前文件夹变成一个 git 可以管理的仓库; 第二个是直接 clone 一个已有的仓库;
创建版本库
进入到一个空的目录下, 通过鼠标右键的菜单打开 bash
并输入:
$ git init
执行完 init 之后, 文件夹里面会多一个 .git
的隐藏文件夹, 如果没看到这个文件夹, 可以设置文件夹属性; 这个目录是 git 用来记录文件版本用的, 一般都不会去修改;
这个时候, 我们只是做了一个初始化的动作, 目录里面的文件还没有被追踪, 可以使用 git add <file>
命令来实现对文件的追踪, 然后执行 commit
提交;
$ git add reademe.txt
$ git commit -m "首次提交的内容"
git add
命令就是将文件添加到仓库, 可以一次添加多个文件只需要在参数后面添加文件名然后按 tab
键; 也可以一次添加全部文件, 使用 git add *
或者是 git add --all
命令;
克隆仓库
如果想要获得已存在的 git 仓库的拷贝, 为某个开源项目贡献自己的一份力量, 这个时候就要用到 git clone <url>
命令:
$ git clone https://gitlab.com/Scorpio-nan/myproject
这将把远程的仓库克隆到本地, 并创建一个 myproject
的 git 仓库;
git
支持多种数据传输协议, 上面的例子就是用的 https://
协议, 不过也可以使用 git://
协议或者是 SSH
传输协议;
查看文件状态
git
目录下面的文件都只有两种状态: 已跟踪或者未跟踪. 已跟踪的文件都是指那些已经被纳入版本控制的文件, 在日志中都有它们的记录, 在工作一段时间后, 它们的状态可能处于未修改, 已修改或已放入暂存区.
要查看哪些文件处于什么状态, 可以用 git status
命令; 现在, 我们在目录下面新建一个 README.txt
文件, 如果之前并不存在这个文件, 使用 git status
就会看到一个未追踪的文件;
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.txt
nothing added to commit but untracked files present (use "git add" to track)
在上面的文件状态中, 我们可以看到新建的 README
文件出现在 Untracked files
下面;表示该文件还没有被纳入 git
的版本控制;
添加文件
使用 git add <key>
命令开始追踪一个文件;
$ git add README.txt
现在, 我们再一次查看文件状态, 可以看到文件 README.txt
已经被追踪, 并处于暂存状态;
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.txt
只要在 Changes to be committed
这行下面的, 就说明是已暂存状态.
暂存修改文件
现在, 我们来修改一个已经被追踪的文件; 在 README.txt
里面添加一些内容, 并查看文件状态;
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: README.txt
Changes not staged for commit
说明文件内容已经发生了变化, 但是还没有添加到暂存区, 要更新到暂存区, 需要再一次执行 git add
命令;
git status
命令的输出十分详细, 但是详细信息有些繁琐, 我们还可以使用 git status -s
或者是 git status --short
命令来查看状态;
$ git stauts -s
AM README.txt
??
表示新添加, 还没追踪的文件;A
表示新添加到暂存区中的文件;M
表示修改过的文件;
M 有两个可以出现的位置, 左边表示文件被修改了并放入了暂存区; 右边表示文件被修改了, 但是还没添加到暂存区;
忽略文件
有些时候, 我们必须把文件放到 git
的目录中, 但又不能提交它们; 在这种情况下, 我们可以创建一个 .gitignore
的文件, 列出需要忽略的文件列表, 每次操作的时候 git
就会忽略这些文件;
完整的 .gitignore
配置详见 gitignore;
我们在开发 vue
项目的时候, 如果是用的 gi