Git 安装与使用(一)
一、简介
1.集中式版本控制系统(CVS):Svn
* 版本库是集中存放在中央服务器中的,客户端需要先从中央服务器取得最新的版本,然后再干活,活干完后,再把自己的代码推送给中央服务器。
中央服务器就好比是人事局,当你想要修改档案,得先从人事局把档案取出来,修改完,再还回人事局
* 缺点:
* 必须有网络才能协同工作,否则单机工作,那就乱套了
* 当中央服务器出问题了,那所有人都得蒙逼
2.分布式版本控制系统(DVCS):Git
* 首先,没有“中央服务器”,每个客户端同时也是一个完整的版本库,这样工作的时候,就不需要联网了
* 客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢 复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份.
* 更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的 协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。
3.分布式 VS 集中式
* 安全性
分布式:安全性更高,因为每个人电脑都有完整的版本库
集中式:中央政策没了,企业就蒙逼了
* 分支管理
集中式:也有分支管理,但是谁TM会用,谁TM敢用,建立个分支,那个墨迹,可靠性太TM低
分布式:操作简便,合并快捷,天下武功,唯快不破
二、原理
1. 直接记录快照,而非差异比较
Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而CVS(SVN)类系统则只关心文件内容的具体差异。Git 并不保存这些前后变化的差异数 据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这 次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。
2.近乎所有操作都是本地执行
3.时刻保持数据完整性
4.文件的三种状态
Git 内都只有三种状态:已提交(committed),已修改(modified)和 已暂存(staged)
未被Git跟踪的状态为unstage状态; 已经被Git跟踪的状态为stage状态,因此包括staging状态和staged状态
untrack files是指尚未被git所管理的文件;changed but not updated是指文件被git管理,并且发生了改变,但改动还没被git管理;这两种状态,都可以看成是改动还没被 git管理的状态,我们这里称非stage状态。
changes to be commited是指进入stage状态的文件,stage是commit和未管理之间的一个状态,也叫index状态,也就是git已经管理了这些改动,但是还没完成提交。
.gitignore(git忽略文件)中的文件,不会出现在以上三个状态中。
5.基本的 Git 工作流程如下
在工作目录中修改某些文件 -> 对修改后的文件进行快照,然后保存到暂存区域 -> 提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中
三、安装与配置
安装就不在叙述了,根据自己的环境进行下载版本安装即可,这里主要讲解一下初次运行 Git 前的配置
右键 -> Git Bash Here
* 注册用户信息
git config --global user.name "XXX"
git config --global user.email "XXX@XXX"
git config –-list #查看用户信息
* 文本编辑器(默认会使用操作系统指定的默认编辑器Vi 或者 Vim)
git config --global core.editor emacs
* 差异分析工具
决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:
git config --global merge.tool vimdiff
四、开始使用
1.创建版本库
版本库又名仓库(Repository),目录下的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,且还原
创建一个空目录 —> 变成Git可以管理的仓库
当前目录中,多了一个.git隐藏文件夹,这个目录是Git来跟踪管理版本库的,别动这个文件夹奥
2.将文件添加到版本库中
问:微信撩妹分几步走?分两步:找妹儿,加好友(添加到通讯录);点击妹儿头像->发送信息,进入聊天页面(告诉微信,我要开始发消息了)
将文件从工作区添加到暂存区 -> 把文件提交到本地版本库
(为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件)
git add filename 添加单个文件到暂存区
git add -A 添加当前文件夹下的所有文件
git status 查看当前操作目录处于哪个分支 和 文件的状态
git commit -m "描述信息" 将暂存区的文件提交到本地版本库
clean 说明缓存区没有要提交的文件了
3.时光穿梭机
* 查看文件哪里变动了 git diff filename
* 提交修改,同新增文件的用法一致(add -> commit)
* 版本回退
* 查看历史纪录 git log
可以看到从最近到最远的提交记录,一大串码是commit id
* 回退到上一个版本 git reset --hard HEAD^
* 回退错了,我要回到3.0 , 只要当前窗口没有关闭,因为你可以看见commit id, git reset --hard commit id
commit id 没必要写全,前几位就可以了,Git会自动去找
* 那么问题来了,如果昨天大姨妈,心情不好,思维蒙逼了,回退到了某一个版本,但是今早醒来,疼痛去无踪,后悔回退版本了,咋整呀,别怕,老司机带你飞
查看操作记录 git reflog
4.管理修改
* 提交修改
举个例子, 修改了一个文件,然后add,并未commit,这个文件被提交到暂存区了,然后接着修改该文件,然后直接commit,最后版本区的文件是第一次修改的文件。
第二次的修改为什么没在版本库中呀,我TM commit了,老妹儿,你说这是为什么呢?
原因:commit只能将暂存区的文件提交到版本库,因为第二次修改没有add,暂存区中只保留着第一次修改后的文件,因为所以,自然道理
解决办法: 方式一: 接着上一步, add -> commit
方式二: 再修改完第二次后,要先add,这样就将一次与第二次的修改合并了,然后提交到暂存去了。最后在 commit,搞定
* 撤销修改
如果不小心修改文件,而多加了一行 “妮,来耍一下子嘛”,咋整呀,被别人看见了咋办,敢自称老司机,自然有办法,
使用命令 git checkout -- filename
情况一:还未add , 想丢弃工作区的修改,也就是让工作区恢复到与版本库一致
情况二:已经add , 想丢弃工作区与暂存区的修改
情况四:已经add了,然后又修改了东西,想回到add后的状态,去掉后修改的东西
情况四:已经commit了,那就 版本回退 吧
5.删除文件
情况一:未add,直接删除就好了 或者 rm filename
情况二:已add,未commit
如果直接删除,工作区删除了文件,但是暂缓区不知道工作区删除了文件
先恢复一下被删除的文件, git checkout -- filename
工作区与暂存区都删除文件 git rm filename ,然后还得add、commit
情况三:已commit
情况四:已push,这里先不讲解,后续再说
要分成三步: git rm filename -> git commit -m "" -> git push
5.远程仓库
* 创建SSH Key
第一步:
ssh-keygen -t rsa -C "281345774@qq.com" , 然后一路回车
id_ras是私钥,不能泄露
id_rsa.pub是公钥,可以放心告诉任何人
第二步:登陆github进行设置
登陆GitHub,点击右上角的头像 -> 选择settings -> 选择“SSH and GPG keys”页面:
点机“new SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:保存
为什么要用ssh key?
因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
* 添加远程库
在本地已经创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,
首先,登陆GitHub,然后,在右上角找到“+”按钮,创建一个新的仓库:
可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联
第一步: 关联: 在本地的git_test仓库下运行命令:
$ git remote add origin git@github.com:xfz1987/git_test.git 后面的地址如途中所示
第二步: 查看当前关联的远程库:
git remote -v
第三步: 将本地已关联的库的内容推送到远程库中
用git push
命令,把当前本地分支master
推送到远程库中的master分支上
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的 master
分支关联起来,在以后的推送或者拉取时就可以简化命令,第一次 clone 或 push 时,会有一个警告,不予理睬,输入 yes 即可
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改
git push -u origin master
推送成功后,我们登陆github,就可以看见文件已经被推送至远程库上了
* 从远程库克隆
git clone githup远程库地址 [本地目录] - 如果不写目录,默认为当前目录
git的基本使用已经介绍完毕了, 下一篇 开始讲解git 的 分支管理 与 标签管理 及 一些扩展知识
Git 安装与使用(一)的更多相关文章
- CentOS 7 Git安装
Git安装 yum -y install git 安装后,在srv目录下建立Git的目录. 初始化一个git空仓库 git init --bare project.git 增加用于访问git仓库的用户 ...
- Git安装
前面说了很多废话,说得再好,还不如实践一次.要想使用Git,首先得安装.这次实验主要是实践怎样安装Git. 安装与检查是否安装成功 1. 在Linux(Ubuntu)上安装 上篇的Git简介已经介绍过 ...
- Git安装与配置
一.简介 Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的 ...
- 版本管理之Git(二):Win7上Git安装及简单配置过程
一.安装包 msysgit(Windows版本的Git) 下载地址:http://code.google.com/p/msysgit/downloads/list?q=full+installer+o ...
- git安装及命令使用和github网站
最近参与别人的github项目时,学习了git的使用,首先需要在https://github.com/网站上注册账号和邮箱,然后fork一个开源项目,然后下载目前Windows下最新版本的git,下载 ...
- Git 安装
安装参考资料: http://lzw.me/a/msysgit-tortoisegit-win-git.html http://blog.csdn.net/qwiwuqo/article/detail ...
- 转 git安装配置
Win7上Git安装及配置过程 一.安装说明 1.Git在windows平台上安装说明. Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件 ...
- git学习1:git安装和配置
Git是什么?世界上最先进的分布式版本控制系统,记录了一个文本文件的每次一修改信息,比如,一篇散文,从草稿到最终出版,经历过无数次修改,修改了标点符号形成一个版本,老师帮助修改形成一个版本,同学帮忙修 ...
- ubuntu下git安装及使用
ubuntu下git安装及使用 其实,好几个月前,就已经安装好了,可是一直搁置在那儿,所以密码等一些其它细节都忘的差不多了,所以今天就重新部署了一下,并开始积极使用......... 1,git ...
- 分布式管理系统-git安装及配置
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功! 安装完成后,还需要最后一步设置,在命令行输入: $ git config - ...
随机推荐
- 飘逸的python - 理解打开文件的模式
当我们用open()函数去打开文件的时候,有好几种打开的模式. 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建. 'a'->追加,写到文件末尾 'b'->二 ...
- PROC简单的用例--VC连接ORACLE
操作系统:windows 7 数据库版本号:oracle 10g VS版本号:VS2010 前言:连接ORACLE有许多方法,这里只PROC外壳,说明如何连接oracle,有事吗,希望你告诉我指出,一 ...
- 进程环境之C程序的存储空间布局
从历史上讲,C程序一直由下面几部分组成: 正文段.这是由CPU执行的机器指令部分.通常,正文段是可共享的,所以即使是频繁执行的程序(如文本编辑器.C编译器和shell等)在存储器中也只需有一个副本,另 ...
- Gaussian Discriminant Analysis
如果在我们的分类问题中,输入特征$x$是连续型随机变量,高斯判别模型(Gaussian Discriminant Analysis,GDA)就可以派上用场了. 以二分类问题为例进行说明,模型建立如下: ...
- Helpers\Data
Helpers\Data Data helper contains a bunch of useful methods for looking at and altering your data. D ...
- Google实习面试归来
咱们寝室共有两个人收到面试通知,我和另一哥们G. 今天早上8:30起了个大早,洗漱完毕,简历复印完毕,就和G骑车到达了世贸中 心酒店那儿.真不愧是世贸中心啊,装修就是华丽,连看门的都是印 ...
- C语言结构体的引入
#include <stdio.h> struct student{ int ID; ]; int age; }; int main(){ //赋值: , }; ,.name=}; , , ...
- C语言创建并使用lib
本文试图以比较简洁的方式创建lib: 只求能够把lib用起来,并不会加上[很多但必须的东西,比如我们之前说过的#ifndef #define 和#endif] 打开vs 创建一个新的项目: 点击确定 ...
- ubuntu nexus 安装
今天公司组织学习使用linux系统搭建nexus maven私服中央仓库,在公司使用centos搭建了一个,回家又用ubuntu搭建一个,主要是为了能熟悉整个流程,现将主要过程总结如下:(PS:楼主是 ...
- 自定义异常以及runtime类
一.自定义异常: 1.自定义异常的概念:在java编程中,我们会遇到很多问题,但是这些问题异常,java并没有给我们定义好,那么我们就要自己定义这些异常,这就是自定义异常: 2.throws 是声明异 ...