Git 简介

版本管理

简介

  • 版本控制系统
    • 版本控制系统即VCS(version control system)是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。它帮助我们查阅或回到某个历史版本
    • “人肉”VCS
    • LVCS 本地版本控制系统(Local)
      • 比如 RCS(Revision Control System)
      • 缺点:管理困难;不利于多人协作
    • CVCS 集中式版本控制系统
      • 比如CVS(Concurrent Versions System)
      • SVN(Subversion) (比较有名)
      • Perforce
    • DVCS 分布式版本控制系统(Distribution)
      • 比如Git
      • Mercurial
  • 集中式版本控制系统(CVCS)对比分布式版本控制(DVCS)
    • CVCS:
      • 优点:因为管理的点只在中央服务器上,所以可控性比较高。共享性更高点,大家修改和使用公共池中的文件
      • 缺点:容易发生单点故障,一旦服务器发生故障,有可能会导致无法进行相关操作,甚至会丢失历史消息。且每次操作都要经过网络请求,影响操作的流畅性,也就是必须要进行网络的连接
      • 使用:比较适合项目中的文档的版本管理
    • DVCS:
      • 优点:适合多人团队协作开发。每个本地库都是一个完整的历史拷贝,即使中央服务器故障,也很容易从本地库将历史还原,即安全性比较高。若大部分相关操作不需要同步服务器,可直接在本地完成,也就是可以离线工作,不依赖网络请求,这样操作会更流畅
      • 缺点:很容易出现代码冲突。两台电脑不能相互访问,只能访问中央库中的,这个比较适合代码文件的版本控制。

分支模型

  • 分支:从目标仓库获得一份项目拷贝,每条拷贝都有和原仓库一样的开发线
  • 分支模型(branching moel)/工作流(workflow):一个围绕项目(开发/部署/测试)等工作流程的分支操作(创建/合并等)规范集合

Git

  • Git是什么?
    • git是一根免费开源的分布式版本控制系统(DVCS)
    • git是一个基于内容寻址的存储系统
  • 历史:git的出现离不开linux
    • 1991-2002:几乎无版本控制(patch包)
    • 2002-2005:BitKeeper
    • 2005-至今:git
  • 优势:
    • 速度:快!不是直接对比文件的改变,而是给文件做一个快照(hash),通过比较 hash 值的变更来判断文件是否改变
    • 完全的分布式,不怕断网
    • 轻量级的分支操作,允许上千个并行分支
    • Git已经成为现实意义上的标准(几乎所有的优秀前端的开源项目都是通过git来控制的)
    • 社区成熟活跃(github,注意git并不等于github,当然git的流行离不开github)

Git 重要概念

在仓库中,任何文件都是下面三种状态之一:

  • 已提交(committed):该文件已经被安全地保存在本地数据库中了
  • 已修改(modified):修改了某个文件,但还没有提交保存
  • 已暂存(staged):把已修改的文件放在下次提交时要保存的清单中

基本操作

起步

  • 初次使用需要设置姓名和邮箱
    • 我们将文件 push 到 github,会有一条记录,显示是谁提交了这份文件(姓名 + 邮箱),方便跟踪测试
# 添加 --global,设置一次,所有的仓库都能用了 
git config --global user.name "你的姓名"
git config --global user.email johndoe@example.com

clone 项目

  • 用于把一个 Github 上的项目 clone(下载)到本地变为本地仓库
# 这里使用的是 SSH 协议地址
git clone git@github.com:jirengu/blog.git

cd blog
# 通过命令 ls -al,可以看到在 blog 目录下存在 .git 文件夹的(隐藏),因为它,blog 才能被视为本地仓库
# 我们做的修改,其实都是 .git 文件夹记录操作的,如果删除它,blog 就是一个普通的文件夹,git 命令对其无作用

添加文件并提交

# 创建文件(这里是通过命令行的方式,也可以打开 blog 目录,自行添加、编辑)
touch a.md
# 在文件里写入一个字符串  
echo "hello" > a.md
# 显示有变更的文件
git status
# 把当前目录下的所有新增和修改的文件添加到暂存区
git add .
git status
# 把暂存区的更新提交到本地库
# -a 代表将工作区自上次commit之后的变化,直接提交到仓库区
# -m 每次提交必须留点信息出来,加点备注,方便以后查询提交记录,所以 git 强制要求加这个参数,哪怕是空字符串
git commit -am "add file"
git status
# 把当前本地库里的改动推送到远程库(origin)的 master 分支
git push origin master  
# 如果之前已经使用此命令推送过,那么直接使用命令 git push 即可

修改删除文件

# 把远程仓库的变动更新合并到本地仓库
git pull

# 修改文件
vim a.md
git add .

# 这里需要注意,如果提交消息包含大量字符串,提交参数不用加 m
# 此时会进入 vim 界面,按下i进入编辑状态,进行编辑
# 编辑完成后按下 esc 进入命令态, 输入 :wq 保存退出 vim
git commit -a

git push origin master

rm -rf a.md
git add .
git commit -am "删除a.md"

git clone url和 git pull有什么区别?

  • git clone 是把整个 git 项目拷贝下来,包括里面的日志信息,git项目里的分支,我们也可以直接切换、使用里面的分支等
  • git pull 相当于 git fetch(下载) 和 git merge(合并)。其意思是先从远程下载 git 项目里的文件,然后将文件与本地的分支进行 merge

[origin 代表什么?](Git 里面的 origin 到底代表啥意思?)

  • origin 就是一个名字,它是我们 clone 一个托管在 Github 上代码库时,git 为我们默认创建的指向这个远程代码库的标签,origin 指向的是 repository,master 只是这个 repository 中默认创建的第一个 branch。当我们 git push 的时候因为 orgin 和 master 都是默认创建的,所以这样可以省略,但是这个是 bad practice,因为当我们换一个 branch 再 git push 的时候,有时候就纠结了

复杂使用

本地创建一个 git 项目推送到远程空仓库

mkdir newProject
cd new Project

# 把一个文件夹初始化成一个本地 git 仓库
# 注意 仓库和文件夹的区别在于仓库下有一个隐藏的 .git文件夹,里面有一些信息
# 对于一个仓库,删除.git文件夹,就变成一个普通文件夹了
git init

touch index.html
echo "hello" > index.html

git add .
git commit -am "init"


# 查看本地库里记录的远程库地址
git remote -v

# 这里把远程库的地址添加个标签叫origin
git remote add origin git@github.com:jirengu/blog2.git
# 推送到远程库地址
git push origin master
# 我们知道,当别人修改了文件并推送到了 github 上,我们 git push 的时候,会被拒绝,需要先 git pull
# 但是如果我们确信自己即将要做的操作,可以强制推送
# 慎用,这样会强制推送,会覆盖别人的代码
git push -f origin master 

# 再添加一个远程库的标签
git remote add gitlab git@gitlab.com:abc/blog.git

# 推送到gitlab标签的地址上
git push gitlab master

# 删除gitlab 标签
git remote remove gitlab

# 修改origin标签对应的地址
git remote set-url origin git@github.com:jirengu/blog3.git

# 把 gitlab 标签改名为coding
git remote rename gitlab coding

分支操作

# 列出所有本地分支和远程分支
# 前面带 * 号的,是我们当前所处的本地分支
$ git branch -a

# 创建本地库 dev 分支
git branch dev

# 切换到 dev 分支
# 我们切换分支,就会展现不同分支的文件状态,我理解为不同分支之间是隔离的
git checkout dev

touch b.md
git add .
git commit -am "add b.md"

# 推送到 origin 地址的 dev 分支上
git push origin dev

# 把 dev 分支上的内容合并到当前分支(master) 上,注意要先切换到 master 分支上 
# 此时本地仓库 master 里面的内容就和 dev 一样了,
# 再把当前本地库里的改动推送到远程库(origin)的 master 分支上 
git checkout master
git merge dev
push origin master

当自己和别人改同一个文件的同一个地方,在执行 git pull 时更新本地合并时会出现冲突

  • 修改冲突文件
  • 重新提交

参考:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,406评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,395评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,815评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,537评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,536评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,184评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,776评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,668评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,212评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,299评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,438评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,128评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,807评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,279评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,395评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,827评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,446评论 2 359

推荐阅读更多精彩内容

  • Git 是一个强大的分布式版本管理工具,最初由Linus Torvalds编写,用于 Linux 内核开发的版本控...
    zizi192阅读 851评论 0 1
  • 上天既然安排他拔出我的紫青宝剑,他一定是个不平凡的人,错不了!我知道有一天他会在一个万众嘱目的情况下出现,身披金甲...
    bf7258edb119阅读 1,163评论 0 3
  • 01 金庸先生的“飞雪连天射白鹿,笑书神侠倚碧鸳”这十四部小说都看过,但每每能让我荡气回肠的时光,只属于《天龙八部...
    祝方婷阅读 922评论 1 2
  • 你肯定不知道每一个翻来滚去的夜里 你肯定也没有试过早上醒来就看一个人消息的样子 我多想试着不去联系你 才发现自己做...
    西鸽阅读 202评论 0 0
  • 武侠风新长篇挖坑撒花(*/ω\*) 看官老爷们求轻喷(*/ω\*) 以下正文 ——————————————————...
    Miss巴扎嘿阅读 499评论 0 3