`
jgsj
  • 浏览: 961946 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

Git是什么?

Git项目是LinusTorvalds2005年的时候为了支持Linuxkernel项目而开发的。

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)

sudoapt-getinstallgit-core

Git配置

gitconfig[-l]

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

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

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

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

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

用户信息
$ git config --global user.name  huajie 
$ git config --global user.email  huajie@thunderst.com
文本编辑器
$ git config --global core.editor vi
差异分析工具
$ git config --global merge.tool vimdiff 
Commit用的模板
$ git config --global commit.template ~/.gitmsg.template
查看配置信息
$ git config -l
$ git config --list

Git常用命令

建立代码仓库

 git init
	创建一个空的git仓库或初始化一个已存在的仓库,会建一个.git隐藏目录。
	在.git目录下,会创建objects, refs/heads, refs/tags和模板文件。
	$ mkdir facebox.git facebox
	#建立仓库服务器端
	$ cd facebox.git
	$ git init --bare 
	$ ls
         branches  config  description  HEAD  hooks  info  objects  refs
	#建立仓库客户端,建立一个空的git仓库或重新初始化仓库
       $ cd ../facebox
	 $ git init  
	 $ ls -A
           .git 

获取代码库

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

添加文件到版本库

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

忽略某些文件

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


删除文件

git rm [file]
	删除受版本控制的文件或文件夹
	git rm [file]		# 删除文件
	git rm –rf [folder]	# 删除文件夹


移动文件

git mv [sourcefile] [destinationfile]
	移动源文件为目标文件,相当于重命名。
	git mv readme.txt README
相当于:
	mv readme.txt README
	git rm readme.txt
	git add README


代码提交

每次提交后,git内部都会生成一个快照,保存所有修改过的文件,并生成一个标识用以标识本次提交,每次提交都有且仅有一个父提交
git commit [option] 
	将存储在当前索引的内容全部提交。
1、git commit 
	git commit 不加-m参数会启动编辑器以便输入本次提交的说明

2、git commit [file] –m “message”
	不打开文本编辑器,直接在命令行写注释,然后提交。
	提交后会显示本次提交的完整 SHA-1 校验和, 以及在本次提交中,有多少文件修改过,多少行添改和删改过。
	summerduan@wiki-server:~/test$ git commit a.txt -m "fix the bug2011"
	 [master 0f474c1] fix the bug2011
	 1 files changed, 1 insertions(+), 0 deletions(-)

3、git commit –a [file]
	自动把所有已跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤。



查看仓库状态

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


查看提交历史

git log
	查看全部提交日志
git log -5
	查看最近5次的提交日志
git log –p
	查看所有提交日志及修改的内容
git log –p --author=“scott”
	查看所有scott提交日志及修改内容
git log --since=“2011-05-24”
	查看2011-05-24以后所有的提交日志
git log --graph
	查看提交日志,以图形方式显示
git log --since=“2 days ago”
	查看这两天的提交日志
git log --until=“2011-05-25”
	查看截止2011-05-25所有的提交日志
git log --name-only
	查看所有修改过的文件
git log --pretty=oneline
	查看提交日志,一行显示
git log --pretty=format:%h:%s
	查看提交日志,显示sha1及提交comments

查看差异

git diff
	比较当前工作空间与staging area,查看工作空间的变化
git diff --cached
	比较staging area与本地仓库,查看暂存区中变化
git diff HEAD
	比较当前工作空间与本地仓库
git diff newbranch
	比较当前工作空间与newbranch分支
git diff tag1 tag2
	比较tag1与tag2
git diff tag1:file1 tag2:file2
	比较tag1的file1与tag2的file2
git diff tag1 tag2 file
	比较tag1与tag2的file文件
git diff --stat	
 	统计有差异的文件个数

还原文件

git revert和git reset的区别:
git revert 是撤销某次操作,此次操作之前的commit都会被保留
git reset 是撤销某次提交,但是此次之后的修改都会被退回到暂存区
git reset --hard
   取消commit,取消add,取消源文件修改
git reset --soft
   取消commit
git reset --mixed
   取消commit,取消add,是默认模式

git reset --hard HEAD   (比较下)
	恢复到HEAD状态
git reset --hard HEAD^
	彻底撤销最近一次提交
git reset --hard HEAD~3
	彻底撤销最近3次提交
git reset  --soft HEAD~3
	撤销最近3次commit,恢复到index状态,并且工作空间文件内容不变
git reset HEAD filename
	删除暂存的文件

git revert
   撤销某次提交,此次操作之前的commit都会被保留,但撤销也会作为一次提交进行保存。
git commit --amend 
修改最后一次提交。
如果上次提交时遗漏了文件,可以在提交后将文件加入缓存然后用该命令提交即可。
如果缓存中内容没有任何修改,只更新修改的提交注释。


分享到:
评论

相关推荐

    Git全套教程文档,git操作教程这一个文档就够了

    6.Git的基本使用01-TortoiseGit 操作本地仓库 7.Git的基本使用02-TortoiseGit操作本地仓库(分支) 8.tag标签 9.远程仓库 10.命令行-git基本操作 11.命令行-git远程仓库操作 12命令行-分支 案例等内容

    Git教程Git-it.zip

    Git-it 挑战Get Git 安装和配置 GitRepository 创建本地仓库Commit to it 检测状态,添加 commit 修改GitHubbin 获取一个 GitHub 账号Remote Control 连接本地仓库来在 GitHub.com 远程操作 Forks and Clones Fork ...

    Java进阶版本管理工具Git全套视频教程

    6.Git 的基本使用01-TortoiseGit 操作本地仓库 6.1 初始化仓库 6.2 添加文件 6.3 提交文件至本地仓库 6.4 修改文件,与再次提交文件 6.5 文件状态讲解 6.6 修改文件,不提交和上一个版本比较差异(diff) 6.7 查看提交...

    Git教程(精)

    你可以使用Git来进行仓库的克隆(clone)操作,完整的复制一个已有的仓库。仓库的所有者可以通过push操作(推送变更到别处的仓库)或者Pull操作(从别处的仓库拉取变更)来同步变更。 Git支持分支功能(branch)。...

    git教程,github教程,gitee教程,gitlab教程

    教程乃是图文详解,亲测有效,并非网上胡乱粘贴而来的...详细介绍了git的安装,使用,本地仓库,远程仓库,冲突解决,关联github,gitee,创建本地gitlab,在idea中集成等所有的操作,对于新手来讲,非常友好,强烈推荐。

    超详细!!!GitHub详细教程

    另外还有仓库(包括本地仓库和远程仓库)的工作原理,推送文件到远程仓库,版权管理的方法,git的分支操作,以及合并分支等 文档目录 1、什么是github 2、如何创建github用户名和密码 3、ubuntu中安装github 4、配置...

    github平台注册基础教程简介与操作步骤.docx

    1. 在本地仓库的文件夹中,创建或修改需要添加的文件。 2. 打开命令行窗口,使用"git add"命令将文件添加到暂存区。 五、提交更改 1. 在命令行窗口中,使用"git commit"命令加上"-m"参数和提交信 息,将更改提交到...

    github的使用详情.docx

    以下是GitHub的基本使用教程,包括创建仓库、克隆仓库、提交更改等基本操作。 1. 注册GitHub账号 在开始之前,您需要在GitHub上注册一个账号。访问 GitHub官网,点击右上角的 "Sign up" 按钮,填写必要信息完成注册...

    GitHub详细教程GitC语言版本控制系统

    github使用教程,Git是用C语言开发的分布版本控制系统。版本控制系统可以保留一个文件集合的历史记录,并能回滚文件集合到另一个状态(历史记录状态)。另一个状态可以是不同的文件,也可以是不同的文件内容。举个...

    Git高效实践

    前面结合IDEA讲解操作,后面都是基于命令行的教程,在终端输入git--version输出版本表示已经安装成功:以后表示输入命令都使用$开头带有--global参数的是全局配置使用IDEA打开项目,点击菜单:VCS-&gt;...

    基于C语言开发的GitHub 详细教程文档

    Git 是用 C 语言开发的分布版本控制...在一个分布版本控制系统中,每个人都有一份完整的源代码(包括源代码所有的历史记录信息),而且可以对这个本地的数据进行操作。分布版本控制系统不需要一个集中式的代码仓库。

    AutomateGitRepoSetup:一键式自动在PC上创建本地存储库和在Github上创建远程存储库

    自动化GitRepoSetup 欢迎您为这个仓库做贡献。...使用与本地仓库相同的名称在Github上创建一个仓库 获取在Github上创建的仓库的原始URL 将本地仓库推送到Github仓库 使用的技术 设定说明 步骤1:安装

    idea使用教程2017-06-01.pdf

    涵盖安装、配置、常见问题&技巧、Maven、Git、Tomcat、快捷键、项目配置等. 入门................................................................................................................................

    zhx2020.github.io:Java学习+面试

    git本地仓库与github仓库关联命令 分支管理 Java基础 Java并发 Java线程池学习总结 Java容器 Java集合框架概览 ArrayList源码剖析 LinkedList源码剖析 ArrayDeque源码剖析 PriorityQueue源码剖析 TreeSet和TreeM

    githubTutorial:Github 教程

    将仓库从你的 github 帐户克隆到本地机器8. 主与分支9. 切换分支10.创建目录11. 把你的作业复制到那个目录12. 把你的作业添加到你的分支13. 提交您的本地更改14. 车间评估15.查看每个人的变化15.1. 配置上游 master...

    LaboratoryOfComputationalPhysics_Y3:202021学年的“计算物理实验室”课程的教程和练习的存储库

    计算物理实验室 笔记本电脑指导学生使用python进行数据分析。... 特别是,如果您在已经存在此类仓库的位置工作,则无需重复以下操作。 克隆您的(分叉)存储库(即创建从远程存储库克隆的本地存储库) git clone htt

    PyOpenRPA:此仓库包含在Windows上运行的基于Python的机器人,该机器人利用PyOpenRPA库在单独的文件中搜索和提取Yandex结果

    为了测试可操作性,请按照以下说明从iduseev请求完整档案Project.zip并将其解压缩到本地计算机上。欢迎来到search_extractor.py! 这是一个机器人,它获取配置文件,在Yandex的首页上搜索请求,提取搜索结果,获取...

    kyber:旧的且不支持的BigchainDB示例,教程和刻录实验

    警告:此存储库的内容很旧,我们不再支持它。 这些示例可能不适用于最新版本的BigchainDB。 我们保留这个存储库(以... 如果要在本地运行服务器,请按照下列步骤操作: 克隆此仓库(使用子模块) git clone git@gi

Global site tag (gtag.js) - Google Analytics