0%

git rebase 命令使用

git rebase命令在另一个分支基础之上重新应用,用于把一个分支的修改合并到当前分支,通常在对一个分支进行“变基”操作时使用。这意味着改变这个 branch 的初始 commit(我们知道 commits 本身组成了一颗树),它会在新的 base 上一个一个地运行这个分支上的所有 commits。

使用语法

1
2
3
4
5
git rebase [-i | --interactive] [<options>] [--exec <cmd>]
[--onto <newbase> | --keep-base] [<upstream> [<branch>]]
git rebase [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>]
--root [<branch>]
git rebase (--continue | --skip | --abort | --quit | --edit-todo | --show-current-patch)

示例

假设存在以下历史,有两个分支一个是master,一个是topic, 当前分支是“topic”:

1
2
3
      A---B---C topic
/
D---E---F---G master

如果我们对topic变基操作会变成一下结果:

1
2
3
              A'--B'--C' topic
/
D---E---F---G master

这样能够维护一个清晰的语义化的暴露给大众的变更历史。

变基操作过程

  • 第一步,确认自己所在分支
  • 第二步:确定要 rebase 的 commit 的数量:
    • 使用 git log 命令,查看 git 操作记录,确定要 rebase 的 commi 数量。
  • 第三步:确定 rebase 的 commit 数量,执行命令
    git rebase -i HEAD^^
  • 第四步:进入 rebase 的 vi 编辑模式
1
2
3
4
5
6
7
* p, pick = use commit
* r, reword = use commit, but edit the commit message
* e, edit = use commit, but stop for amending
* s, squash = use commit, but meld into previous commit
* f, fixup = like “squash”, but discard this commit’s log message
* x, exec = run command (the rest of the line) using shell
* d, drop = remove commit

注意,只需要,在第二个(此处是在两个 commit 合并成一个 commit 的情况下执行的!)的 commitId 前面,将 pick 修改为 s(编译器会自动将 s 变成 squash),然后,wq!退出保存即可。

  • 第五步:在第四步顺利的情况下,可以直接 git push -f 即可。
  • 但是如果第五步失败了!
    • 执行以下的操作!
    • 继续执行 git rebase -i HEAD^^ –allow-empty
      • 此处的允许空,是根据提示报错执行的,如果继续报错,但是其实可以看见,提示会变成,使用命令 git rebase —continue,继续执行。
      • 此时因为执行过 git rebase —continue ,则继续进入 vi 编辑模式,会看见,有两个对应 commitId 的 message。
    • 可以开始修改自己的 message,然后保存退出。
    • 执行命令 git log,发现最新的 commit 已经变换
    • 执行命令 git status,查看当前 git 的命令
    • 最后执行 git push -f
    • 查看远程的 GitHub 的想对应的 pr 界面,发现 commit 已经变换。

简介

本文讲解了如何在Kubernetes上开发、部署和测试Container Storage Interface(CSI)驱动程序。

Container Storage Interface(CSI)是将任意块和文件存储系统暴露给容器编排系统(COs,如Kubernetes)上的容器化工作。使用CSI第三方存储提供商可以编写和部署在Kubernetes中暴露新存储系统的插件,而无需触及Kubernetes的核心代码。

Kubernetes版本

Kubernetes CSI规范兼容 状态
v1.9 v0.1.0 Alpha
v1.10 v0.2.0 Beta
v1.11 v0.3.0 Beta
v1.13 v0.3.0, v1.0.0 GA
阅读全文 »

CAS操作原理分析

CAS:Compare and Swap, 翻译成比较并交换。
在Java中,java.util.concurrent包中借助了CAS实现了线程同步的一种乐观锁,区别于synchronized(悲观锁),不会导致需要锁的线程都挂起。

在Java中也提供了这种操作类,例如:

  • AtomicBoolean
  • AtomicInteger
阅读全文 »

CSI Volume Plugins in Kubernetes Design Doc

术语

术语 解析
Container Storage Interface (CSI) 一种试图建立行业标准接口的规范,容器编排系统(COs)可以用来将任意存储系统暴露给它们的容器化工作负载。
in-tree Kubernetes 核心代码库中的代码。
out-of-tree Kubernetes 核心代码库之外的代码。
CSI Volume Plugin 核心代码库中一个新的volume插件,用作适配器,支持第三方Kubernetes CSI volume驱动程序。
CSI Volume Driver 第三方CSI插件驱动实现,可以用过CSI Volume Plugin在Kubernetes中使用。
阅读全文 »