前言
目前很多传统的互联网公司还是使用 SVN 作为常用的版本控制工具(CVS),SVN 属于集中式版本控制系统,团队协作开发中的每个成员都是共享网络服务器上存储的同一份项目代码,任何代码的更新和提交操作都需要在有网络的前提下进行。git 属于分布式版本控制系统 ,它把远程代码仓库完整的镜像拷贝到本地,这样使得每一个开发者的本地也有一个与远程服务器上相同的仓库。这样任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。
使用git前的配置
git config 工具
使用:git config [选项] [参数]
说明:[选项]有三种模式:
--system :对系统中所有用户适用的配置,操作的是/etc/gitconfig文件(linux系统下) 或者 Git安装目录/gitconfig文件。
--global :只适用当前用户的配置,操作的是用户目录/.gitconfig文件。
不带参数 :当前项目的Git目录中的配置文件,.git/config文件。
[参数] 可以通过 git config --list 查看所有已配置的参数信息,会输出类似下面的信息:
user.name=tisakong
user.email=tisakong@163.com
help.format=html
color.diff=auto
core.symlinks=false
…
配置用户信息(用户名、email)
目的:git在提交时会引用用户信息,来说明是谁提交了更新,相当于是开发者的身份信息。会随着更新的内容一起被放入历史记录中。
配置命令:
1 | git config --global user.name tisakong |
当然,也可以只对当前工作目录配置单独的用户信息,只需要去掉 --global 选项即可,这样该工作目录下的提交信息,Git就会用单独配置的用户信息来记录了。
配置文本编辑器 和 差异分析工具
当 git 需要你输入额外消息的时候,会调用一个外部文本编辑器给你使用(比如在使用git commit提交更新的时候,会调用编辑工具让用户输入注释说明),默认指定系统的默认编辑器,通过参数配置自己偏好的编辑器(如vi、vim、Emacs等)
1 | git config --global core.editor Emacs |
在合并冲突时指定使用哪种差异分析工具,常用的有: kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge 和 opendiff
1 | git config --global merge.tool vimdiff |
git help
当然,使用 git help 命令可以方便的查看有哪些 git 命令可以使用。
使用 git help <命令> 可以调起 Git 提供的帮助文档,方便查看具体的命令的使用说明。
git 基本操作
本小节说明 Git 的本地操作,包括:
- 创建和克隆仓库
- 暂存和提交修改
- 查看历史修改记录
获取 git 仓库
有两种方法获取git仓库:
- 从工作目录创建新的 git 仓库
在当前工作目录中执行 git init 命令,当前目录会生成一个 .git 目录,此时完成了对所有文件和目录的初始化工作。
- 从现有仓库中克隆
使用 git clone [url] 命令,该动作会将[url]指向的仓库项目的所有的历史数据(每个文件的所有版本)拷贝到本地。
Git管理文件的几种状态及操作
工作目录下的所有文件,存在两种状态:未跟踪(Untracked) 和 已跟踪(tracked)。
使用 git status 命令查看目录下文件的状态。
未跟踪 是指在本地新增或修改了的文件,还没有使用过 git add 被 Git 管理。
未跟踪的文件会被列在:
- Untracked files : 表示本地未被 Git 管理的文件
已跟踪 是指已被执行过 git add 命令,在当前缓存区域中,或者 Git 记录了上次更新的快照。
已跟踪的文件存在2种状态:
Changes not staged for commit : 表示在本地有修改,但没有推到缓存区域中的文件
Changes to be committed : 表示在本地有修改,并且已经通过
git add推到缓存区域中的文件
被忽略的文件
可以在工作根目录下创建 .gitignore 文件,来定义不需要被 Git 管理,也不用出现在未跟踪列表中的文件。
通常,需要被忽略的文件一般为:
- 自动生成的文件
- 日志文件
- 临时文件等
提交更新
使用 git commit -m '注释说明',将缓存区域的文件提交,让Git生成快照。
跳过缓存区域直接提交文件
Git 提供一种方式——使用 git commit -a -m '注释说明',可以一次性将本地修改的文件和缓存区域的文件全部提交。
删除文件
分为两种情况:
- 在本地删除文件,使用
rm命令。
使用这种方式删除被Git跟踪的文件,只是删除了本地文件,要删除Git本地仓库中的文件,还需要使用git add .提交到缓冲区和git commit提交命令。
- 使用
git rm命令
使用这种方式,则只需要使用git commit提交,即可删除Git本地仓库中的文件。
移动文件
和删除文件类似。使用 git mv file_from file_to 移动本地和缓存区文件,使用git commit将改动提交到本地仓库。
查看提交历史
使用 git log 命令按照提交时间列出所有的更新。除此之外,它还提供很多选项,来对历史记录进行定制输出,详细信息可以使用 git log --help 进行查看学习。
Git 还自带图形化工具用于查阅提交历史,通过使用 gitk 调起图形化界面。
撤销操作
根据Git管理文件的3个阶段,撤销操作也可以看做在三个阶段进行:
修改最后的提交(commit)操作
应用场景:在提交完之后,发现遗漏了部分文件没有添加,或者提交的信息写错了。
使用方法示例:
1 | git commit -m 'init commit' //初始提交(发现有更改的文件还没有add) |
第一个提交补充了更改了为添加的文件,并且修正了第一次提交的内容。
撤销已暂存(add)的文件操作
使用 git reset HEAD <file>... 将暂存区的文件撤回,也就是将放进 Changes to be committed: 中的文件,放入 Changes not staged for commit: 中。
取消对文件的修改
此操作的含义是用最近提交的文件来覆盖本地的文件,相当于SVN的revert操作。使用 git checkout -- <file>... 命令完成操作。该操作具有一定的风险。在进行操作时,务必确保不需要保留刚才的修改。
远程仓库的使用
含义: 远程仓库指的是托管在网络上的项目仓库,同一个项目可以具有多个远程仓库,并且具有可读可写的权限控制。在同别人合作开发时,需要管理这些远程仓库,通过推送(push)和拉取(pull)数据,分享各自的工作进展。
管理远程仓库的工作包括:
- 添加远程仓库
- 移除/废弃远程仓库
- 管理远程仓库的分支
- 跟踪分支等
查看当前远程库
查看当前配置有哪些远程仓库,使用git remote命令,它会列出每个远程库的简短名称(命令加上-v选项,则显示仓库对应的克隆地址)。首次克隆完某个项目后,至少可以看到一个名称为origin的远程库,Git默认使用该名来标识你说克隆的原始仓库。如果有多个仓库地址,也会全部列取出来。
添加远程仓库: 使用git remote add [shortName] [url]命令。该命令的含义是:将url对应的远程仓库添加到本地配置中,并且为它取一个别名shortName。以后就可以使用shortName指代对应仓库的地址了。