git入门——学习资源整合

这篇文章昨天就写好了,但是不知道什么原因消失了 -_-|||,所以这里算是前一版本的精华

先给出一些我认为比较合适的学习资源:

一、什么是git?

Git是Linus用C实现的一个分布式版本控制工具,注意这里对分布式的强调。不同于Git,像Perforce、SVN和CVS这类版本控制工具都是集中式的。

那么这里有引入一个新的问题——什么是版本控制?

版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。

开发人员或许都有这个经历,最初学习开发编程时,一个项目的代码是如何进行管理和整合的呢?我最初就是通过不停地Copy,Ctrl+C,Ctrl+V,来保存和整合项目团队中的代码。后来会有一些某某企业研发的云应用来借助云服务器来管理代码。现在,Git来了。

版本控制系统 (VCS)可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而导致出现怪异问题,又是谁在何时报告了某个功能缺陷等等。使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。但额外增加的工作量却微乎其微。


二、为什么使用Git?

之前也提到过,git是分布式版本控制工具,同时还有同样使用率很高的版本控制工具,比如SVN和CVS等。但后者是集中式的版本控制工具。

2.1 集中式版本控制

集中式的版本控制,就是在一个系统中只有一个机器是服务端,其他机器全是客户端。

集中管理的服务器保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

集中式版本控制

但是集中式的版本控制缺陷也是很明显的:

  • 网络依赖性强,工作环境保持网络连接,如果网络断掉了,所有的客户端就无法工作了。
  • 安全性较弱,所有的代码以及版本信息保存在服务器中,一旦服务器挂掉了,代码和版本控制信息就丢失了。


2.2 分布式版本控制

在分布式版本控制系统中,没有服务端/客户端的概念,每台机器都是一个服务器。也就是说,在分布式本版控制系统中,每台机器都有一份代码,并且有代码的版本信息。

这里写图片描述

git就是这样一种版本控制工具,它的优势也是很明显的:

  • 每台机器都是一台服务器,无需依赖网络就可以帮自己的更新提交到本地服务器,支持离线工作。当有网络环境的时候,就可以把更新推送给其他服务器。
  • 安全性高,每台机器都有代码以及版本信息的维护,所有即使某些机器挂掉了,代码依然是安全的。

虽然分布式版本控制没有服务端的概念,但一般在一个Git系统中,为了方便大家交换更新,会找一台机器作为中心服务器,这台机器的目地只是为了方便大家交换更新。即使这台中心服务器挂了,大家依然可以继续工作,只是相互之间交换更新比较麻烦。


三、git基础

git中常见的文件流

上面这张图熟悉git的人应该很好理解,对于刚入门的同学来说,首先我们要了解一下途中的几个重要元素。

3.1 git内,文件的三种状态
  • 已提交(committed)
  • 已修改(modified)
  • 已暂存(staged)

已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。


3.2 Git 管理项目时,文件流转的三个工作区域
  • 本地的工作目录(Working dir)——它持有实际文件
  • 本地缓存(Index Stage)——它像个缓存区域,临时保存你的改动
  • 本地仓库(Local Repo)—HEAD——指向你最近一次提交后的结果

四.git常用命令

在Git中支持上百个命令,每个命令又有很多的选项,所以初学者看到这些就会有一些恐惧。

其实,真正接触过Git一段时间后,会慢慢的发现我们会经常使用的命令也就十几二十个,掌握了这些命令之后就可以满足我们大部分的日常工作了。


在上面我们已经了解了本地的一些基本的结构和文件状态,正如上面的工作流的图中所示,这里只是针对本地工作流最常用的几个命令做一些简单地介绍:

1.添加文件到缓存区:
 $ git add filename1 filename2   
 $ git add .   
2.提交文件,这步操作将改动提交到了 本地仓库,但是还没到你的远端仓库:
 $ git commit -m "文件提交信息"  
   //用 -m 来输入一条提交信息
 使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。
 $ git commit -a -m "文件提交信息"
   ---- 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit 加上-a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:
3.推送变更——将代码提交到远端仓库:
 $ git push [remoteName] [localBranchName]  
 $ git push origin master  
   // 这段代码的的意思是:将自己的master分支提交到名为origin的服务器上
4.将某个远程主机的更新,全部取回本地:
 $ git fetch <远程主机名> <分支名>
 $ git fetch origin master
   //丢弃你所有的本地改动与提交,到服务器上获取最新的版本到HEAD目录
5.拉取远程仓库,拉取到本地目录(区别于git fetch):
 $ git pull [remoteName] [localBranchName]

git工作流

PS!!!:需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。

6.分支操作:

基本上工作中常用的就是上述几个,这里附加介绍一些分支操作:

查看本地分支:
$ git branch

查看远程分支:
$ git branch -r

创建本地分支:
$ git branch [name] ----注意新分支创建后不会自动切换为当前分支

切换分支:
$ git checkout [name]

创建新分支并立即切换到新分支:
$ git checkout -b [name]

删除分支:
$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项

合并分支:
$ git merge [name] ----将名称为[name]的分支与当前分支合并 
7.其他命令

Git 也可以对某一时间点上的版本打上标签。人们在发布某个软件版本(比如 v1.0 等等)的时候,经常这么做:

$ git tag v1.0

然后push到远端:

$ git push origin v1.0:v1.0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值