Git 简介
一、缘由
2005 年以前,对于 Linux 开源项目的开发而言,社区主要使用 bitkeeper 进行源码控制系统(source control system)工具。因爲社区开发者违反了 bitkeeper 协议,所以,bitkeeper 收回了免费使用权。爲了达到补丁速度不超过 3 秒,保证安全性,同时实现像 bitkeeper 分佈式的作用,寻找了一段时间之后,没有发现符合要求的免费工具,Linus 决定自己开发这样一个免费的工具。花费了数天的时间后,Linux 开发出了这样的产品,并把这个产品描述为傻瓜内容追踪器(the stupid content tracker)。
二、GIT
git 是一个免费和开源的分佈式版本控制系统,能够快速和高效地操作一切事物,无论这些事物是小还是大。git 是目前流行的版本控制工具,具有以下特点:
1、强烈支持非綫性开发
2、分佈式开发
3、对于存在的系统和协议,具有很好的通用性
4、大文件的高效率操作
5、历史的权威,即一旦提交,则不可修改历史提交数据
6、基于工具包的设计
7、可插拔的合并策略
8、在收集前,垃圾纍积
9、周期性的显示对象打包
三、GIT 安装
从官网下载对应操作系统的安装包,运行安装即可。但需要注意,如果 Git 未选择添加安装目录可执行命令路径(/安装目录/cmd)至 path 环境变量,则需要手工添加。安装成功后,可在命令行执行 git --version 指令,如果返回结果显示 git version 2.15.1.windows.2,则説明安装成功。
四、GIT 基本操作
1、配置全局信息
可以使用 git config --list 指令查看配置的所有全局信息。
爲了使用 git 进行开发,因此需要配置开发者信息,使用以下指令进行配置。
开发者用户名:git config --global user.name '用户名'
开发者邮箱:git config --global user.email '用户邮箱'
同样可以对配置文件进行修改添加,配置文件路径为/用户/.gitconfig。
2、创建仓库
为仓库创建目录,并进入目录下,将该目录配置为仓库目录,使用如下两种方式实现。
第一种:git init
返回结果:Initialized empty Git repository in /仓库目录/.git/
该方式会在仓库目录下生成“*.git”隐藏文件夹,该文件夹存放 git 的所有版本信息,建议采用该方式,因爲可以隐藏保存版本信息,以便信息不被人爲恶意修改破坏。
第二种:git init --bare
返回结果:Initialized empty Git repository in /仓库目录/
该方式不会生产“*.git”隐藏文件夹,而是直接显示存放 git 的所有版本信息。
3、仓库的基本操作
对于 GIT 而言,仓库内的信息发生变化,都会被 GIT 监控,并记录下变化信息。
查看仓库状态:git status
添加变更信息至暂存库:git add 文件名称.后缀名
批量添加变更信息至暂存库:git add .
提交变更信息至版本库(新文件需要先 add):git commit -m "注释信息" 文件名称.后缀名
批量提交所有变更信息至版本库(新文件需要先 add):git commit -m "注释信息"
直接提交变更信息至版本库,不经过暂存库(新文件需要先 add):git commit -a -m "注释信息" 文件名称.后缀名
直接提交所有变更信息至版本库,不经过暂存库(新文件需要先 add):git commit -a -m "注释信息"
查看变更信息的变化情况,即工作区下与暂存库比较情况:git diff 文件名称.后缀名
查看变更信息的变化日志,即提交后的版本库历史情况:git log 文件名称.后缀名
查看所有变更信息的变化日志,即提交后的版本库历史情况:git log
查看变更信息的所有操作日志,包含提交、重置、删除、移动位置:git reflog 文件名称.后缀名
查看所有变更信息的所有操作日志,包含提交、重置、删除、移动位置:git reflog
图形化的方式查看所有分支变化情况:git log --graph --pretty=oneline
恢复到指定提交点:git reset --hard commitId
在工作区已修改但还未添加到暂存区的情况下撤销文件:git checkout 文件名称.后缀名
(在工作区已修改但还未添加到暂存区的情况下,没有撤销所有文件的方法,因爲撤销所有文件会造成将所有文件的操作撤销回去,从而丢失重要的修改信息)
在已添加到暂存库但未提交到版本库的情况下撤销回工作区的文件:git reset head 文件名称.后缀名
在已添加到暂存库但未提交到版本库的情况下撤销回工作区的所有文件:git reset head
注意:每次提交,都会生成一个提交 ID,即 commit id,目的在于版本穿越时使用,通俗的讲,版本恢复时使用。使用 git log 指令时,信息过多,进入编辑界面,输入 q 可退出。
五、工作区、暂存库、版本库
工作区就是存放操作信息的文件夹。版本库就是正式发佈信息的空间,一个提交点存放一次所有变更信息,如.git 文件夹。版本库中包含临时存放变更信息的暂存库,自动创建的 master 分支以及指向分支的指针 head。暂存库临时存放变更信息,可进行提交、撤销。head 指针默认情况下指向最新的提交点。这里需要注意,暂存库和版本库,实际存放的是文件的变更信息,存放在 GIT 自定义的文件下,源文件则存放在工作区。
问题一
问题描述:
对整体功能文件的管理不合理。
在使用 Git 管理创建的 Maven 项目时,把最高级的目录(e:\gitProject)设置为了 Git 仓库,这样在此目录下就无法存放其他的 Maven 项目了,造成我还得创建根目录下的同级文件夹去存放使用 Git 管理的 Maven 项目。
解决方案:
从整体的大功能角度出发,个人喜欢放置于同一个目录下进行管理,而不是分拆为多个目录。
对于我而言,所有使用 Git 管理的 Java 项目,应放置于同一个文件夹下。
问题二
问题描述:
放置于同一仓库(own)下的两个不同项目(own 项目和 owndb 项目),文件之间相互影响。但是我所要的效果是,存储的两个项目互不影响,相互独立,各自具有独立的版本库。eclipse 新建在主干上的 owndb 项目,远程提交后,切换到子分支(sub)后无法打开,使得我不得不使用 bash 工具。
解决方案:
同一个 Git 仓库,共享同一个版本库,仓库里的文件互相影响。当需要不同的版本库时,需创建不同的仓库。
评论