git 命令行查看文件的某个版本历史

我一般使用可视化的 ui 工具来查看某个文件的历史,但也免不了有的场景只有命令行工具。

1. 使用 git log 查看历史记录并获取前一个版本的 commit hash

git log -- file_name
git log --stat  #展示每笔提交更详细的信息

这会显示该文件的提交历史记录,可以看到每次修改的 commit hash。

获取到 commit hash 后,使用以下命令查看文件的上一个版本:

git show commit_hash:file_name

2. 快速查看某个文件的上一个版本

如果只想查看上一个版本,而不想手动查找 commit hash,可以使用下面的命令(HEAD^ 指上一个提交):

git show HEAD^:file_name

这个命令直接展示文件在上一个提交时的内容。

3. 对比文件与上一个版本的差异

如果想要比较文件当前版本与上一个版本的差异,可以使用 git diff:

git diff HEAD^ HEAD -- file_name

linux 使用 unzip 解压的中文乱码问题

来自windows下的解压乱码真是痛:

image-20211220110600679

zip格式没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,Linux下的默认编码是UTF8。

可以使用 unzip-iconv 这个补丁包,指定解压的编码格式。

一、安装unzip-iconv补丁

$ wget https://github.com/ikohara/dpkg-unzip-iconv/archive/refs/heads/main.zip
$ unzip main.zip
$ cd main
$ make source
$ sudo make build-dep
$ make
$ sudo make install

更详细的说明参考GitHub上的项目信息: https://github.com/ikohara/dpkg-unzip-iconv

二、使用

unzip -O cp936 xxx.zip

参考帮助


增加docker的shm(共享内存)大小

接着上一篇《Linux下的 /dev/shm》,应用在docker中也会使用到容器里的shm。但创建 docker 的时候默认shm大小为64M,如果应用使用了比较大的shm,则很可能会崩溃。此时解决有2个办法:

  1. 挂载宿主机的shm,完美。

    services:
      app:
        image: kelvinblood/app
        ...
    	volumes:
      	- /dev/shm:/dev/shm
    
  2. 运行。

    services:
      app:
        image: kelvinblood/app
        ...
        shm_size: 512mb
        shm_size: '2gb'
    

    或者:

    docker run -it --shm-size="1g" ubuntu
    

selenium 裸安装备忘

  • 因为弄的standalone-chrome-debug,chrome老是崩溃,愤而裸机安装。
  • 因为裸机安装的hub/standalone或者hub/node,chromedriver启动的chrome老是黑屏,愤而用容器的node。
  • 用容器的node,依旧会chrome崩溃

由于上述几个原因,我在本机安装了 selenium,希望能更了解一些selenium,便有了本文。虽然最后我从其他地方解决了遇到的问题,这篇文章也就没有了实际意义,但还是记录下来。

一、安装java

selenium官方没有说明java使用的版本,我决定使用最新的版本。

image-20211214161118210

二、安装Selenium Grid

image-20211214163037163

三、安装chrome和chrome driver

四、4种不同的方式运行Grid

  • Standalone

    java -jar selenium-server-<version>.jar standalone
    java -jar selenium-server-4.1.0.jar standalone --host 0.0.0.0 --port 4445
    
  • Hub and Node

    java -jar selenium-server-4.1.0.jar hub --host 0.0.0.0 --port 4445
    java -jar selenium-server-4.1.0.jar node
    java -jar selenium-server-4.1.0.jar node --detect-drivers true --publish-events tcp://127.0.0.1:4442 --subscribe-events tcp://127.0.0.1:4443
    

    hub/node 用容器化的方式弄

    docker pull selenium/hub:4.1.0
    docker pull selenium/node-chrome:96.0
    
      node-chrome:
        image: selenium/node-chrome:96.0
        restart: always
        network_mode: bridge
        container_name: node-chrome
        ports:
          - "5901:5900"
        environment:
          SE_EVENT_BUS_HOST: 192.168.1.133
          SE_EVENT_BUS_PORT: 4445
          SE_EVENT_BUS_PUBLISH_PORT: 4442
          SE_EVENT_BUS_SUBSCRIBE_PORT: 4443
          NODE_MAX_SESSION: 4
          NODE_MAX_INSTANCES: 4
    
  • Distributed

  • Docker

访问地址:http://localhost:4445/

image-20211214171806096

chrome 崩溃

https://developers.google.com/web/tools/puppeteer/troubleshooting#tips

默认情况下,Docker 运行一个/dev/shm共享内存空间为 64MB的容器。这对于 Chrome来说 通常太小,并且会导致 Chrome 在渲染大页面时崩溃。

要修复,请运行容器 docker run --shm-size=1gb以增加/dev/shm.

从 Chrome 65 开始可以使用--disable-dev-shm-usage标志启动浏览器。这会将共享内存文件写入/tmp而不是/dev/shm.

const browser = await puppeteer.launch({
  args: ['--disable-dev-shm-usage'],
});

尤其是如果你的容器需要跑在kubernetes上,最好还是以添加参数--disable-dev-shm-usage 这种方式运行了。