以下摘自:《卓有成效的程序員》之自動化
轉自:http://blog.csdn.net/spare_h/article/details/6677435
我經常會一次往Subversion里添加一批文件。在使用命令行做這件事時,你必須指定所有想要添加的文件名。如果文件不多的話這還不算太糟糕,但如果你要添加20個文件,那就費事了。當然你也可以用通配符,但這樣一來就可能匹配到已經在版本控制之下的文件(這不會有什么損害,只不過會輸出一堆錯誤信息,可能會跟別的錯誤信息混淆)。為了解決這個問題,我寫了一行簡單的bash命令:
svn st | grep '^\?' | tr '^\?' ' ' | sed 's/[ ]*//' | sed 's/[ ]/\\ /g' | xargs svn add
表4.3詳細解釋了這一行命令。
我大概花了15分鍾寫出這條命令,然后用了它成百上千次。
****************************************************
這個自動化過程已經很完美了,一個“簡單”的shell腳本,這是一個權威編寫並使用了百上千次的腳本。
然后我在一個博客中看到這樣一個腳本: svn st|awk '{print $2}'|xargs svn add。 乍看之下覺得更加精煉,仔細看下就會發現這個腳本沒有區分文件狀態。所以完善了以下這個腳本: svn st | awk '{if ( $1 == "?") { print $2}}' | xargs svn add 這樣,以后我可能使用這個腳本成百上千次。(當然這個腳本也沒有考慮過濾掉不要添加的文件) 當你第三次做一件事情的時候,就應該考慮將其工具化,自動化! 名稱 svn add — 添加文件、目錄或符號鏈。 概要 SVN子命令add PATH...描述 文件、目錄或符號鏈到你的工作拷貝並且預定添加到版本庫。它們會在下次提交上傳並添加到版本庫,如果你在提交之前改變了主意,你可以使用svn revert取消預定。 選項 --targets FILENAME --non-recursive (-N) --quiet (-q) --config-dir DIR --no-ignore --auto-props --no-auto-props --force 例子: 我們通過一個例子來看一下SVN子命令add,添加一個文件到工作拷貝: $ svn add foo.c A foo.c 當添加一個目錄,svn add缺省的行為方式是遞歸的: $ svn add testdir A testdir A testdir/a A testdir/b A testdir/c A testdir/d 你可以只添加一個目錄而不包括其內容: $ svn add --non-recursive otherdir A otherdir 通常情況下,命令svn add *會忽略所有已經在版本控制之下的目錄,有時候,你會希望添加所有工作拷貝的未版本化文件,包括那些隱藏在深處的文件,可以使用svn add的--force遞歸到版本化的目錄下: $ svn add * --force A foo.c A somedir/bar.c A otherdir/docs/baz.doc。SVN子命令add的用法介紹講解完畢。