2014年8月

git常用命令

git 撤销

git checkout -- filename 撤销本地文件的修改

git本地分支

Git 分支 - 远程分支

git branch      列出本地分支
* debug
  master
  trunk

git branch -a  列出远程分支
* master
  origin/HEAD
  origin/master
  origin/release
  origin/trunk

git branch trunk        新建trunk分支
git checkout trunk     切换到trunk分支
git checkout -b trunk  新建分支并切换到分支(相当于git branch trunk & git checkout trunk)
git branch -d trunk    删除本地trunk分支

git branch -m <old_branch_name> <new_branch_name>  #git 本地分支重命名

git 远程分支

git checkout -b [分支名] [远程名]/[分支名]
git checkout -b trunk origin/trunk  新建本地分支并且关联到远程分支

git push origin firefoxbug #推送本地分支到远程
git pull origin <remote>:<local> # 更新远程分支到本地

git push origin [本地分支]:[远程分支]
git push origin :firefoxbug #删除远程分支

分支合并

git merge firefoxbug #把[firefoxbug]这一分支merge到当前分支

git reset --hard HEAD #取消合并

git 标签

git的标签主要用于版本发布,可以记录某个版本,其实就是某次commit

git tag 列出现有标签
git tag -a v0.1 -m 'odps_deploy version 0.1' #比如我开发完了version0.1版本,想留着以后回滚
git push origin v0.1 #推送此次tag到远程
git tag -d v0.1 #删除某个tag

git diff

本地工作目录和cache比较

git diff                       本地工作目录和cache比较

git diff filename               指定文件名比较

cache和commit比较

git diff –cached               cache和commit之间的比较

git diff –cached filename      

不通commit版本之间比较

git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9 b8e7b00c02b95b320f14b625663fdecf2d63e74c 查看某两个版本之间的差异

git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9:filename b8e7b00c02b95b320f14b625663fdecf2d63e74c:filename 查看某两个版本的某个文件之间的差异

取消对某个文件的跟踪

$ git rm --cached nginx.tar.gz

tmux配置

参考 http://www.opstool.com/article/253

配置文件

$ vim ~/.tmux.conf

#保存在个人home目录下 .tmux.conf
#取消默认的设定键
unbind C-b
unbind &
unbind %
unbind w
unbind '"'
 
#Escape键
set -g prefix C-a
 
#解决bash ctrl a冲突问题
bind a send-prefix
 
#窗口切分快捷键
bind \ split-window -h
bind - split-window -v
bind K confirm-before -p "kill-window #W? (y/n)" kill-window
bind '"' choose-window
 
#Pane之间切换的快捷键
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
 
#Pane大小调整快捷键
bind < resize-pane -L 5
bind > resize-pane -R 5
bind _ resize-pane -D 5
bind + resize-pane -U 5
 
#设置window属性
setw -g window-status-current-bg red
setw -g window-status-current-fg white
setw -g window-status-current-attr bright
setw -g window-status-attr bright
setw -g window-status-format '#[fg=cyan,dim]#I#[fg=blue] #[default]#W#[fg=grey,dim]'
setw -g window-status-current-format '#[fg=cyan,dim]#I#[fg=blue] #[default]#W#[fg=grey,dim]'
 
#设置状态栏
set -g status-utf8 on
set -g status-left ""
set -g status-left-length 0
set -g status-interval 2
set -g status-fg white
set -g status-bg blue
set -g status-right "%Y/%m/%d %H:%M"
set -g default-terminal "screen"
 
#设置滚屏,屏幕历史长度
set -g history-limit 10000
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
setw -g mode-keys vi
setw -g utf8 on
 
#其他设置
set -sg escape-time 0

常用快捷键

1. Ctrl+a  按 [ 进入 tmux屏幕拷贝模式
2. 然后按空格键开始复制
3. 使用类似vim的上下左右键方式进行选中
4. 按enter退出复制模式
5. Ctrl+a  按 ] 进行粘贴
6. Ctrl+a+c 新建窗口

会话控制

查看历史会话
$ tmux ls 
9: 3 windows (created Wed Aug  6 11:13:54 2014) [156x36]

切换到历史会话
$tmux att -d -t 9

Linux rsync删除大量小文件

如果某个目录下存在几十万个小文件,用普通的rm删除起来非常慢,这时候可以用rsync来删除,下面是两种方式删除的性能测试。

测试场景

在test下生成30万个文件,内容大都是十来个字节。

rm删除大量小文件

$ # 如果直接用rm -f test/*,rm会提示参数太多,报错
$ time rm -rf test
real    0m18.046s
user    0m0.077s
sys 0m3.291s

rsync删除大量小文件

$ time rsync --delete-before -a -H --progress --stats /tmp/test/ test/

real    0m35.437s
user    0m1.662s
sys 0m6.076s

选项说明:
–delete-before 接收者在传输之前进行删除操作
–progress 在传输时显示传输过程
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性
-H 保持硬连接的文件
-v 详细输出模式
–stats 给出某些文件的传输状态

如果不显示传输过程,速度更快

$ time rsync --delete-before -a -H --stats /tmp/test/ test/
real    0m6.420s
user    0m0.546s
sys 0m3.678s

总结

在存在大量小文件的时候,选择rsync删除(不指定输出详细信息)效率确实比rm高很多。