2009-04-20 56 views
20

這可能是不可能的,但我會問無論如何。如何在命令行中跨多個外部進行單個SVN提交?

沒有深入討論爲什麼它是這樣的細節,我有兩個主要的結賬,我工作,一個用於生產發佈分支,一個用於主幹。它們中的每一個都是svn:externals對子項目引用的小集合,在檢出的svn目錄下沒有直接內容。

也就是說,四個svn:externals指令添加了每個結帳目錄中的所有內容。

當我通過Eclipse(/ Subclipse)進行提交時,我可以一次性提交所有外部項目的更改,這很好,因爲它們只是在同一個存儲庫中的單獨子項目,這使我避免連續對同一個倉庫進行4次單獨的提交。

從命令行執行同樣的事情是不可能的嗎?對於每個外部提交者來說,當然可以爲一個命令編寫腳本和別名,但是我寧願避免在提交日誌中單獨提交以儘可能進行相關更改。

回答

7

不幸的是,你的假設是正確的。當前的Subversion命令行工具不會在提交期間遞歸到不相關的外部工作副本中。 Eclipse可能會發現它們都是相同的,並調整所有內容以便它只進行單個提交事務。

客戶端的這個缺點實際上被列爲在項目中定義外部項時要注意的問題之一。截至1.6.1客戶端,這種限制依然存在。

9

您可以在命令行客戶端中指定要提交的所有文件和文件夾,包括外部。由於CL沒有遞歸到外部,你必須分別在你的提交命令中指定那些:

svn ci working_copy externals1 externals2 -m "log message" 

雖然沒有嘗試過。如果它不起作用,則必須單獨指定所有修改的文件和文件夾,而不僅僅指定外部的「根」文件夾。

+0

可惜我不能在我現有的設置中測試這個作爲兩個外部虛假的共同的父目錄,所以我在嘗試你的解決方案時收到一個錯誤,指出它不是工作目錄(因爲它不是):svn ci htdocs/intra htdocs/update scripts includes -m「msg」 – 2009-04-20 18:32:30

+0

...並且在腳本和包含中沒有更改提交。 – 2009-04-20 18:33:58

-2

你可以這樣做:

svn ci -m"my comment" * 
1

如果你只有內容沒有屬性修改,你可以做的東西一起:

svn st | egrep "^M" | awk '{print $2}' | xargs svn ci -m 'your message' 

如果添加/刪除,...文件,您可能會修改egrep正則表達式以滿足您的需求。

0

我遍歷所有外部組件,並執行「S​​VN提交」每個,如:

for dir in $(svn propget svn:externals . | awk '{print $2}'); do svn commit $dir; done 
2

有了你可以做最新的SVN:--include-的外部

相關問題