git使用教程一 本地仓库操作

来源:互联网 发布:淘宝网上怎样申请退款 编辑:程序博客网 时间:2024/04/30 15:07

http://blog.csdn.net/yangwen123/article/details/8664342


Git是什么?

Git项目是Linus Torvalds2005年的时候为了支持Linux kernel项目而开发的。

Git是一个分布式的版本控制系统。

建立一个空目录,从远程服务器上同步一个或多个项目的内容到本地

每个工作目录中都是一个项目的完全拷贝,带有全部的版本历史信息。

查看变化和做提交的时候是不需要联网的。

为什么使用Git?

速度  直接快照,而非比较差异,近乎所有操作都可本地执行

简单的设计 

对非线性开发模式的强力支持(允许上千个并行开发的分支)

完全分布式 

开源、免费的

有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

Git的特点

1) 直接快照,而非比较差异

1) 近乎所有操作本地执行

Git 在本地磁盘上保存着所有有关当前项目的历史更新,因此绝大多数操作都只需要访问本地文件和资源即可,不用联网,并且处理速度飞快。

2) 时刻保持数据完整性

在保存到 Git 之前,所有数据都要进行内容的校验和(checksum)计算,并将此结果作为数据的唯一标识和索引。所以如果文件在传输时变得不完整,或者磁盘损坏导致文件数据缺失,Git都能立即察觉。

Git 使用SHA-1算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个SHA-1值,作为指纹字符串。该字符串由40个十六进制字符组成:

      24b9da6552252987aa493b52f8696cd6d3b00373

Git 的工作完全依赖于这类字符串。每次提交都会保存一个SHA-1值。

Git的三种状态

已提交(committed

已修改(modified

已暂存(staged

Git的三个工作区域

本地数据目录

工作目录

暂存区域 

Git的基本工作流程

1. 在工作目录中修改某些文件。 

2. 对这些修改了的文件作快照,并保存到暂存区域。 

3. 提交更新,将保存在暂存区域的文件快照转储到 git 目录中。

所以,我们可以从文件所处的位置来判断状态:如果是 git 目录中保存着的特定版本文件,就属于已提交状态;如果作了修改并已放入暂存区域,就属于已暂存状态;如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。


Git文件存储

blob--文件内容,没有属性信息

tree -- 所有文件名字及其属性的列表

commit--表示修改历史,描述一个个tree之间如何联系起来

tag--标签,它可以指向blob,tree,commit,大部分是commit


1) Git 目录( .git 

每个项目都只有一个.git目录,为项目存储所有元数据和对象数据库。包括所有的对象(commits,trees,blobs,tags),这些对象指向不同的分支。

该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。

2) Git 工作目录

Git的工作目录存储从项目中取出的某个版本的所有文件和目录。

当在项目的不同分支间切换时,工作目录里的文件经常会被替换和删除。所有历史信息都保存在GIT目录(.git)中;

3) Git 暂存区域

所谓的暂存区域只不过是一个简单的文件,一般都放在 Git 目录中。有时候人们会把这个文件叫做索引文件

Git 的安装(ubuntu)

sudo apt-get install git-core

Git 配置

git config [-l]

这些变量可以存放在以下三个不同的地方:

/etc/gitconfig文件:系统中对所有用户都普遍适用的配置。使用 git config 时用 --system 选项。 

~/.gitconfig文件:用户目录下的配置文件只适用于该用户。使用 git config 时用 --global 选项。 

当前项目的 git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。

每一个级别的配置都会覆盖上层的相同配置。

[html] view plain copy
  1. 用户信息  
  2. $ git config --global user.name  huajie   
  3. $ git config --global user.email  huajie@thunderst.com  
  4. 文本编辑器  
  5. $ git config --global core.editor vi  
  6. 差异分析工具  
  7. $ git config --global merge.tool vimdiff   
  8. Commit用的模板  
  9. $ git config --global commit.template ~/.gitmsg.template  
  10. 查看配置信息  
  11. $ git config -l  
  12. $ git config --list  

Git常用命令

建立代码仓库 

[plain] view plain copy
  1. git init  
  2. 创建一个空的git仓库或初始化一个已存在的仓库,会建一个.git隐藏目录。  
  3. 在.git目录下,会创建objects, refs/heads, refs/tags和模板文件。  
  4. $ mkdir facebox.git facebox  
  5. #建立仓库服务器端  
  6. $ cd facebox.git  
  7. $ git init --bare   
  8. $ ls  
  9.         branches  config  description  HEAD  hooks  info  objects  refs  
  10. #建立仓库客户端,建立一个空的git仓库或重新初始化仓库  
  11.       $ cd ../facebox  
  12.  $ git init    
  13.  $ ls -A  
  14.           .git   

获取代码库

[plain] view plain copy
  1. git clone [url]  
  2.       git clone 默认会把远程仓库整个clone下来,但只会在本地创建master分支。  
  3.     如果远程还有其他的分支,此时用git branch -a查看所有分支  
  4.     $ git clone gitosis@sprdroid.git.spreadtrum.com.cn:android/3rdparty.git  
  5.     $ cd 3rdparty  
  6.     $ git branch  
  7.         *master #当前分支前面会有 * 号  
  8.     $ git branch –r  
  9.         origin/HEAD -> origin/master  
  10.         origin/master  
  11.         origin/sprdroid_cmcc  
  12. git 支持http,https,git,ssh协议,我们一般用ssh协议;从android网站下载代码仓库时,可使用git,http协议完成。  

添加文件到版本库

[plain] view plain copy
  1. git add [file]  
  2.     添加目录下修改、删除、新增加的文件到仓库暂存区  
  3.     git add –A    
  4.         添加所有文件,包括:untrack,modify,delete  
  5.     git add –u    
  6.         添加所有track文件,包括:modify,delete  
  7.     git add –f  
  8.         强制添加被忽略的文件。  
  9.     git add .     
  10.         添加项目中除delete文件外的其他文件  
  11.     git add a.txt c.txt  
  12.         只添加某些文件到index(删除的文件需要用git rm)  

忽略某些文件

[plain] view plain copy
  1.     无需纳入git管理,也不希望出现在untrack文件列表的文件,只对未加入版本控制的文件有效。(共享和独享??)  
  2.     在.gitignore文件中列出这些需要忽略的文件模式。  
  3. 格式规范:  
  4.     所有空行或者以注释符号#开头的行会被git忽略;  
  5.     可以使用标准的模式匹配;  
  6.     匹配模式最后跟反斜杠(/)说明忽略的是目录;  
  7.     要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号取反。  
  8. $ cat .gitignore  
  9.   # frameworks/base   # 此为注释,被git忽略  
  10.   *.a          # 忽略所有.a结尾的文件  
  11.   !lib.a           # 但lib.a除外,!  
  12.   build/           # 忽略build目录下的所有文件  
  13.   doc/*.txt        # 忽略doc目录下的所有.txt结尾文件,但不包含doc/notes/*.txt  
  14.   /TODO       # 仅忽略项目根目录下的TODO文件,但不包含subdir/TODO  


删除文件

[plain] view plain copy
  1. git rm [file]  
  2.     删除受版本控制的文件或文件夹  
  3.     git rm [file]       # 删除文件  
  4.     git rm –rf [folder] # 删除文件夹  


移动文件

[plain] view plain copy
  1. git mv [sourcefile] [destinationfile]  
  2.     移动源文件为目标文件,相当于重命名。  
  3.     git mv readme.txt README  
  4. 相当于:  
  5.     mv readme.txt README  
  6.     git rm readme.txt  
  7.     git add README  


代码提交

[html] view plain copy
  1. 每次提交后,git内部都会生成一个快照,保存所有修改过的文件,并生成一个标识用以标识本次提交,每次提交都有且仅有一个父提交  
  2. git commit [option]   
  3.     将存储在当前索引的内容全部提交。  
  4. 1、git commit   
  5.     git commit 不加-m参数会启动编辑器以便输入本次提交的说明  
  6.   
  7. 2、git commit [file] –m “message”  
  8.     不打开文本编辑器,直接在命令行写注释,然后提交。  
  9.     提交后会显示本次提交的完整 SHA-1 校验和, 以及在本次提交中,有多少文件修改过,多少行添改和删改过。  
  10.     summerduan@wiki-server:~/test$ git commit a.txt -m "fix the bug2011"  
  11.      [master 0f474c1] fix the bug2011  
  12.      1 files changed, 1 insertions(+), 0 deletions(-)  
  13.   
  14. 3、git commit –a [file]  
  15.     自动把所有已跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤。  



查看仓库状态

[plain] view plain copy
  1. git status  
  2.     查看仓库当前工作于哪个分支;  
  3.     查看文件状态:被修改,被删除,新增加等  
  4.     每次提交前,都用git status查看下是不是都已暂存起来了,然后再提交。  
  5. $ git status  
  6. # On branch master  
  7. # Changed but not updated:  
  8. #   (use "git add <file>..." to update what will be committed)  
  9. #   (use "git checkout -- <file>..." to discard changes in working directory)  
  10. #  
  11. #       modified:   a.txt  
  12. #  
  13. no changes added to commit (use "git add" and/or "git commit -a")  
  14. git合并时发生冲突没有提交。可以用git status查看是哪些文件发生冲突。  
  15. 这个命令在不同状态下都会有一些操作提示,按照提示操作即可  


查看提交历史

[plain] view plain copy
  1. git log  
  2.     查看全部提交日志  
  3. git log -5  
  4.     查看最近5次的提交日志  
  5. git log –p  
  6.     查看所有提交日志及修改的内容  
  7. git log –p --author=“scott”  
  8.     查看所有scott提交日志及修改内容  
  9. git log --since=“2011-05-24”  
  10.     查看2011-05-24以后所有的提交日志  
  11. git log --graph  
  12.     查看提交日志,以图形方式显示  
  13. git log --since=“2 days ago”  
  14.     查看这两天的提交日志  
  15. git log --until=“2011-05-25”  
  16.     查看截止2011-05-25所有的提交日志  
  17. git log --name-only  
  18.     查看所有修改过的文件  
  19. git log --pretty=oneline  
  20.     查看提交日志,一行显示  
  21. git log --pretty=format:%h:%s  
  22.     查看提交日志,显示sha1及提交comments  

查看差异

[plain] view plain copy
  1. git diff  
  2.     比较当前工作空间与staging area,查看工作空间的变化  
  3. git diff --cached  
  4.     比较staging area与本地仓库,查看暂存区中变化  
  5. git diff HEAD  
  6.     比较当前工作空间与本地仓库  
  7. git diff newbranch  
  8.     比较当前工作空间与newbranch分支  
  9. git diff tag1 tag2  
  10.     比较tag1与tag2  
  11. git diff tag1:file1 tag2:file2  
  12.     比较tag1的file1与tag2的file2  
  13. git diff tag1 tag2 file  
  14.     比较tag1与tag2的file文件  
  15. git diff --stat   
  16.     统计有差异的文件个数  

还原文件

[plain] view plain copy
  1. git revert和git reset的区别:  
  2. git revert 是撤销某次操作,此次操作之前的commit都会被保留  
  3. git reset 是撤销某次提交,但是此次之后的修改都会被退回到暂存区  
  4. git reset --hard  
  5.    取消commit,取消add,取消源文件修改  
  6. git reset --soft  
  7.    取消commit  
  8. git reset --mixed  
  9.    取消commit,取消add,是默认模式  
  10.   
  11. git reset --hard HEAD   (比较下)  
  12.     恢复到HEAD状态  
  13. git reset --hard HEAD^  
  14.     彻底撤销最近一次提交  
  15. git reset --hard HEAD~3  
  16.     彻底撤销最近3次提交  
  17. git reset  --soft HEAD~3  
  18.     撤销最近3次commit,恢复到index状态,并且工作空间文件内容不变  
  19. git reset HEAD filename  
  20.     删除暂存的文件  
  21.   
  22. git revert  
  23.    撤销某次提交,此次操作之前的commit都会被保留,但撤销也会作为一次提交进行保存。  
  24. git commit --amend   
  25. 修改最后一次提交。  
  26. 如果上次提交时遗漏了文件,可以在提交后将文件加入缓存然后用该命令提交即可。  
  27. 如果缓存中内容没有任何修改,只更新修改的提交注释。  

0 0