在命令行中,svn 中不像 git 可以使用一個(gè)文件對(duì)倉(cāng)庫(kù)要屏蔽的文件進(jìn)行管理,網(wǎng)上有很多這方面的命令教程:
但這并不是我想要的效果,所以我自己實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的svnignore文件管理來對(duì)svn倉(cāng)庫(kù)中的 status 顯示進(jìn)行管理。
效果即為那些我不想要顯示在 svn status 中的便不顯示。因此我重新寫了一個(gè)命令來達(dá)到此目的。而且當(dāng) status 的結(jié)果很多時(shí),需要上下翻屏比較麻煩,所以我使用了一個(gè)緩存的文件來保存 status 結(jié)果。
具體如下:
- 將附錄A的代碼copy到
~/.bashrc中,并執(zhí)行 命令:source ~/.bashrc; - 在倉(cāng)庫(kù)下創(chuàng)建一個(gè)
.svnignore文件,文件中每一行為要屏蔽的文件名,不能包含/!參照附錄B;
附錄A:
CACHE_TMP="$HOME/.cache/tmp"
# 更方便的查看 diff ,同時(shí)保存起來
__init_git_svn(){
if [ ! -d $CACHE_TMP/git-diff ];then mkdir -p $CACHE_TMP/git-diff;fi
if [ ! -d $CACHE_TMP/svn-diff ];then mkdir -p $CACHE_TMP/svn-diff;fi
if [ ! -d $CACHE_TMP/git-st ];then mkdir -p $CACHE_TMP/git-st;fi
if [ ! -d $CACHE_TMP/svn-st ];then mkdir -p $CACHE_TMP/svn-st;fi
}
gdf(){ __init_git_svn; now=`date +%Y%m%d-%H%M%S`.log;fl=$CACHE_TMP/git-diff/$now;git diff $@ > $fl;vim -M $fl; }
sdf(){ __init_git_svn; now=`date +%Y%m%d-%H%M%S`.log;fl=$CACHE_TMP/svn-diff/$now;svn diff $@ > $fl;vim -M $fl; }
gsg(){ __init_git_svn; now=`date +%Y%m%d-%H%M%S`.log;fl=$CACHE_TMP/git-st/$now;git status $@ > $fl;vim -M $fl; }
ssg(){ __init_git_svn; now=`date +%Y%m%d-%H%M%S`.log; fl=$CACHE_TMP/svn-st/$now; fl0=$fl".log";
svn status $@ > $fl0
cat ".svnignore" | while read line;do
if [ -z $line ];then continue;fi;
echo "$line"x| grep -q "^\s";test $? -eq 0 && continue
sed "/$line/d" $fl0 > $fl;
mv $fl $fl0;
done
mv $fl0 $fl;
vim -M $fl;
}
dif(){ diff -y $@ | less; }
# 清除所有l(wèi)og
alias gdfclear="rm $CACHE_TMP/git-diff/*"
alias sdfclear="rm $CACHE_TMP/svn-diff/*"
alias gdfls="ls $CACHE_TMP/git-diff/"
alias sdfls="ls $CACHE_TMP/svn-diff/"
alias gst="git status"
# svn 只顯示修改
alias sst="svn status"
alias ssq="svn status -q"
查看無 屏蔽文件效果的 svn status 使用 ssg 命令替代!
附錄B(文件 .svnignore 的內(nèi)容):
log
update
sh.sh
stop
tmp_eval_file.c
.svnignore
start
tmp
.workspace.vim
dat
null
act_20378.txt
act_20379.py
act_20378.py
ls.cfg
config_ls.cfg
tags
切記,此文件不能出現(xiàn)斜杠 / 字符!這也是一個(gè)不完善的地方,還請(qǐng)大神指點(diǎn)如何解決。