越努力 越幸运

Git submodule 使用记录

一、问题背景

最近在阅读 grpc 相关的代码,在阅读前需要先让代码跑起来,然后跟着 INSTALL 里的说明进行编译,里面有这样的步骤:

git submodule update --init

这是第一次遇见 gitsubmoduel 参数,从参数名字可以大概知道是要干什么事,但是具体是如何做的并不知道,所以有必要认真阅读 gitsubmoduele 参数相关的资料来了解其使用。

二、使用详情

先来看看命令 git submodule help 输出的信息:

thinkerou@MacBook-Pro-thinkerou:~/Documents/thinkerou.github.io$ git submodule help
usage: git submodule [--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--] <repository> [<path>]
or: git submodule [--quiet] status [--cached] [--recursive] [--] [<path>...]
or: git submodule [--quiet] init [--] [<path>...]
or: git submodule [--quiet] deinit [-f|--force] [--] <path>...
or: git submodule [--quiet] update [--init] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--reference <repository>] [--recursive] [--] [<path>...]
or: git submodule [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
or: git submodule [--quiet] foreach [--recursive] <command>
or: git submodule [--quiet] sync [--recursive] [--] [<path>...]

接下来就以 grpc 代码来作为示例,在 grpc 源代码目录下有这样一个特殊的文件:

thinkerou@MacBook-Pro-thinkerou:~/Documents/opensource/grpc$ ls -la
-rw-r--r--   1 baidu  staff     665  3 22 20:27 .gitmodules 

从文件名可以看出是跟本文讨论的 submodule 相关的。

更新 PHP5 扩展到 PHP7(NG) 记录

一、升级扩展到 PHP7 记录

最近在学习 PHPgrpc 以及 PHP(PHP7) 扩展编写,但是由于 PHP7 内核更新,扩展接口也有很大变动,先前基于 PHP5 编写的扩展并不能直接基于 PHP7 进行编译安装,需要修改一定代码才能编译通过。

在更新 grpc php 扩展到 PHP7 过程中记录的接口变化,以 GitHub 项目形式来记录。

GRPC 入门

一、开始 grpc

最近准备开始看看 grpc 相关代码,那首先得让其跑起来,以下记录安装步骤:

注:系统为 mac

1. 安装 grpc core

主要是修改 url 路径,否则会被强。

clone 代码

修改 .gitmodules 和 .git/config 里 boringssl 的url为:https://github.com/google/boringssl.git

运行 git submodule update –init 下载 third_party 文件

make

sudo make install

如此,会在 /usr/local/lib/ 目录下产生 libgrpc.alibgrpc.dylib 等文件。

Python 深浅拷贝

一、Python 拷贝现象

先看一段代码:

>>> a = [1, 2, 3]
>>> b = a
>>> b.append(4)
>>> b
[1, 2, 3, 4]
>>> a
[1, 2, 3, 4]
>>>

代码的原意是,变量 b 从变量 a 处拷贝后,然后修改 b 而不改变原来的变量 a 的值;但事实是,原变量的值却变了!

问题现象所涉及到的点就是:Python 的对象赋值和深浅拷贝

在 Python 中赋值语句总是建立对象的引用值,而不是复制对象,这样看来 Python 变量更像是指针而不是数据存储区域。

继续看如下代码:

>>> a = [1, 2, 3]
>>> a[1] = a
>>> a
[1, [...], 3]
>>>

这段代码的本意是想给 a[1] 重新赋值为 [1, 2, 3],但是却死循环了([...]代表死循环)。

因为前面说过,Python 里没有复制对象,而是建立对象的引用值,即是类似指针操作,所以前述代码即是自己指向自己的指针,所以会导致死循环。

Go 语言入门

一、问题背景

二、解决方案

三、参考资料