第8章 tools

8.1 git 和 github

  • push到github的时候每次都需要输入用户名密码

    首先,克隆到本地的时候选择ssh方式

    git clone git@github.com:<repo>
    
    ## 如果本地已经选择https方式克隆,可以先删除原来的远程仓库,重新添加
    ## ssh方式
    # 查看本地clone方式
    git remote -v 
    # 删除远程仓库
    git remote rm origin
    # 重新添加
    git remote add origin git@github.com:<repo>

    然后本地生成ssh密匙添加至github账户,获得访问github权限,详细步骤参考 这里

    # 一路回车,在~/.ssh文件夹下生成了id_rsa文件
    ssh-keygen -t rsa -C "<github账户邮箱"
    # 拷贝~/.ssh/id_rsa.pub到github账户进行设置

    最后push即可

    git push --set-upstream origin master
  • 修改commit的message

# 想要修改的commit的父提交hash值
git rebase -i <commit_hash>
  
# 修改要修改message行首的pick为r(reword),然后修改该条message,保存退出即可
  
# 如果同时修改github仓库的commit,强制push即可
git push -f
  • 显示某一次提交中某个文件的变化
git log <commit_hash> <file_name>
  • 删除远程仓库(如github)的错误提交,在本地处理好之后,如删除错误提交,然后强制push到远程进行修改
git push --force
  • 删除远程分支
git push origin --delete <remote_branch>
  • 修改本地仓库关联的远程仓库,提交修改至另一个远程仓库

    git remote set-url origin https://github.com/yiluheihei/beginr.git
  • 删除本地 untracted files

    # 查看哪些文件将被删除
    git clean -n 
    
    # 删除文件
    git clean -f
    
    # 删除文件和文件夹
    git clean -f -d
    
    # 删除 ignore 的文件
    git clean -f -X
    
    # 删除 ignore 和非 ignore 文件
    git clean -f -x
  • unstage git add的文件

    git reset HEAD <file>
  • 忽略本地文件修改

    # 若文件状态为unstage
    git checkout <file>
    
    # 若文件已经通过`git add` stage,首先文件状态修改为unstage
    git reset HEAD <file>
    git checkout <file>
  • 拉取远程分支时保持本地修改

    # 备份当前工作区内容,从最近一次提交中读取内容
    git stash
    # 拉取远程分支内容
    git pull <remote branch>
    # 从stash中读取备份的内容
    git stash pop
  • 远程仓库已经有新的commit,在本地开发的时候没有pull到本地,就直接进行修改并 commit,这时候再push到远程仓库就会提示远程仓库中有本地不存在的commit。这时候就 需要在远程仓库基础上merge本地的最新commit

    # 首先抓取远程仓库数据
    git fetch
    
    # 然后在本地分支内,在origin仓库的基础上变基提交,如果没有冲突,则直接基于远程
    # 仓库合并了本地提交。如果有冲突,则解决冲突后合并
    git rebase origin/master
  • 删除已经提交的文件,并添加到ignore

# 从版本控制中的index中删除该文件
git rm -r --cached <file>

# 该文件添加至ignore,然后commit
git commit
  • 恢复已经push到远程仓库的误删的文件
# 找到误删文件的commit
git log --diff-filter=D -- <filename>

# 恢复文件, ~n表示该commit的第n个祖先
git checkout <commit>~1 -- <filename>
  • 查看仓库中代码行数

    参考这里

    git ls-files | xargs wc -l
    # R 代码行数
    git ls-files | grep '.R$' | xargs wc -l
  • windows下命令行git中文显示乱码

    设置环境变量LESSCHARSET=utf-8

8.2 hugo

  • 基于hugo采用blogdown建站的时候出现错误panic: BUG: Expected valid escape code after \, but got '\r'.

    是由于配置文件config.toml中采用多行字符中"""的换行符引起的\,去掉换行符即 可,参考.

8.3 docker

  • 安装(centos)

    curl -sSL get.docker.com  -o  get-docker.sh
    # 可选择合适的源
    sh get-docker.sh --mirror Aliyun
    
    ## 启动docker
    sudo systemctl enable docker
    sudo systemctl start docker
    
    ## docker 默认只能root用户才能运行
    ## 可以把需要用docker的用户加入docker用户组
    sudo usermod -aG dokcer $USER
    # 以docker 用户组登入
    newgrp docker
  • docker 配置国内源

    参考,配置 文件/etc/docker/daemon.json中加入中科大源。

    {
      "registry-mirrors": 
        ["https://docker.mirrors.ustc.edu.cn/"]
    }

    然后重启docker服务sudo systemctl restart docker。同时也可以添加阿里云源, 方法是注册阿里云开发账户后,访问https://cr.console.aliyun.com/#/accelerator, 点击镜像加速器,就看到加速器地址,添加进去即可。

  • docker 中运行含图形界面的程序

    参考这里这里

    # 1. 赋予其他用户访问本机x server的权利
    xhost local:root # xhost +
    
    # 挂载 X11 至docker
    docker run -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY <the image>

8.4 conda

  • 设置清华源,参考

    channels:
      - conda-forge
      - bioconda
      - defaults
    show_channel_urls: true
    channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
    default_channels:
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
    custom_channels:
      conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  • 安装 biconda 上的工具的时候,可能出现软件版本冲突错误: UnsatisfiableError: The following specifications were found to be incompatible with each other: Output in format: Requested package -> Available versions.

    可能是 conda 中 channels 顺序设置错误,按照 bioconda 文档中建议的顺序(conda-forge > bioconda > defaults)设置. 或参考这里.

Output in format: Requested package -> Available versions

  • macOS 10.14 Mojave,conda安装包的时候设计到qt就出现错误,如conda-forge::qt-5.9.7-h93ee506_1'. PermissionError(1, 'Operation not permitted')

    解决方法在此

    # for base:
    cd ~/anaconda3/bin
    ls *.app
    rm -rf *.app
    conda update --all --yes
    
    # for some_env:
    cd ~/anaconda3/envs/some_env/bin
    ls *.app
    rm -rf *.app
    conda update -n some_env --all --yes

8.5 Zotero

8.5.1 collecions (分类)

Zotero中可以把文献按层次进行分组(或子组),比如某一个课题或某一篇文章的参考文献 归为一个分类。相同文献条目可以划分到不同分类不会重复保存该条目的数据(条目只会 保存一次,不同分类下的该条目都指向它)。根目录(My Library)会显示所有条目,在根目 录下多次出现的条目才是重复条目。

常用的与分类有关的操作

  • 移动分类,可以在左边面板中利用鼠标拖拽。
  • 分类的排序,默认按字母顺序排列
  • 条目添加到另一个分类,类似于copy,直接鼠标拖拽该条目到另一个分类即可。
  • 条目移动到另一个分类,类似于move,在拖动的时候按住Mac: CmdWindows:Shift 键。
  • 删除分类,右键点击删除分类,删除分类及其子分类,但不会删除分类中的条目,条目 在根目录下仍存在(点击删除分类及条目删除分类下条目)。
  • 删除分类中的条目
    • remove, 在右边面板中选中相应分类下的条目后按Delete删除,或者是点击 右键选择从分类中删除条目, 只会删除该分类下的条目,不会删除其他任何分类中 相同的条目(如根目录).
    • delete, Cmd/Ctrol+delete移动条目到回收站,或点击右键移动条目至回收站。
  • 查看条目在哪些分类中,选中条目后,按住Mac:Option/Windows:Control/Linux:Alt, 一定时间后左侧面板中含有该条目的分类会高亮显示。

Zotero自带特殊分类

  • 重复条目(Duplicated Items), 重复的条目可以帮助我们合并重复条目。
  • 未分类条目(Unfiled Items), 没有在任何分类中(比如位于根目录下)
  • 回收站(Trash), 类似于电脑的回收站,可以重新恢复相应条目、永久删除条目等。 项目默认30天后删除。

此外,子分类中的条目默认不会显示在父分类中,可以通过设置高级(Advanced Pane) -> 设置编辑器(Config Editor), 把extensions.zotero.recursiveCollections设置为True`

8.5.2 合并重复条目

重复条目分类中列出了相应Library下的重复条目。合并重复条目(不是删除重复条目), 这样可以保证条目所有的分类和标签都能保留,而删除重复条目可能删除相应的信息,并且 word插件也会自动识别合并。

在重复条目分类中选中相应的重复条目,然后在右侧面板中进行合并即可。也可以在相应的 分类中选择相同的条目点击右键合并条目

8.6 VSCode

8.6.1 python

  • python代码块有空行的时候,通过REPL运行的时候会出现缩进错误, 这是因为空行中没 有缩进,设置editor.trimAutoWhitespace": false.