Windows 下 git checkout 时提示 “error: The following untracked working tree files would be overwritten by checkout” 的解决

描述

在 Windows 或者 macOS 系统中,对于已经提交到仓库中的文件修改文件名的大小写,然后又用 git rm 命令将老文件从 Git 仓库删除掉,并保存下新的文件,这个时候,再进行切换分支的操作,就会出现这个提示:

复现

分析

由于 Windows 或者 macOS 系统对于文件名是不区分大小写的,如果在 Git 仓库中应用了 ignorecase 的缺少配置 false,那么 Git 会区分文件名的大小写。

解决

在当前项目目录下执行

然后再切换分支,进行分支合并等操作之后,再执行

删除刚才的配置操作。

参考链接:

  1. git – The following untracked working tree files would be overwritten by checkout – Stack Overflow

PHP 通过 ReflectionMethod 反射类方法获取文档注释返回 false 的解决

问题描述

在公司的测试环境运行以上代码,如果是 CLI 模式,可以输出注释的内容,而如果是 FPM (网页浏览)模式,却输出 bool(false)。

问题解决

问了技术主管,才知道原来是 Opcache 配置项引起的问题。公司测试环境 PHP 开启了 Opcache 扩展,原配置如下:

将 opcache.save_comments=0 改为 opcache.save_comments=1 保存重启 PHP-FPM 进程,即可通过反射获取文档的注释了。

关于 Opcache 的 save_comment 和 load_comments 的含义请参考 PHP 官方文档中的解释:

opcache.save_comment 开启后将脚本文件中的注释内容将会包含到操作码缓存文件中,适用于我所碰到的问题。

opcache.load_comment 开启或者禁用的区别只是应用程序是否会按需加载注释内容,禁用则是按需加载,开启则总是加载。

问题总结

遇到这个问题的时候, 以为是 PHP 版本的问题,我本机的 PHP 5.6 的修订版本号比测试环境的 PHP 5.6 的修订版本号略新一点,打算让运维部门编译一个新版本的 PHP 5.6 到测试服务器上的。还好问了问主管,一下就解决了问题,填补了这个知识盲区。遇问题要多沟通!

Sublime Text 3 配置 Phpcs

 Phpcs 插件介绍

可以为 Sublime Text 编辑器提供代码格式检测的功能,使用以下工具(全部可选):

  • PHP_CodeSniffer (phpcs)
  • Linter (php -l)
  • PHP Mess Detector (phpmd)
  • Scheck (scheck, part of Facebook’s pfff toolchain)

还可以配置自动修复格式的工具:

  • PHP Coding Standards Fixer (php-cs-fixer)
  • PHP Code Beautifier (phpcbf) application

安装步骤

使用 Sublime Text 编辑器的 Package Control (Preferences -> Package Control -> Install Package -> Phpcs) 来安装 Phpcs。

配置

各个配置项的说明可参考 http://benmatselby.github.io/sublime-phpcs/ 的 Configuration 一节。

使用 Composer 安装 PHP Code Sniffer:

安装 PHP CS Fixer:

 下载 PHPMD:

查看 Composer 的 bin 目录的绝对路径:

在 Phpcs 的用户自定义配置文件中加上:

参考链接:

  1. http://benmatselby.github.io/sublime-phpcs/
  2. https://github.com/squizlabs/PHP_CodeSniffer
  3. https://packagecontrol.io/packages/Phpcs
  4. https://github.com/FriendsOfPHP/PHP-CS-Fixer
  5. https://phpmd.org/download/index.html

MySQL 数据库删除表中重复数据

采集数据的时候,由于先期对页面结构的分析不完善,导致采漏了一部分数据。完善代码之后重新运行 Scrapy,又采集了一些重复的数据,搜了下删除重复数据的方法。

N.B. 删除数据表的重复数据时,请先备份数据表。

方法一

方法二

P.S. 当数据表的数据量较多时,建议使用方法二,大大节省时间。

参考链接:

  1. Delete all Duplicate Rows except for One in MySQL? [duplicate]
  2. sql – Remove duplicate rows in MySQL – Stack Overflow

输入框中输入或者粘贴有中文逗号自动转换为英文逗号

在 input 标签上使用 onkeyup 和 onafterpaste 属性来实现需要的效果:

统计当前目录下的文件数

可以使用 ls -1 | wc -l  来计算当前目录下的文件个数,这条命令是使用 wc  来统计 ls -1  输出的行数(-l),它不会统计隐藏文件(dotfiles)。

注意: 如果使用 ls -l (这里是 “L” 的小写字母) 命令的话统计出来文件个数将比实际数量多 1。谢谢 Kam Nejad 指出来。

如果只想统计文件且不包含符号链接(这只是一个可以做什么的另一个例子),请使用 ls -l | grep -v ^l | wc -l  命令(这次是 “L” 的小写字母,因为我们需要一个 “长”(long)列表)。grep 命令匹配任何以 “l” 开头(表示一个 link)的行,并且忽略掉它们(-v)。

相对速度:”ls -1 /usr/bin/ | wc -l” 命令在一台 unloaded 486SX25 上花费了 1.03 秒(系统中 /usr/bin 目录有 355 个文件)。”ls -l /usr/bin/ | grep -v ^l | wc -l” 命令花费了 1.19 秒。

 

参考链接:

  1. Counting Files in the Current Directory

MySQL 中根据已存在的表创建一张新表的方法

基于已存在表的结构创建另一个表:

 

复制表的所有数据:

 

CREATE TABLE 的官方文档链接。注意关于 LIKE 选项的描述:

使用 LIKE 基于另一个表的定义来创建一个空表,新表将包含原始表所有列的属性及索引:

使用 CREATE TABLE new_table LIKE original_table 来创建新表,新表将使用和原始表相同版本的表存储格式(table storage format)。在原始表上需要有 SELECT 权限。

LIKE 只能用于基表(base tables),不能用于视图(views)。

CREATE TABLE … LIKE 语句不会保留原始表自定义的表选项,数据文件夹(DATA DIRECTORY)或者索引文件夹(INDEX DIRECTORY)以及外键的定义(foreign key definations)。

 

参考链接:

  1. Create table in MySQL that matches another table? – Stack Overflow

iframe 怎么设置占全屏幕高度 100%

方法1 – Viewport-percentage lengths(视窗百分比长度)

支持的浏览器中,你可以用 viewport-percentage lengths,如:height: 100vh。
100vh 表示整个视窗的高度,100vw 表示整体视窗的宽度。

示例:

方法2 – Fixed positioning(固定定位)
这个方法比较直观,给元素设置 fixed 定位,并且设置 100% 的宽和高。
示例:

方法3
设置 body、html、iframe 三者的高度为 100%。
示例:

 

PS:推荐使用度方法 2,没有方法 1 那激进,也不像方法 3 需要设置 html, body 元素的高度。

 

参考链接:

  1. javascript – Full-screen iframe with a height of 100% – Stack Overflow