终端使用http/https代理

针对Linux、OSX

# socks5
export all_proxy=socks5://user:password@host:port
# http/https
export http_proxy=http://user:password@host:port
export https_proxy=http://user:password@host:port

ssh使用socks5代理访问内网

不带密码

ssh -o ProxyCommand="nc -X 5 -x proxy_host:proxy_port %h %p" user@host -p port

使用密码

# osx需要安装ncat: brew install nmap
ssh -o ProxyCommand="ncat --proxy proxy_host:proxy_port --proxy-type socks5 --proxy-auth user:password %h %p"  user@host -p port

查看Python包目录

help('django')

或者

import django
import sys
sys.modules['django']

Python非PIP管理的包加入PythonPath

  • 方法1:使用PYTHONPATH环境变量
    • 不推荐:原因是优先级过高,可能覆盖系统包
  • 方法2:在site-packages目录价添加一个.pth目录(推荐)
    • Unix系:/usr/local/lib/python2.7/site-packages/my.pth

npm权限问题

npm 全局安装最好使用--unsafe-perm选项

SSH直接执行脚本环境变量的问题

Hadoop Spark这种通过SSH启动集群的分布式系统可能出现的问题

参见 Linux Shell 初始化文件 —— 环境变量写在哪里?

mac 自动挂载NTFS U盘

参考

brew cask install osxfus
brew install ntfs-3g
# 如果报Link错误,执行如下
# mkdir /usr/local/sbin
# sudo chown sunben /usr/local/sbin
# brew link ntfs-3g

关机;启动按住 command+R 进入恢复模式

sudo mv "/Volumes/Macintosh HD/sbin/mount_ntfs" "/Volumes/Macintosh HD/sbin/mount_ntfs.orig"
sudo ln -s /usr/local/sbin/mount_ntfs "/Volumes/Macintosh HD/sbin/mount_ntfs"

重启进入系统即可

git 技巧

基本概念

git禁用提交前检查

git commit -m "message" --no-verify

撤销add

  • git reset HEAD .或者 git reset

在不更改工作区的情况下发创建分支

  • git checkout -b 分支名

场景:撤销几次提交,将其合并成一次提交

  • git log查看要回退的hash
  • git reset --soft hash 或 者 git reset --soft head~1(表示回退到head-1版本)
  • 然后在add commit
  • 撤销reset --soft :做不到,只能重新commit被撤销的提交记录是找不到的

场景:正在开发新功能但是不能上线,此时线上版本出现bug急需修复

  • 方案1:
    • 创建新分支,提交到新的分支上,然后切换回线上分支再修改
  • 推荐方案(参考git stash
    • 如果有新添加的,先add 新文件
    • 放到stash中:git stash save "消息"
    • 此时工作区就是干净的了,然后进行bug修复,提交上线
    • stash的内容取回工作区git stash pop
    • 清理暂存区git reset HEAD .

push前git pull

  • git pull 不推荐方案 相当于 git fetch && git merge
  • git pull --rebase 推荐 相当于git fetch && git rebase 如果发生冲突:
    • 解决冲突
    • 然后git add .
    • 最后git rebase --continue
    • 如果反悔执行git rebase --abort

还原历史中的某一次提交revert

将会产生一个新的提交

  • git revert hash 或者 git revert HEAD 或者 git revert HEAD^,填写提交信息
  • 如果发生冲突(还原的那次提交之后的提交有修改),处理冲突,然后git add .
  • 最后git commit,不要添加提交信息
  • 如果后悔执行git revert --abort

还原历史上的操作

注意:add和工作区的数据无法恢复

  • git reflog 查看记录
  • git reset --hard hash 恢复

两个核心分支冲突,无法提交 MR

  • 假设 master 和 dev 分支都是受保护的
  • 按照规定应该 master 分支的变更只允许 dev -> master
  • 某时刻,我们提交了个一个 bugfix -> master,导致 dev 和 master 产生了冲突

    git checkout master & git pull
    git checkout dev & git pull
    git checkout -b fix-dev-master
    git merge master #  git rebase master # 理论上 rebase 应该也行
    # 处理冲突,执行如下命令
    git add .
    git merge --continue # git rebase --continue # 理论上 rebase 应该也行

VSCode Go开发环境

参见

VSCode Python开发环境

参见

VSCode支持VIM插件

  • 搜索安装VIM扩展
  • 安装输入法选择器 https://github.com/daipeihust/im-select/tree/master/im-select-win
    • MAC curl -Ls https://raw.githubusercontent.com/daipeihust/im-select/master/install_mac.sh | sh
  • 配置输入法(mac如下)

    {
    "vim.autoSwitchInputMethod.defaultIM": "com.apple.keylayout.ABC",
    "vim.autoSwitchInputMethod.obtainIMCmd": "/usr/local/bin/im-select",
    "vim.autoSwitchInputMethod.switchIMCmd": "/usr/local/bin/im-select {im}",
    "vim.autoSwitchInputMethod.enable": true,
    }

配置ABC输入法支持长按连续输入

defaults write -g ApplePressAndHoldEnabled -bool false # 然后重启

VSCode VIM插件独有的命令

  • gd 相当于vim中的ctrl+] 跳转到定义
  • gb 多光标模式,找到下一个和当前单词匹配的单词并添加光标
  • gh 显示当前位置的悬浮提示框

VSCode 全局使用代理(包括socks5)

  • brew install proxychains-ng 安装 proxychains
  • 配置proxychains,vim /usr/local/etc/proxychains.conf 添加例如 socks5 ip地址 8011
  • Mac需要关闭SIP
    • 重启长按cmd+R进入恢复模式
    • 在命令行中输入csrutil disable,然后重启
  • 使用proxychains4 /Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code 打开VSCode

VSCode 远程开发

参见 Remote Developer

创建 Maven Wrapper

进入 Maven 项目根目录

mvn -N io.takari:maven:wrapper

配置代理

.mvn/wrapper/maven-wrapper.properties

distributionUrl=https://mirrors.huaweicloud.com/repository/maven/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
wrapperUrl=https://mirrors.huaweicloud.com/repository/maven/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar

.mvn/wrapper/settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
  <profiles>
  </profiles>
</settings>

脚本使用

./mvnw clean package -s .mvn/wrapper/settings.xml -DskipTests