GIT 分布式版本控制系统 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

1.    内容冲突: 两个用户修改了同一个文件的同一块区域, git 会报告内容冲突。我们常见的都是这种,后面的解决办法也主要针对这种冲突。

2.    树冲突: 文件名修改造成的冲突,称为树冲突。

比如, a 用户把文件改名为 a.c b 用户把同一个文件改名为 b.c ,那么 b 将这两个 commit 合并时,会产生冲突。

3.    每个项目都有一个 git 目录 ,它是 git 用来保存元数据的和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。

4.    从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录。这些文件实际上都是从 git 目录中的压缩对象数据库中提取出来的,接下来就可以在工作目录中对这些文件进行编辑。

5.    git 的工作流程 :在工作目录中修改某些文件 - 》对这些修改了的文件做快照,并保存到暂存区域 - 》提交更新,经保存在暂存区的文件快照转储到 git 目录中。

6.    初次运行 GIT 前的配置:

git 安装目录 /etc/inputrc

找到如下配置代码

set output-meta off

set convert-meta on

修改成

set output-meta on

set convert-meta off

 

Git Bash 中执行:

git config --global gui.encoding utf-8

git config --global i18n.commitencoding utf-8

git config --global i18n.logoutputencoding utf-8

export LESSCHARSET=utf-8

 

配置用户信息

git config --global user.name "Liu Ning"

git config --global user.email "2692885154@qq.com"

 

git config --global core.quotepath false

配置文本编辑器

git config --global core.editor vi

git config --global push.default current

 

git config --global core.autocrlf true

git config --global core.safecrlf true

 

git config --global alias.co checkout

git config --global alias.br branch

git config --global alias.ci commit

git config --global alias.st status

git config --global alias.unstage 'reset HEAD --'

git config --global alias.last 'log -1 HEAD'

git config --global alias.visual '!gitk'

git config --global alias.hist 'log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short'

7.    git init 初始化后,在当前目录下会出现一个名为 .git 的目录,所有 git 需要的数据和资源都放在这个目录中。

8     changed but not updated :为暂存 _ 清单

9.    git clone git@192.168.1.10:~/text.git

10. 使用分支意味着你可以从开发主线上分离出来,然后在不影响主线的同事继续工作。

11.  远程仓库通常只是一个纯仓库,一个没有当前工作目录的仓库。

12.  git 的全局配置文件: /etc/gitconfig, 含有对系统上所有用户及他们拥有的仓库都生效的配置值,如果传递 —system 选项给 git config 命令, git 会读写该文件

13.  git 每个库本身的配置文件: .git/config, 该文件中的值只对属主库有效。

14.  git config –global 为用户级别的配置

15.  git 属性文件: /etc/gitattributes

16.  当你在一个新目录或已有目录内执行 git init 时, git 会创建一个 .git 目录,

几乎所有 git 存储和操作的内容都位于该目录下。如果你要备份或复制一个库,

基本上将这一目录拷贝至其它地方就可以了。

17.  git 的核心目录用途

config 文件包含了项目特有的配置选项,

object 目录存储所有的数据内容,

refs 目录存储指向数据(分支)的提交对象的指针,

head 文件指向当前分支,

index 文件保存了暂存域信息。

18.  我们可以在 .git/refs 目录下面找到这些包含 sha-1 值的文件。

19.  创建 git

$ mkdir ddd

$ cd ddd

$ git init

Initialized empty Git repository in c:/Users/user/git/ddd/.git/

$ find ./git/objects

.git/objects

.git/objects/info

.git/objects/pack

$ find .git/objects -type f  # 查看有没有常规文件

$ echo 'test content' | git hash-object -w –stdin  

.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4

# 指示 hash-object 命令存储对象,若不指定这个参数该命令仅仅返回键值。

#stdin 指定从标准输入设备来读取内容,若不指定这个参数则需指定一个要存储的文件的路径。该命令输出长度为 40 个字符的校验和。这是个 sha-1 哈希值 其值为要存储的数据加上头信息的校验和。

$ find .git/objects -type f

.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4

可以在 objects 目录下看到一个文件,这便是 git 存储数据内容的方式 为每份内容生成一个文件,取得该内容与头信息的 sha-1 校验和,创建以该校验和前两个字符为名称的子目录,并以(校验和)剩下 38 个字符为文件名(保存至子目录下)

$ git cat-file -p d670460b4b4aece5915caf5c68d12f560a9fe3e4

test content

# 通过 cat-file 命令可以将数据内容取回

#-p 参数可以让该命令输出数据内容的类型。

$ git hash-object -w test.txt

# 可以获取到文件的 sha-1

$ git cat-file -p d670460b4b4aece5915caf5c68d12f560a9fe3e4 > ddd.txt

# 根据文件的 sha-1 值回复文件

$ git cat-file -t d670460b4b4aece5915caf5c68d12f560a9fe3e4

Blob

# 通过传递 SHA-1 值给 cat-file –t 命令可以让 git 返回任何对象的类型。

 

 

近日初学 git ,这是我的一点笔记,希望各位大师斧正!

参考资料: Pro Git 中文版手册