2012-01-14 90 views
4

我有一個文件夾,它是一個SVN倉庫的簽出。該文件夾中的文件經常更改,新文件被創建並刪除舊文件。將所有內容交付SVN Repo

如何輕鬆地將存儲庫中的所有更改提交到remove svn服務器?通常我首先必須發佈svn delete [all deleted files and directories recursivly],然後svn add [all added files and directories recursivly],然後svn ci提交。這可以以某種方式自動化嗎?

我想過創建一個bash腳本來解析svn status,但是必須有更好的解決方案?!

有一件事很重要:svn-ignore屬性不能被忽略。

+0

我不知道是否有更好的方法(我想不出一個),但是這並不聽起來像一個特別長或難寫的腳本。 – 2012-01-14 17:51:48

+0

我們與[Adobe Robohelp](http://www.adobe.com/products/robohelp.html)文件有類似的情況。我能夠刪除所有內容/添加所有業務,但是它讓我們的svn日誌大爲混亂。我們所做的是將Robohelp文件壓縮並提交zip文件。這使我們的存儲庫變更爲一個單獨的文件,使我們的歷史更加可以承受。完全添加和刪除整個目錄使得不可能做差異等等。所以,我不相信我們失去了將所有東西壓縮到一個文件中並且僅僅提交的東西。 – 2012-01-31 21:21:04

回答

4

至少在刪除任務解析svn status是解決方案,但它可以非常迅速地完成:

svn add $(svn status | sed -e '/^?/!d' -e 's/^?//') 

-or:

svn delete $(svn status | sed -e '/^!/!d' -e 's/^!//') 

也可以做同樣的方式加入 - 更簡單:

svn add . --force 

btw:兩者均聲明svn add com mands考慮你的svn:ignore屬性,不要添加被忽略的文件。

1

感謝DerVO的答案,我寫了下面的腳本,它首先刪除所有文件,然後添加所有新文件。對於savety目的刪除命令要求每個文件(因爲svn delete物理刪除文件)

#!/bin/bash 

HERE=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) 
PROG="${0##*/}" 

cd $HERE 
svn status | grep ^\! | sed 's/^\!\s*//' | tr '\n' '\0' | xargs -0 -n 1 -pr svn remove 
svn status | grep ^\? | sed 's/^\?\s*//' | tr '\n' '\0' | xargs -0 -n 1 -pr svn add 
svn commit -m "Work of `date`" 
svn up 
+0

將svn作爲第一步將會更好,如果存在錯誤狀態(例如衝突),則停止腳本。 – mc0e 2015-04-18 10:45:35