menu Chancel's Blog
rss_feed lightbulb_outline

我的笔记

Git - 删除远程仓库分支并提交新分支

Git删除远程仓库分支并提交新分支

# 删除远程分支develop
git branch -r -d origin/origin/develop

# 推送当前分支到远程分支develop
git push origin :origin/develop

Develop Base Git 2021-02-04 11:35:02

Git - 忽略规则和.gitignore规则不生效解决方案

把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被追踪的文件

如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态)

最后再次提交即可

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

Develop Base Git 2021-02-04 11:32:33

Git - "fatal: unable to auto-detect email address "

Git Push的时候出现警告“fatal: unable to auto-detect email address ”

只需要更改当前仓库下的.git/config文件,在其中加入

[user]
    email = xxx
    user = xxx

即可消除这个警告

Develop Base Git 2021-02-04 11:31:11

Python - 版本管理Pyenv使用指南

pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.

官方仓库 - https://github.com/pyenv/pyenv

pyenv是目前管理Python版本的流行方案,对于一台PC上存在多个Python版本的最佳管理方案之一,以下安装基于 Debian10

安装pyenv

sudo apt -y install git gcc libgdbm-dev make patch zlib1g.dev libssl-dev libsqlite3-dev libbz2-dev libreadline-dev

curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

配置环境变量,这里设定是在当前用户下(Shell环境是ZSH,如果是Bash环境请修改对应 bashrc文件)

vim ~/.zshrc

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

以下是常用命令

# 所有可安装的版本列表
pyenv install -list    

# 下载制定版本的Python
pyenv install 3.6.9

# 查看当前已下载的版本
pyenv versions

# 设置系统的Python版本
pyenv global 3.6.9

# 设置当前目录为某个Python版本
pyenv local 3.6.9

# 更新pyenv
pyenv update

注:Visual Studio Code会自动识别当前目录的pyenv指定的版本,在Terminal进入该目录时也会自动切换到该目录的Python版本

如果你希望的是在同一机器上同一个Pyhon版本不同项目的环境不相同,可参考 virtualenv的使用

Develop Base Python 2021-01-25 00:05:42

Inno Setup - Windows打包程序配置文件指南

Inno Setup是Jordan Russell和Martijn Laan的Windows程序的免费安装程序

Inno Setup is a free installer for Windows programs by Jordan Russell and Martijn Laan. First introduced in 1997, Inno Setup today rivals and even surpasses many commercial installers in feature set and stability.

下面是仅供参考的配置文件,请注意时效性,随着Inno Setup版本更迭配置文件中的部分信息可能失效

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "HelloWorld"
#define MyAppVersion "0.9"
#define MyAppPublisher "chancel's company"
#define MyAppURL "https://www.chancel.ltd/"
#define MyAppExeName "helloworld.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{8435E930-A931-4967-8844-46X547X3BD8D}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={userappdata}\{#MyAppName}
DisableProgramGroupPage=yes
DisableDirPage=no
;安装包的输出目录
OutputDir=D:\inno\output\{#MyAppName}
OutputBaseFilename={#MyAppName}_v{#MyAppVersion}
; 安装包的图标
;SetupIconFile=D:\inno\input\ico\_logo.ico
Compression=lzma
SolidCompression=yes
;此处 限制Windows最低版本为Windows 7
MinVersion=0.0,6.0


[Languages]
;安装语言许选择
Name: "chinesesimplified"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"

[Tasks]
;创建桌面快捷键
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone

[Files]
;打包源文件与要安装的目标文件夹,DestDir需要参考官网文档,有多个枚举可选择
Source: "D:\inno\input\Release\*"; DestDir: "{app}\"; Flags: recursesubdirs ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
;图标选择
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
;程序安装成功后入口执行程序
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

Develop Base 2021-01-20 16:02:28

MariaDB - "'Access denied for user 'root'@'localhost"

安装的MariaDB登录root账户

chancel@ubuntu1804-server:~$ mysql -uroot -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

chancel@ubuntu1804-server:~$ mysql -V
mysql  Ver 15.1 Distrib 10.1.47-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

登录失败,确认过Root的密码没有错,使用 sudo mysql -p可以登录,确认是Root用户不允许使用密码登录

参考ERROR 1698 (28000): Access denied for user 'root'@'localhost'解决方案一,可以设置root用户允许使用密码登录

chancel@ubuntu1804-server:~$ sudo mysql -u root

MariaDB [(none)]> USE mysql;
MariaDB [mysql]> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
MariaDB [mysql]> FLUSH PRIVILEGES;
MariaDB [mysql]> exit;

再次尝试,可以使用密码登录root账户

Develop Base Database 2021-01-19 11:48:54

Git - 快速使用Git标签标记发布版本

像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。

Git支持两种标签 轻量标签与附注标签(lightweight/annotated),版本标签推荐使用 附注标签

给特定Commit打标签的Git语法如下

# 附注标签
git tag -a [version] -m [comment] [commitID]
# 轻量标签
git tag [version] -m [comment] [commitID]

以实际例子来看看,首先假设当前要提交的版本号为V2.0.0,当前的提交CommitID为06551e1fac

给06551e1fac打上标签

# 附注标签例子
git tag -a v2.0.0 -m "V2.0.0 Version" 06551e1fac
# 轻量标签例子
git tag v2.0.0 -m "V2.0.0 Version" 06551e1fac

标签创建后只存在于本地,如果需要推送到远程仓库,那么需要显式推送

# 单次推送2.0.0标签
git push origin v2.0.0
# 推送所有的标签
git push origin --tags

其他常见操作如下

签出标签(PS:常见于修复旧版本的问题,但请注意签出后本地仓库状态处于 detached 状态,所以要修复旧版本中的错误,建议签出并新建为分支)

# 签出2.0.0版本并创建为v2.0version分支
git checkout -b v2.0version v2.0

删除标签

# 删除本地标签
git tag -d v2.0.0
# 删除远程仓库标签
git push origin --delete v2.0.0

查看标签

# 列出标签列表
git tag
# 查看与2.0版本相关的标签
git tag -l v2.0.0
# 查看标签的详细内容
git show v2.0.0

Develop Base Git 2020-11-04 08:01:40

Linux - 硬盘测速命令技巧

假设新购入一块SSD硬盘/机械硬盘并接入Linux系统中,通过dd & hdparm两个Linux自带工具可以快速测出该硬盘的性能水准

这里暂定接入的设备为/dev/sdc

hdparm测速方法

sudo hdparm -tT /dev/sdc

// 读速输出如下
/dev/sdc:
 Timing cached reads:   24384 MB in  1.99 seconds = 12263.71 MB/sec
 Timing buffered disk reads: 454 MB in  3.00 seconds = 151.25 MB/sec

hdparm的可以简单快捷的测出硬盘的读速,但这个测试方法过于简单,如果需要更确切的性能数据,更推荐使用dd

dd的测速方法

sudo dd if=/dev/zero of=/tmp/speedfile bs=8k count=10000 oflag=direct

// 写入速度输出如下
10000+0 records in
10000+0 records out
81920000 bytes (82 MB, 78 MiB) copied, 7.25587 s, 11.3 MB/s

sudo dd if=/tmp/speedfile of=/dev/null bs=8k count=10000 

// 读取速度输出如下
10000+0 records in
10000+0 records out
81920000 bytes (82 MB, 78 MiB) copied, 0.702369 s, 117 MB/s

dd测速命令解释

首先是两个系统自带设备(即上面测试用到的两个本地设备)

  • /dev/null:空设备,写入该设备不会产生IO(形似黑洞,写入即被丢弃),所以可以用来做新盘测试读速的写入对象
  • /dev/zero:零设备,可以无限提供空字符,一般用来生成特定大文件的虚拟设备

另外类似的设备还有/dev/random、/dev/urandom之类的,有兴趣可自行搜索

参数

  • bs:一次写入大小,block size
  • count:写入次数,一般联合bs进行测试
  • skip(可选):原文件读取的起始位置(单位与bs一致)
  • seek(可选):目标文件写入的起始位置(单位与bs一致)
  • oflag:表示写入的符号标志(通常代表不同的写入方式),direct表示直接I/O写入而不使用缓存

dd测速忽略了硬盘缓存等特性,测试的数据不够严谨,但作为个人测速使用相对还是比较直观的

Develop Base Linux 2020-05-05 22:56:16

Cent7OS安装指定版本MySQL方法

MySQL有许多版本,分为付费跟收费的版本,简单罗列如下

  • MySQL Community Server
    • 社区版本,开源免费,但不提供官方技术支持。
  • MySQL Enterprise Edition
    • 企业版本,需付费,可以试用30天。
  • MySQL Cluster
    • 集群版,开源免费。可将几个MySQL Server封装成一个Server。
  • MySQL Cluster CGE
    • 高级集群版,需付费。
  • MySQL Workbench(GUI TOOL)
    • 一款专为MySQL设计的ER/数据库建模工具。它是著名的数据库设计工具DBDesigner4的继任者。
  • MySQL Workbench OSS
    • MySQL Workbench社区版
  • MySQL Workbench SE
    • MySQL Workbench商用版
  • MySQL Community Server
    • 开源免费的,这也是我们通常用的MySQL的版本。根据不同的操作系统平台细分为多个版本

安装指定版本的方法也很简单

  1. MySQL官网下载合适系统版本的repo库

  2. 将下载的repo包安装到仓库

    # 先查看repo包包含哪些包
    rpm -qpl mysql80-community-release-el7-1.noarch.rpm
    # 安装repo
    rpm -ivh mysql80-community-release-el7-1.noarch.rpm
    
  3. 指定我们要的版本,编辑完成后保存即可

    # enabled=0禁用版本,enabled=1启用指定版本
    vim /etc/yum.repos.d/mysql-community.repo
    
  4. 查询已经启用的版本

    yum repolist enabled | grep mysql
    
  5. 如果输出里面有你要的版本,那就直接安装就OK了

    yum install mysql-community-server
    

Develop Base Linux 2020-01-08 14:33:37

Mariadb - 配置远程访问显示"connect reset"错误

今天在内网机器上搭建一个测试MariaDB数据库,按照习惯配置远程访问

CREATE USER chancel@chancel IDENTIFIED BY 'chancel';
GRANT ALL PRIVILEGES ON chancel_api.* TO 'chancel'@'192.168.11.13' IDENTIFIED BY 'chancel' WITH GRANT OPTION;

然后在远程机器上访问到时候弹出了connect reset,这很明显说连接到端口就被拒绝了,看了下防火墙也是打开3306的默认端口,猜测下可能是MariaDB的问题

查查3306端口的情况

chancel@chancel-nas /etc/mysql/mariadb.conf.d » netstat -ntulp | grep 3306
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      127.0.0.1:3306            0.0.0.0:*               LISTEN 

显然说db绑定了127.0.0.1的本地端口导致外网连接不了,找一下MariaDB到配置文件,编辑‘127.0.0.1’并改成'0.0.0.0'即可

chancel@chancel-nas ~» vim  /etc/mysql/mariadb.conf.d/50-server.cnf

...
bind-address        = 0.0.0.0 # 编辑‘127.0.0.1’并改成'0.0.0.0'即可
...

Develop Base Database 2020-01-07 17:05:19

1 of 2 | A total of 17