一次向svn中增加所有新增文件 svn add all new files【轉】


以下摘自:《卓有成效的程序員》之自動化

轉自: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的用法介紹講解完畢。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM