Git初探 - 1

Git简介

  • Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
  • Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
  • Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持

Git 手册

与其他区别版本控制工具比如SVN的区别

  • GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
  • GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。而且存储的时候git本身就是存储一个快照,而SVN是存储一个差异,类似于vim diff工具一类的文件。
  • GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录,git的分支用起来开始不太适应,可能会有冲突,需要手动修改。
  • GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征,分布式有个好处,不用必须在数据中心存储版本,对于网络等问题更加的可靠。
  • GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

安装

虽然是Linux内核版本的控制工具,但是目前已经跨平台了,支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行windows下的一如既往追求界面而GUI与bash共存的形式,普遍推荐bash。
1. Linux
Git 的工作需调用 curl,zlib,openssl,expat,libiconv 等库的代码,所以需要先安装这些依赖工具。Ubuntu下的有apt-get体系,很方便

$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
  libz-dev libssl-dev
$ apt-get install git-core
$ git --version
git version 1.8.1.2

2.Windows
有个叫做 msysGit 的项目提供了安装包,可以到 GitHub 的页面上下载 exe 安装文件并运行,当然官网上面也有。完成安装之后,已经自带了 ssh 客户端,还有一个图形界面的 Git 项目管理工具。在开始菜单里找到”Git”->”Git Bash”,会弹出 Git 命令窗口,你可以在该窗口进行 Git 操作。

Git配置

以上工作只是安装了必备资源,我们需要配置后才能真正使用Git功能
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量,Linux下存放位置有三:
1. 文件/etc/gitconfig :系统中对所有用户都普遍适用的配置。若使用 git config 时用 –system 选项,读写的就是这个文件。
2. 文件~/.gitconfig :用户目录下的配置文件只适用于该用户。若使用 git config 时用 –global 选项,读写的就是这个文件。
3. 文件.git/config:仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,似乎计算机的设计哲学就是这样的,CSS也是如此,往上加覆盖,.git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
Windows 中,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 $HOME 变量指定的目录,一般都是 C:\Documents and Settings\$USER。
此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。

很朴素的,首先要知道到底是谁?在使用。

  • 用户信息
$ git config --global user.name "xxx"
$ git config --global user.email xxx

如上文所述,global参数表示是在当前目录下的用户配置,这也是朴素的,我们将物理地址下的一个文件夹作为仓库,指定一个用户,在这个层面进行版本控制。system也是可选的,不建议而已。
如果特定的项目而言只要去掉参数就是当前工程了。

  • 文本编辑器
    设置Git默认使用的文本编辑器,Vi,Vim和Emacs都是可用的
$ git config --global core.editor xxx

这样我们每次编辑文件的时候就方便多了,当然windows下可能大家不需要,毕竟GUI看着顺眼。

  • 差异分析工具
    在解决合并冲突时就会用到差异分析工具,因为每个分支的某些地方会有冲突导致不能合并成功,需要比对后手动解决。
$ git config --global merge.tool xxx

vimdiff似乎不错,毕竟没搞过什么大项目,至今没什么branch大的问题,似乎也没用多少,但这很重要。

最后可以查看自己的配置

$ git config --list

会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个,覆盖原则。
也可以之后跟上名字,查找指定的配置。

工作流程

很多时候刚开始接触容易把git与github关系混淆,其实git是分布式版本控制工具,这从本质上要求除了本地仓库还要有远程仓库的存在,而github提供了一个托管自己代码的远程仓库空间,而且需要配置,但是根本上github不是必须的,你完全可以搭建自己的Git服务器。
1. 克隆 Git 资源作为工作目录。
2. 在克隆的资源上添加或修改文件。
3. 如果其他人修改了,你可以更新资源。
4. 在提交前查看修改。
5. 提交修改。
6. 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
这一切都是工作在本地的,所以称为git工作流程,而不是github工作流程,

Git组件

本质上讲,Git有工作区与版本库两大组件,版本库是个隐藏文件夹.git工作区就是常见的那个,版本库中两个重要的文件一个是缓存区,这里的缓存不是内存中的缓存,而是在磁盘中,index文件,另外一个是HEAD,HEAD是个指针,他的作用是指向最近的版本。
当对工作区修改(或新增)的文件执行 “git add” 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
当执行 “git reset HEAD” 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
当执行 “git rm –cached ” 命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行 “git checkout .” 或者 “git checkout – ” 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
当执行 “git checkout HEAD .” 或者 “git checkout HEAD ” 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

Git仓库

Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。
在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变(不像 SVN 会在每个子目录生成 .svn 目录,Git 只在仓库的根目录生成 .git 目录)。

git init

也能加参数指定目录,初始化后,目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:

$ git add *.c
$ git add README
$ git commit -m 'xxx'

强烈建议commit时附加信息,不然一周后你也不知道自己写的什么28玩意儿。

下一篇将具体学习相关指令。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值