Git学习笔记(一)

版本控制系统简介

版本控制系统是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。该系统不仅可以度软件源代码的文本文件进行版本控制管理,也可以对任何其他类型的文件进行版本控制。有了版本控制系统,我们便可以将某个文件回溯到之前的状态,甚至将整个项目都回溯到过去的某个时间点的状态;我们可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而导致出现怪异的问题,又是谁在何时报告了某个功能缺陷等等。

版本控制系统的种类

1.      集中化版本控制系统CVCS(Centralized Version Control Systems): 如CVS, Subversion, Perforce等。这类系统有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人都通过客户端连接到这台服务器,取出最新的文件或者提交更新。

优点:每个人都可以在一定程度上看到项目中其他人正在做些什么,而管理员也可以轻松掌控每个开发者的权限,并且管理一个CVCS远比在各个客户端上维护本地数据库容易。

缺点: 中央服务器的单点故障。如果中央服务器出现故障,如中央服务器磁盘发生故障、死机等,都可能导致无法提交更新和数据丢失等问题。

2.      分布式版本控制系统DVCS(Distributed Version Control System): 如Git, Mercuril, Bazaar, Darcs等。客户端不只是提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这样以来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。

Git简介

Git是由Linux鼻祖Linus Torvalds开发的,用于管理Linux的内核代码,并具有速度飞快、设计简单、对非线性开发模式强力支持(允许上千个并行开发的分支)、完全分布式、有能力高效管理类似Linux内核一样的超大规模的项目。

Git特性

1.      直接记录快照,而非差异比较: Git只关心文件数据的整体是否发生变化,而大多数其他系统只关心文件内容的具体差异,这类系统(CVS, Subversion, Perforce, Bazaar等)每次记录哪些文件做了哪些更新。而Git并不保存这些前后变化的数据差异,而是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵让览以便所有文件的指纹信息并对文件作以快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git不会再次保存,而只对上次保存的快照作一链接。Git工作方式如下:

svn工作方式如下:

2.      近乎所有操作都是本地执行: Git的绝大多数操作都只需要访问本地文件和资源,不用连网。因为Git在本地磁盘

上就保存这所有当前项目的历史更新,所以处理起来速度飞快。用CVCS的话,没有网络或者断开VPN便无法做和任何事。但用Git的话,没有网络时可以频繁地提交,到有网络时再上传到远程仓库。

3.时刻保持数据完整性: 在保存到 Git 之前,所有数据都要进行内容的校验和(checksum)计算,并将此结果作为

数据的唯一标识和索引。换句话说,不可能在你修改了文件或目录之后,Git 一无所知。这项特性作为 Git 的设计哲学,建在整体架构的最底层。所以如果文件在传输时变得不完整,或者磁盘损坏导致文件数据缺失,Git 都能立即察觉。

4. 多数操作仅添加数据: 常用的Git操作大多仅仅是把数据添加到数据库中。因为任何一种不可逆的操作,比如删除数据,都会使回退或重现历史版本变得困难重重。在别的VCS中,若还未提交更新,就有可能丢失或者混淆一些修改的内容,但在Git里,一旦提交快照后就完全不用担心丢失数据,特别是养成定期推送到其他仓库的习惯的话。

基本的Git工作流程

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

2.      对修改后的文件进行快照,然后保存到暂存区域

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

获取项目的Git仓库的两种方法

1.      在现存的目录下,通过导入所有文件来创建新的Git仓库。即进入到项目所在的目录,执行$git init语句。初始化后,在当前目录下会出现一个名为.git的目录,所有Git需要的数据和资源都存在这个目录中。不过目前,仅仅是按照既有的结构框架初始化了里边所有的文件和目录,但还没有开始跟踪管理项目中的任何一个文件。当用git add命令add项目中的文件数据时,Git便开始对这些文件数据进行跟踪管理。

2.       从远程服务器现有仓库中克隆,使用的命令格式为git clone<url>,如: $git clonegit://github.com/schacon/grit.git。这便会当前目录下创建一个名为“grit”的目录,其中包含一个.git的目录,用于保存下载下来的所有版本记录,然后从中取出最新版本的文件拷贝。同时,gerit目录下还包含该项目中的所有文件。需要注意的是,刚从远程服务器中clone出代码仓库时,git处于本地master分支上,而该本地master分支上是没有数据的,要获得数据(远程代码仓库中的数据),需要切换到远程代码仓库中的分支上;或者,将远程代码仓库上的分支合并到本地master分支上,这样以来,本地master分支便有了项目的所有文件数据。如果希望在克隆的时候,自己要定义新建的项目的目录名称,可以在clone命令后面指定新的名字,如:$git
clone git://github.com/schacon/grit.git MyGrit。

忽略某些文件

如果不希望某些文件总出现在未跟踪的文件列表中,如自动生成的日志文件、编译过程中创建的临时文件等,我们可以将这些文件不纳入Git的管理中。这可通过定义一个名为.gitignore的文件,文件中列出要忽略的文件模式。文件爱你.gitignore的格式规范如下:

● 所有空行或者以注释符号#开头的行都会被Git忽略。

● 可以使用标准的glob模式匹配。*匹配模式最后跟反斜杠(/)说明要忽略的是目录。*要忽略指定模式以外的文件或目录,可以在模式前加上感叹号(!)取反。

例如:

# 此为注释 – 将被 Git 忽略

*.a         # 忽略所有 .a 结尾的文件

!lib.a       # 但 lib.a 除外

/TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO

build/      # 忽略 build/ 目录下的所有文件

doc/*.txt    # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

gitdiff简介

git diff用于查看已暂存和未暂存的更新。不仅能列出哪些文件被修改过,还能列出当前做的哪些更新还没有暂存,哪些更新已经暂存起来准备好了下次提交,同时还会以文件补丁的格式显示具体添加和删除的行。&git diff比较工作目录中当前文件和暂存区域快照之间的差异,&git diff –cached 或 $git diff –staged比较已经暂存起来的文件和上次提交时的快照之间的差异。

时间: 2024-08-05 04:56:29

Git学习笔记(一)的相关文章

Git 学习笔记

Git 学习笔记 本文整理参考廖雪峰的 Git 教程, 整理 Git 学习笔记, 用于 Git 常用命令速查:常用命令用彩色标注! Git学习笔记 $ git config --global user.name "Your Name" 配置本机所有仓库的用户名 $ git config --global user.email "[email protected]" 配置本机所有仓库的Email地址 $ git init 初始化一个Git仓库 $ ls -ah 查看隐

Git学习笔记(二)

本次学习的是 版本回退 基本命令: 查看提交历史      git log 版本回退            git reset 查看每一次的命令 git reflog 具体步骤: 添加一句话到readme.txt中,并提交到Git库中. . readme.txt在Git中目前有三个版本: 按提交时间先后顺序排列如下: 第一个:wrote a readme.txt 第二个:add distrubuted 第三个:add difficulties 如果版本过多的话,根本记不住,只能查看使用命令git

Git 学习笔记&lt;简介与安装&gt; (一)

Git,开源中国以及GitHub所使用的系统, Is A 一个分布式版本控制系统 Be Used to 为团队合作写代码提供方便的管理系统.几乎满足你所有关于合作写代码的幻想. Has 本地端:工作区.版本库 (版本库还含有一个暂存区) 远程仓库:版本库(用来储存版本库的服务器) How To Install Linux: 首先,先输入git,看看是否安装Git: $ gitThe program 'git' is currently not installed. You can install

Git学习笔记总结和注意事项

一.Git简介 Git是目前世界上最先进的分布式版本控制系统,其特点简单来说就是:高端大气上档次! 二.Windows上Git安装 最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.Mac和Windows这几大平台上正常运行了. msysgit是Windows版的Git,从http://msysgit.github.io/下载,然后按默认选项安装即可.安装完成后,在开

Git 学习笔记&lt;远程仓库与标签管理&gt; (四)

什么是远程仓库? 就像第一章介绍的那样,远程仓库可以储存你编写的所有源码和资源文件. 甚至也可以当网盘使,不过当然有很多契合git管理文本的特性. 下面就要以 github 为示例远程仓库进行介绍.  (也可以自己弄一台服务器作远程仓库). 创建仓库 在主页找到 +New repository 或者右上角的加号里有.输入名字 描述 然后没钱只能public就能确定了.然后呢,点名字打开你的仓库.(主页右下角可以找到) 关于与远程仓库的连接 首先你打开你的保险箱得先证明身份吧,不然我怎么知道你是客

【版本控制】git学习笔记(二)

关于git的基本使用请阅读上篇博文内容,[版本控制]git学习笔记(一). 1.远程仓库 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上.怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以"克隆"这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分. 你肯定会想,至少需要两台机器才能玩远程库不是?但是我只有一台电脑,怎么玩? 其实一台电脑上也是可以克隆多个版本库的,只要不在同一个目录下.不过,现实生活中是不会有人这么傻的在一台电脑

Git学习笔记(四)

一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了.所有配置文件可以直接在线浏览:https://github.com/github/gitignore .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理! 二.配置别名 $ git config --global al

git学习笔记(非常乱)

gitwiki 我是一个php程序员,但是我还是用windows开发环境.我不争气. 下载 git bash(windows环境下的git) 安装完之后设置用户名和邮箱 git config --global user.name "linjingxiong" git config --global user.email "[email protected]" 基本的命令: git init cd /d/../../  进入D盘的某目录 pwd          列出

Git 学习笔记&lt;分支管理&gt; (三)

分支是什么? 分支就像树分出的树枝,不同的是,它们之间可以互相合并. 将版本的推进想象成一个链表的伸长:  version 1.0 ==> version 2.0 ==>version3.0  . master是主要的分支基本上用于发布产品.你可以从master分出一个dev,在上面创建新功能,或者修bug然后调试.最后再合并到master里面.就像下面这样. master分支:  version 1.0=========>version 2.0===... \            

Git学习笔记(8)——标签管理

本文主要记录的Git标签的作用.标签的多种创建方式,以及标签的删除,与推送,和使用GitHub的Fork参与别人的项目. 标签的作用 发布版本时,通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本.无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照.Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像,但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的. 创建标签 [email pro