git 的安装和使用

git是linus为了代替bitkeeper 为内核开发人员进行版本控制而开发的

git是linux下 的一个命令,
如同yum等 linux命令一样的使用方法, 和思想.

===================================
git和其他subversion svn的区别

  • svn等关注每个文件内部的变化,如哪一行 哪些内容
  • git则只关注整个文件的变化与否, 通过"文件指纹"的算法

git的特点:

  • 3个区域: repos, staging area, work dir
  • 提交过程: pwd->staging->repos corresponding commands are: git add, git commit, or boils down to
    one command: git commit -a
  • four objects: tree, blob, tag and commit. Blobs are sub-inode of trees and are like leaves of
    trees. Those code data is actually stored in BLOBS. Every commit points to a tree's HEAD.
    The index of staging area maintains history version information.

================================== ===
A local git repository can be created by command: git init.
The directory ".git" is the very (正是,就是)git repositoy.

And usually the directory .git is resided the one you put codes which is called working directory. But this is not mandatory.

(( 名义上的 in name, 正是,就是, 就在: the very, the very next day they were divorced
nothing else than 仅仅, 只是 he did nothing else than laugh
))


The following is an exercise about git

  1. make dirs : /git/project
  2. vi a testing file main.c
  3. initialize git repository: " git init"
  4. add a file to staging area: "git add "
  5. commit to repos: "git commit -m 'fist commit'"

.git hidden directory is showed as fig1.

----------------------------- ==
.git includes files and dirs:
files: config(local cofiguration), description, HEAD,
dirs: branches, hooks, info, objects, refs.

There are two kinds of configuration files. one is global config, the other is local configuration.

For the global config, use command:
"git config --global user.name foo"
"git config --global user.email foo@gmail.com"

(Analogously 类似地)

Analogously, to configure local user's info, use command:
"git config --local user.name foo"
"git config --local user.email foo@gmail.com"

------------------------------------- ==
本地config文件, 在.git目录中的config文件, 内容是 [core]...

全局git config的配置结果是在 家目录中记录.gitconfig

--------------------------- ==
.git/description, 就是对仓库的描述

目录refs和HEAD
目录refs下包含 heads,tags,
其中, HEAD是指向 /refs/heads/master的

!!!
现在 HEAD 的内容应该是这样:
ref:refs/heads/master
HEAD 文件中的内容其实只是包含了一个索引信息,并且,这个索引将总是指向你的项目中的当前开发分支。

  • 一个叫 objects 的子目录,它包含了你的项目中的所有对象,我们不必直接地了解到这些对象内容,我们应该关心是存放在这些对象中的项目的数据。

一旦你执行了git add操作后, 就会在 .git下生成一个 index 文件, 这个index文件是一个索引文件, 但是不是一个文本文件, vi打开是乱码, 表示应该是一个类似 "数据库""文件系统"之类的文件

一旦你执行了git commit - m "memo..."后, 就会在.git下生成: 文件"COMMIT_EDITMSG" 和一个目录"logs"

其中, COMMIT_EDITMSG的内容就是提交时的备注内容, 注意, 它只是保留最近一次的memo信息!
更多的日志信息, 在logs目录是日志目录(里面包括HEAD, refs...) .git/logs/refs/heads/master中...

-------------- == [.git/hooks是什么] (http://blog.csdn.net/chenjh213/article/details/48269859)
.git/hooks 是一些钩子, 一些挂钩脚本, 可以是shell脚本(就是特指的bash脚本). perl脚本, python脚本, 去掉 /hooks/脚本.sample
后的sample就可以激活脚本

对提交commit有关的钩子脚本:
pre-commit :pre-commit`挂钩在键入提交信息前运行,被用来检查即将提交的快照,
prepare-commit-msg prepare-commit-msg挂钩对通常的提交来说不是很有用,只在自动产生的默认提交信息的情况下有作用
commit-msg commit-msg挂钩接收一个参数,此参数是包含最近提交信息的临时文件的路径
post-commit. 在这个提交过程完成后执行

.git下的文件的作用:

refers this article
branches: 分支,通常为空, 只有创建了分支后,才有内容
config:配置文件, 通常不变
description: 对仓库的描述
HEAD: 总是指向当前所在的分支/master上
hooks: 是一些回调脚本, 可以删除
info: 里面是exclude文件,是指你要排除哪些文件不要被提交到版本库(版本仓库)中,
全局的排除提交文件是在: .gitignore 文件, 本地的排除提交规则就是 这个 info/exclude
[通常是一些规则, 如: *.a, !lib.a *.so *.o 表示这些规则的文件不会被提交到版本库]http://www.cnblogs.com/pylemon/archive/2012/07/16/2593112.html)

index: git add这个命令,根据man git-add的解释,是把某个文件加入到index。这个index实际上就是
工作目录下文件和目录状态的一个快照(stage),每一次git提交所产生的tree对象,就是依据
index文件产生的

[[ 只要我们不调用git命令,它就不会有反应。那我就调一个看看:
Bash代码
$> git add .

再看看监控,终于有反应了:]]

git add, commit等操作是在工作目录下进行的, 否则会报错: fatal: this operation must be run in a work tree

posted @ 2016-06-03 08:36  noitanym  阅读(551)  评论(0编辑  收藏  举报