zoukankan      html  css  js  c++  java
  • 让初学者快速了解Git

    Git工作原理

    为了更好的学习Git,我们们必须了解Git管理我们文件的3种状态,分别是已提交(committed)、已修改(modified)和已暂存(staged),由此引入 Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。

    Git仓库目录是Git用来保存项目的元数据和对象数据库的地方。 这是Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

    工作目录是对项目的某个版本独立提取出来的内容。 这些从Git仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

    暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在Git仓库目录中。有时候也被称作“索引”(Index),不过一般说法还是叫暂存区域。

    基本的Git工作流程如下:

        1、在工作目录中修改文件。

        2、暂存文件,将文件的快照放入暂存区域。

        3、提交更新,找到暂存区域的文件,将快照永久性存储到Git仓库目录。

    1.1   Git安装

    Window安装

    http://git-scm.com/download/win下载Git客户端软件,和普通软件安装方式一样。

    Linu安装

    CentOS发行版:sudo yum install git

    Ubuntu发行版:sudo apt-get install git

    Mac安装

    打开Terminal直接输入git命令,会自动提示,按提示引导安装即可。

    1.2   Git本地仓库

    1.2.1    Git基础

    命令行方式:任意目录(建议开发目录)右键 > Git Bash Here

    1、配置用户

    git config --global user.name "自已的名字"

    git config --global user.email "自已的邮箱地址"

    --global 配置当前用户所有仓库

    --system 配置当前计算机上所有用户的所有仓库

    2、初始化仓库

    git init

    git init只是创建了一个名为.git的隐藏目录,这个目录就是存储我们历史版本的仓库,ls -al 可以查看。

    3、查看文件状态

    git status可以检测当前仓库文件的状态

    4、添加文件到暂存区

    git add file “*”或-A代表所有

    放到暂存区的文件被标记成了绿色,等待提交。

    5、提交文件

    git commit -m '备注信息'

    将暂存区被标记成绿色的文件,全部提交到仓库存储。

    6、查看提交历史

    git log

    我们可以查看到一次提交记录,97b101e7d代表这次提交的唯一ID,一般称为SHA值。傻?

    这时我们对index.html文件做修改

    7、再次检测仓库文件状态

    git status

    被修改过的文件被标记成了红色,等待重新添加到暂存区。

    8、重新添加暂存区然后提交

    git add index.html

    git commit -m 'add some words'

    9、再次查看历史

    git log 可查到所有提交历史

    这时可以查看到两次提交历史。

    这时关掉所有目录甚至关机!

    10、恢复上一次提交的状态

    git reset --hard 97b101e7d 查看index.html发现回到了没有修改的状态

    git log再次查看发现提交历史只有一个了

    这时我们非常容易就回到了曾经的一个历史版本。

    仓库示意图

    1.1.1    Git分支

    在我们的现实开发中,需求往往是五花八门的,同时开发个需求的情况十分常见,比如当你正在专注开发一个功能时,突然有一个紧急的BUG需要你来修复,这个时候我们当然是希望在能够保存当前任务进度,再去修改这个BUG,等这个BUG修复完成后再继续我们的任务。如何实现呢?

    通过创建分支来解决实际开发中类似的问题。

    当我们在初始化仓库的时候,Git会默认帮我们创建了一个master的分支,并且HEAD默认指向了master末端。

    我们也可以创建自已的分支

    1、创建分支

    git branch hotfix

    2、切换分支

    git checkout hotfix

    我们发现HEAD现在又指向了developer的末端。

    3、再次提交操作

    git add -A

    git commit -m 'add some code for hotfix'

    这次的提交历史版本就会记录在developer这个分支上了,并且HEAD伴随developer在移动。

    4、当我们再次切回到master

    git checkout master

    当我们切换回master后,HEAD指向了master分支的末端。

    5、继续之前的开发

    git add -A

    git commit -m 'add some code for master'

    总结:当我们git checkout branchname时,HEAD会自动指向对应分支的末端,工作目录中的源码也会 随之发生改变。

    这个时候我们就在hotfix这个分支上修复了这个BUG,而我们原来在master分支上的操作并未受到影响。

    思考一个问题:

    现在master这个分支上是否包含了hotfix的修复呢?

    实际上从图4-5可以看出这时的master分支并没有包含有hotfix的修复。

    6、合并(融合)分支

    git checkout master

    git merge hotfix

    这时master会有两个父结点了,master便包含了hotfix里的修复了

    7、删除分支

    git branch -d hotfix

    这时用来修复BUG创建的hotfix分支已经没有用处了,我们可以将它删除。

    1.1   Git远程仓库

    通过上面学习我们可以很好的管理本地版本控制了,可是如果我们下班回到家里突然来了灵感觉得有部分代码可以优化,如果能接着公司电脑上的代码继续写该有多好呀!另一种情形,假设项目比较大,不同的功能模块由不同的开发人员完成,不同模块儿之间又难免会依赖关系,这时如果我们的代码互相合并(融合)该有多好呀!所有模块开发完毕后,需要整合到一起,要能做到准确无误该有多好呀!

    借助一个远程仓库,大家可以共享代码、历史版本等数据,便可以解决以上遇到的所有问题,在学习远程仓库前我们先来学习git clone path这个命令。

    1、获取已有仓库的副本

    在blog这个目录同级执行

    git clone ./blog 目录名称

    2、进入到demo目录中

    cd demo

    git log可以看到全部的提交历史

    这时我们可以认为这个这个blog其实就是一个“共享的”仓库了,但是要想创建一个真正的共享仓库,需要做一些特殊的处理。

    3、创建共享仓库

    Git要求共享仓库是一个以.git结尾的目录。

    mkdir repo.git 创建以.git结尾目录

    cd repo.git 进入这个目录

    git init --bare 初始化一个共享仓库,注意选项--bare

    这样我们就建好了一个共享的仓库,但这时这个仓库是一个空的仓库。

    4、向共享仓库共享内容

    进入到本地的仓库 copy

    cd copy

    git push ../repo.git master

    5、从共享仓库里取出内容

    git clone ./repo.git demo

    通过repo.git共享仓库,我们轻松得到了一个copy的副本

    6、通过demo仓库向repo.git共享内容

    进入到demo里,我们做一些修改

    cd demo

    git push ../repo.git master

    7、在copy仓库从repo.git获取共享的内容

    cd copy

    git pull ../repo.git master

    奇迹似乎发生了,我们轻松的将demo仓库里的内容,通过repo.git共享给了copy仓库。

    惊喜不断,问题也总是不断,我们发现我们这个共享的仓库只是放到了本地的,其它人是没有办法从我们这个共享仓库共享内容的!!!

    然而现实是,办法总是有的!!!!

    我们把这个共享的仓库放到一台远程服务器上,问题不就解决了吗?

  • 相关阅读:
    微软职位内部推荐-Software Engineer II
    微软职位内部推荐-Senior Software Engineer
    Linux日期时间显示输出
    Redis性能优化
    Can't use Subversion command line client: svn
    redis常用性能分析命令
    Linux下配置tomcat + apr + native应对高并发
    Tomcat7并发和线程数
    mongodb常用命令小结
    Spring MVC @PathVariable被截断
  • 原文地址:https://www.cnblogs.com/famensaodiseng/p/7257351.html
Copyright © 2011-2022 走看看