Category Archives: Git学习笔记

Git学习笔记,包括但不限于阅读留下的笔记

说实话,第四章之后我只比较仔细地看了第五章「分布式Git」,不过里边的内容很多在比如《Got Github》和其他一些小文章(比如关于Gitflow的文章)也看过了,所以第四章到第八章都没怎么留下笔记,至于第九章完全是对Git的实现还是有一点兴趣所以也粗略地看了下,并没有深入的进行实验,毕竟时间还是很紧,有许多事情要做,以后对Git的学习还是留在开发过程中吧,其实用好前三章的第五章介绍的内容对我已经在平时够用了……

 

从根本上来讲Git是一套内容寻址(content-addressable)文件系统,在此之上提供了一个VCS用户界面。

.git目录中,description文件仅供GitWeb程序使用,config文件包含了项目特有的配置选项,info目录保存了一份不希望在.gitignore文件中管理的忽略模式的全局可执行文件,hooks目录包含了客户端或服务端钩子脚本。objects目录存储所有数据内容,refs目录存储指向数据(分支)的提交对象的指针,HEAD文件指向当前分支,index文件保存了暂存区域信息。

Git对象

从内部看,Git是简单的key-value数据存储。Git存储数据内容的方法——唯美分内容生成一个文件,取得该内容和SHA-1校验和,创建以该校验和前两个字符为明朝的子目录,并以(校验和)剩下38个字符为文件命名(保存至子目录下)。

tree对象:

tree对象可以存储文件名,同时也允许存储一组文件。Git中所有内容以treeblob对象存储,其中tree对象对应于UNIX中的目录,blob对象则大致对应于inodes或文件内容。一个单独的tree对象包含一条或多条tree记录。
Read More →

Git的分支,其实质仅仅是个指向commit对象的可变指针。

Git会使用master作为分支的默认名字。

创建一个新的分支指针:

git branch <branch-name>

这个操作会在当前commit对象上新建一个分支指针:



屏幕剪辑的捕获时间: 2013-8-31 19:17

Git内部,保存着一个名为HEAD的特别指针,指向正在工作的本地指针,git branch命令仅仅建立了一个新的分支,但不会自动切换到这个分支。

切换到其他分支:

git checkout <branch-name>

切换后再次提交后HEAD会随分支移动但master会留在原来位置:


Read More →

获得Git仓库

 

从当前目录初始化:

git init

初始化后自动建立.git目录

 

从现有仓库克隆:

git clone git@github.com:progit/progit.git

克隆后可获得项目历史所有数据(,每一个文件的每一个版本)

如果需要定义新建的项目目录名称可在后面指定

git clone git@github.com:progit/progit.git myprogit

 

检查文件当前状态:

git status

File.Status.Lifecycle

 

将显示:

  • 当前所在分支(On branch **)
  • 已修改但尚未跟踪的文件(Untracked files)
  • 已跟踪但内容自上次跟踪发生过变化的文件(Changed but not updated)
  • 已暂存但尚未提交的文件(Changes to be committed)

  Read More →

前言:

作为一个不愿意为自己添麻烦的菜鸟程序员,我用git实在是需求驱动的——写的程序大了,因为反复迭代或重构没有个版本控制管理系统实在不方便,所以在今年5月份我正式开始用Git来管理代码,并很快实施在了我的第一个实际生产研究项目中,但是所有知识都是零星看的,而且也仅仅作为了一个记录代码版本的工具,并没怎么用到Git方便的非线性管理特性。现在项目总算告一段落,总算能抽出点空来好好学习啊Git了……

 

三种状态

对于任何一个文件,在Git内只有三种状态:

  • 已提交(committed)

文件已被安全地保存到本地数据库

  • 已修改(modified)

已修改,但还未提交保存

  • 已暂存(staged)

把已修改的文件放在下次提交时要保存的清单中

 

local.Operation

local Operation of Git Read More →