2014-03-29 34 views
0

我正在編寫一個部署bash腳本,該腳本會將源代碼管理中的最近更改發佈到其他計算機上。我是從命令行開始學習svn的(在開發中已經使用了很多年),並且是新的bash腳本。已在指定時間段內提交的SVN簽出文件

我需要一種方法來只簽出最近修改過的文件。事情是這樣的:

svn checkout svn://server/repo/project/trunk -mtime -1d4h

的想法是這個就已經致力於在過去28小時內,只簽出的文件。

+0

AFAIK沒有像SVN那樣的功能。你可能需要爲那個地方寫一個腳本,在那裏用depth = empty結帳,列出日誌,找到最近28小時內的最後一個提交,並回滾包裝文件名,以更新每個文件名......不那麼難,但需要一些工作... – ceinmart

回答

1
  1. 你無法檢出改變,你只能一些狀態信息庫的某些部分的(即「修訂版」),其中將包括所有文件,現有的在本次修訂了此節點(子目錄) (和添加| 修改任何修訂本次修訂,包括本次修訂
  2. Date format specification in Subversion不允許「相對日期時間」,只有絕對值
  3. 血肌酐IPTS,其中出口|保存外庫中的所有文件,在修訂版的修改|修訂範圍,存在並且可以在網絡(Subversion Command Line Script to export changed files良好的bash樣本)上述票據的

後果找到

  • 你必須提供正確的顛覆風格的日期或版本號爲出發點
  • 與自由形式的規範相對日期可以很容易使用bash date command-d "28 hours before")和stored in variable構造,這可以作爲參數electrictoolbox的劇本
  • 從出口目錄到最終目的地文件的部署是最後一部分(重環境特有的,不建議現在這裏)
0

我發現了更簡單的東西在此基礎上,以適合我的需求: How can I keep the original file [commit] timestamp on Subversion?

我使用--config-option config:miscellany:use-commit-times=yes簽出或更新項目的工作副本,它將文件系統上的時間戳設置爲最後一次結賬時間。然後我使用標準的find命令。例如:

#!/bin/bash 

function listfn { 

    while read file; do 

     if [[ !($file =~ ^.*\.svn.*$) ]]; then 
      echo $file 
     fi 

    done 

} 


svn checkout --config-option config:miscellany:use-commit-times=yes svn://server/repo/project/trunk project-fordeploy 

find project-fordeploy -mtime -1d4h | listfn 
相關問題