Git使用个进制字符的SHA-
Hash来唯一标识对象
如:e98757d0598ab6eeaf1df0d87dd00826048bd80b

git 有种对象

1、blob
表示文本文件,二进制文件或者是链接文件

、tree

3、commit
大多数情况,commit 代表是一个历史提交

4、tag:指向一个固定的一个历史提交

四者之间的关系:

一个tag指向commit对象。一个commit指向一个tree对象,tree对象能够包括其它的

tree对象和blob对象,commit指向这种一个tree结构,就代表着你提交某个工作区的某一个状态。

对这些内容进行分别进行相关hash之后。就能够得到他们的唯一标识。git仅仅关心文件的内容,如两个

文件有相同的内容,那么他们会指向相同一个blob对象,而像文件名称之类的一些其他信息。会存储在tree对象里边。

有了这个git对象以后。我们须要一个仓库来对这些对象进行存储和操作。

5.获得一个git仓库

git 仓库分两种,一种是裸仓库,它不带工作区,通经常使用于server,方便其它用户进行协作

)git init

使用命令:

进入一个工作区

cd /Users/hairongchen/Documents/git

输入:

hairongchen:git (master #)$ git init drama_non_bar_repo

显示:表示为我们创建了一个文件夹,里面还带了一个.git文件夹

Initialized empty Git repository in /Users/hairongchen/Documents/git/drama_non_bar_repo/.git/

进入这个目录:

hairongchen:git (master #)$ cd drama_non_bar_repo/.git/

hairongchen:.git (GIT_DIR!)$

看到命令提示符提示,这是git工作区间。

下面是git工作所须要文件夹和文件

hairongchen:.git (GIT_DIR!)$ ls

HEAD confighooksobjects

branches descriptioninforefs

hairongchen:.git (GIT_DIR!)$

再退出来,然后创建一个裸仓库,发现没有创建一个.git文件夹

hairongchen:.git (GIT_DIR!)$ cd ../..

hairongchen:git (master #)$ git init --bare drama_bare_repo

Initialized empty Git repository in /Users/hairongchen/Documents/git/drama_bare_repo/

hairongchen:git (master #)$

再进入这个文件夹看一下,发现和上面创建一样,但没有在.git文件夹里面,这是由于它不带工作区,repo仅仅有git工作所需的文件和文件夹

hairongchen:git (master #)$ cd drama_bare_repo

hairongchen:drama_bare_repo (BARE:master)$ ls

HEAD confighooksobjects

branches descriptioninforefs

退出

hairongchen:drama_bare_repo (BARE:master)$ cd ../..

对于已经有的工作环境,怎么增加git 管理呢?

hairongchen:Documents (master #)$ cd git

创建一个已有的目录,再进入目录

hairongchen:git (master #)$ mkdir git_init_repo

hairongchen:git (master #)$ cd git_init_repo/

再输入git init 就为我们初始化好了,例如以下:

hairongchen:git_init_repo (master #)$ git init

Initialized empty Git repository in /Users/hairongchen/Documents/git/git_init_repo/.git/

hairongchen:git_init_repo (master #)$

2)git clone获取一个仓库,因为git
clone 要一个远程地址,我这里没有,就用刚刚创建的裸仓库来clone

hairongchen:git_init_repo (master #)$ cd ..

hairongchen:git (master #)$ git clone git_bare_repo/ git_clone_repo

fatal: repository 'git_bare_repo/' does
not exist

hairongchen:git (master #)$ git clone drama_bare_repo/ git_clone_repo

Cloning into 'git_clone_repo'...

warning: You appear to have cloned an empty repository.

done.

假设是远程的仓库。不须要加后面的一个路径參数。它使用一个repo名称就能够了

3)有了git仓库。就能够进行git的基本流程了

git 仓库有三个区域:

working directory :工作区,我们时常编辑代码的地方。它维护着一个树型结构

staging area:暂存区。是工作区与历史仓库中间的一个缓存,它代表着是你提交的一个工作

状态,维护着是一个虚拟的一个树型结构

history repository;历史仓库。是我们前提到的commit指向的一个树型结构。git的工作就是环绕这三个区域进行的。

我们从working directory
加入文件到staging area里,然后把staging area里提交到history repository里

我们也能够从history repository里 checkout
这个project到working directory
里。

大部分时间我们都时往staging area暂存区加入东西,然后把staging area里提交到history
repository里。经常使用

1.git add

2.git commit

查看工作区与暂存区的差别来确保提交是我们所须要的呢?


3.git status

怎么来删除staging area区不须要的东西呢?

用4.git rm,

有时我们从工作区working directory
中重命名文件或移动文件,然后再把他们加入到暂存区里面

用5. git mv

最后是6.gitignore,
来确保我们工作区里一些不希望加入到暂存区和历史区中的文件加入进去

以下来进行演示:

创建一个仓库。并创建两个文件,加入到暂存区中

hairongchen:Documents (master #)$ git init git_basic

Initialized empty Git repository in /Users/hairongchen/Documents/git_basic/.git/

hairongchen:Documents (master #)$ cd git_basic

hairongchen:git_basic (master #)$ touch a

hairongchen:git_basic (master #)$ touch b

hairongchen:git_basic (master #)$ git add

Nothing specified, nothing added.

hairongchen:git_basic (master #)$ git add a b

再用git status
看一下:

hairongchen:git_basic (master #)$ git status

On branch master

Initial commit

Changes to be committed:

(use "git rm --cached <file>..." to unstage)

new file:   a

new file:   b

这两个文件是一个初始的提交,再有git commit
提交,那么这两个文件就提交到历史记录中去了如:

hairongchen:git_basic (master #)$ git commit -m "Initial commit"

[master (root-commit) d4] Initial commit

files changed, insertions(+),
deletions(-)

create mode a

create mode b

改动一下a文件

hairongchen:git_basic (master)$ vim a

用git status来看一下,显示a文件改动了。但没有保存到暂存区里面。也就是说它还没被准备提交

hairongchen:git_basic (master *)$ git status

On branch master

Changes not staged
for commit:

(use "git add <file>..." to update what will be committed)

(use "git checkout -- <file>..." to discard changes
in working directory)

modified:   a

no changes added to commit (use "git add"
and/or "git commit -a")

用git add a
加入到暂存区中,再用git status,
告诉我们a已经准备提交了:

hairongchen:git_basic (master *)$ git add a

hairongchen:git_basic (master +)$ git status

On branch master

Changes to be committed:

(use "git reset HEAD <file>..." to unstage)

modified:   a

再用git commit - “modify a”
进行提交:

hairongchen:git_basic (master +)$ git commit -m"mofify a"

[master ab6e] mofify a

file changed, insertion(+)

删除文件

我们删除a文件,用git rm a ,它将工作工区各暂存区全删除:

hairongchen:git_basic (master)$ git rm a

rm 'a'

hairongchen:git_basic (master +)$ ls

b

hairongchen:git_basic (master +)$ git status

On branch master

Changes to be committed:

(use "git reset HEAD <file>..." to unstage)

deleted:    a

它告诉我们,当我们git commit 命令时,
就相当于这个历史里就没有a文件了

我们原还一下:

hairongchen:git_basic (master +)$ git reset HEAD a

Unstaged changes after reset:

D a

hairongchen:git_basic (master *)$ ls

b

hairongchen:git_basic (master *)$ git checkout a

hairongchen:git_basic (master)$ ls

a b

假设我们仅仅删除暂存区里的文件,而不删除工作里的文件呢?

用git rm — cached a :

hairongchen:git_basic (master)$ git rm --cached a

rm 'a'

hairongchen:git_basic (master +)$ git status

On branch master

Changes to be committed:

(use "git reset HEAD <file>..." to unstage)

deleted:    a

Untracked files:

(use "git add <file>..." to include
in what will be committed)

a

显示它还没有一个跟踪的文件

我们能够用git add 又一次加到暂存区:

hairongchen:git_basic (master +)$ git add a

有时候我们的文件被重命名或移动路径:

把a 重命名为c:

hairongchen:git_basic (master)$ git mv a c

hairongchen:git_basic (master +)$ git status

On branch master

Changes to be committed:

(use "git reset HEAD <file>..." to unstage)

renamed:    a -> c

它告诉我们这里有一个reset操作。实际上git
并没有文件的命名和移动操作,实际是一种操作的组合

我们改动回去 git mv c a

直接在自己的工作区改动:

hairongchen:git_basic (master +)$ git mv c a

hairongchen:git_basic (master)$ mv a c

hairongchen:git_basic (master *)$ git status

On branch master

Changes not staged
for commit:

(use "git add/rm <file>..." to update what will be committed)

(use "git checkout -- <file>..." to discard changes
in working directory)

deleted:    a

Untracked files:

(use "git add <file>..." to include
in what will be committed)

c

no changes added to commit (use "git add"
and/or "git commit -a”)

它告诉我们说a被删除了,还没有被暂存,同一时候有一个c
文件,没有被纳入跟踪

再次输入git add a c :

hairongchen:git_basic (master *)$ git add a c

hairongchen:git_basic (master +)$ git status

On branch master

Changes to be committed:

(use "git reset HEAD <file>..." to unstage)

renamed:    a -> c

git mv 所做的事情:

在工作区把你的文件重命名或移动,在暂存区把原有的文件删除了。然后再把新的文件加入到暂存区

最后是6.gitignore,
来确保我们工作区里一些不希望加入到暂存区和历史区中的文件加入进去

进入一个文件夹:

cd  ../git_ignore_demo/

vim .gitignore

*.[oa]   #以o
和a 结尾的文件
不要加入到git
仓库中

*~ #vim 中间文件

*.pyc #全部的pyc不要中入git
仓库中

!test.pyc #test.pyc要纳入git
仓库中。告诉git 
这个文件不要被忽略

\!text.py #对于文件名称中有!时,在前加\ !text.py不要被忽略

foo/ #以/结尾代表是一个文件夹,这样子的话,就匹配不到foo文件了

**/res #匹配个或多个文件夹

#假设其它文件都不须要都能够加进来

build/

Documenation/

src/

.DS_Store

用 git status查看

用git add .gitingore
增加进入,用于整个仓库的共享

git commmit -m “add ignore"

Git 主要的工作流程的更多相关文章

  1. git概念及工作流程详解

    git概念及工作流程详解 既然我们已经把gitlab安装完毕[当然这是非必要条件],我们就可以使用git来管理自己的项目了,前文也多多少少提及到git的基本命令,本文就先简单对比下SVN与git的区别 ...

  2. [git] git 分支管理和工作流程

    分支管理 列举本地分支.下面的 * 是 HEAD 所指向的分支,标识当前工作目录所用的分支.其他分支隐藏在 git 仓库中,通过 git checkout 命令才能访问和修改. $ git branc ...

  3. Git基本命令 -- 基本工作流程 + 文件相关操作

    可以先找一个已经被git管理的项目, 我就使用这个项目吧: https://github.com/solenovex/ID3-Editor 基本工作流程 克隆以后呢, 进入该目录查看一下状态: 然后添 ...

  4. 基于git的工作流程

    本文针对的是追求极致.快速的产品响应团队的.以下的观点和内容都是围绕这个主题,暂时不涉及个人学习和团队学习. 在说工作流程之间,想说一下我们平常工作中遇到的一些困惑或者说现象 在一个团队里,同时有好多 ...

  5. 如何让Git适应敏捷开发流程?

    一旦涉及到版本控制系统,Git实际上代表敏捷开发的水平.Git作为一款强大的开源系统,有较强的灵活性,可以按需匹配任何开发团队的工作流程.而这种分布式相比较集中式来说,可以赋予系统更好的性能特征,且允 ...

  6. Git 工作流程

    Git 作为一个源码管理系统,不可避免涉及到多人协作. 协作必须有一个规范的工作流程,让大家有效地合作,使得项目井井有条地发展下去.”工作流程”在英语里,叫做”workflow”或者”flow”,原意 ...

  7. git工作流程

    git工作流程 一般工作流程如下: 克隆 Git 资源作为工作目录. 在克隆的资源上添加或修改文件. 如果其他人修改了,你可以更新资源. 在提交前查看修改. 提交修改. 在修改完成后,如果发现错误,可 ...

  8. git的工作流程(分支合并)

    git支持很多种工作流程,我们采用的一般是这样,远程创建一个主分支,本地每人创建功能分支,日常工作流程如下: 去自己的工作分支$ git checkout work 工作.... 提交工作分支的修改$ ...

  9. Subversion/Git/ReviewBoard工作流程

    根据My (work)Git Workflow进行修改,在 Windows下进行测试,http://mojodna.net/2009/02/24/my-work-git-workflow.html 目 ...

随机推荐

  1. longpo的回文

    啊...比赛的时候输入打错了,结束之后还照着题解把DP部分重构了一遍然而还是WA...样例都没过,然后直接输了-1 明显的DP...而且数据范围这么小,显然怎么搞都可以... 而且这样的回文的DP是很 ...

  2. JavaScript--确认(confirm 消息对话框)

    confirm 消息对话框通常用于允许用户做选择的动作,如:“你对吗?”等.弹出对话框(包括一个确定按钮和一个取消按钮). 语法: confirm(str); 参数说明: str:在消息对话框中要显示 ...

  3. Git系列学习(1)-Git安装

    一.概述 msysGit名字前面的四个字面来源于MSYS项目: MSYS项目来源于MinGW(Minimalist GNU for Windows,最简GNU工具集) 通过添加一个bash提供的she ...

  4. overflow:解决 div的高度塌陷问题

    高度塌陷是如何引起的? 解析: 当一个 div中所有的子  div都进行了浮动后,那么会出现该问题,那么解决方就是在父 div中 设置其  overflow:hidden;即可解决高度塌陷问题. 方式 ...

  5. JVM 内存分配和垃圾回收(GC)机制

    一  判断对象是否存活 垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“活着”,哪些已经"死去”,即不能再被任何途径使用的对象. 1.1 引用计数法 (Reference ...

  6. Ajax——异步基础知识(二)

    XML数据格式 首行必须是版本号和格式等信息 <?xml version="1.0" encoding="utf-8" ?> 最外层需要一个根节点进 ...

  7. transactoin

    hibernate对数据的操作是封装在事务当中,并且默认是非自动提交方式.所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中.

  8. day02 python

    列表: : 在[ ]内,可以存放多个任意类型的值: 并以逗号隔开. 一般用于存放学生的爱好:课堂的周期等等... 例如: 定义一个学生列表,可存放多个学生 list(['钱垚', '李小龙', '张全 ...

  9. JNI数组操作

    在Java中数组分为两种: 1.基本类型数组 2.对象类型(Object[])的数组(数组中存放的是指向Java对象中的引用) 一个能通用于两种不同类型数组的函数: GetArrayLength(ja ...

  10. MHA的MySQL高可用方案实战

    功能: 1)master的故障切换(keepalived VIP的飘移) 2)主从复制角色的提升和重新转向 其中master 对外提供写服务,备选master2(实际的slave提供读服务,slave ...