所有的版本控制系统,只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。
而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
Microsoft的Word格式是二进制格式,版本控制系统是没法跟踪Word文件的改动的,如果要真正使用版本控制系统,就要以纯文本方式编写文件。
因为文本是有编码的,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。
sudo apt-get install git //Debain or Ubunt
sudo yum install git //Redhat or Centos
老版本可能叫 git-core。
在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
配置user.name和user.email
git config --global user.name 'your_name'
git config --global user.email 'your_email'
优先级: local > global > system
git config --local #local只对仓库有效
git config --global #global对登录用户所有仓库有效
git config --system #system对系统的所有用户有效
git config --list --local
git config --list --global
git config --list --system
git config --local
git config --global
git config --system
git config --unset --local user.name
git config --unset --global user.name
git config --unset --system user.name
cd <项目代码所在文件夹>
git init
cd <某个文件夹>
git init project_name #会在当前路径下创建和项目名称相同的文件夹
cd project_name
git add . # 将当前路径下所有的文件都添加到暂存区中
git add <file> # 将<file>t添加到暂存区中
git add -u # 将已经被git追踪的文件进行更新
git reset -head # 重置HEAD、索引和工作区
git mv a b # 将被git追踪的文件a重命名为b并添加到暂存区中
git log oneline # 查看简洁的历史
git log -n<number> #显示最近的n次日志
git log --all # 查看全部日志
git log --graph # 显示为图片
git branch -v
# 安装gitk工具
sudo apt-get install gitk
# 在git仓库目录下打开工具
gitk
drwxr-xr-x branches/
-rw-r--r-- COMMIT_EDITMSG
-rw-r--r-- config # 本地仓库(local)相关配置
-rw-r--r-- description
-rw-rw-r-- FETCH_HEAD
-rw-rw-r-- gitk.cache
-rw-rw-r-- HEAD # 指向仓库当前工作的分支
drwxr-xr-x hooks/
-rw-rw-r-- index
drwxr-xr-x info/
drwxr-xr-x logs/
drwxr-xr-x objects/ #文件夹中的子文件夹都是以哈希值的前两位字符命名每个object由40位字符组成,前两位字符用来当文件夹,后38位做文件
drwxr-xr-x refs/headers # 分支
drwxr-xr-x refs/tags # 里程碑
git cat-file # 命令 显示版本库对象的内容、类型及大小信息
git cat-file -t b44dd71d62a5a8ed3 # 显示版本库对象的类型
git cat-file -s b44dd71d62a5a8ed3 # 显示版本库对象的大小
git cat-file -p b44dd71d62a5a8ed3 # 显示版本库对象的内容
git中的对象:
通常,blob表示一个文件,tree表示一个文件夹。
在Git中,文件内容相同的文件就是唯一的一个blob。
没有文件也就是没有blob对象的目录是不会被git管理的,因为git要对文件进行版本管理,所以没有必要对空目录生成对象。基于这一点,假设
readme
文件的全路径是这样:[仓库根目录]/doc/readme
。那么tree的数量与全路径中“/”
的数量一致。
即,有几层文件夹,就有几个tree。
一个commit
对应一个tree
,这个是root节点。
git checkout <commit ID>
可用于在对应commit下进行实验性尝试,尝试完成后直接切换回原分支即可。
Git认为没有与分支或tag绑定的commit都应该丢弃。
HEAD永远指向commit。
git diff <commit ID> <commit ID> # 比较两次commit的差异
git diff HEAD HEAD^1 # 比较HEAD与HEAD前的一个commit
# HEAD^^ == HEAD~2