2011-01-09 95 views
3

我使用SVN作爲ANKH和TortoiseSVN的源代碼控制。我在一個項目中寫了一個巨大的改變,並且需要幾天時間才能做出改變,但與此同時,我仍然希望稍後再提交一次以備份。 但是,如果我提交其他團隊成員將得到我未完成的工作更新。SVN提交而不讓其他人結賬 - 有可能嗎?

有沒有一種方法可以在不更改修訂版的情況下「提交備份」(因此其他更新不會更新)?

謝謝!

+3

使用分支... – CMircea 2011-01-09 07:10:12

+0

有人不得不說。 :)這是考慮使用像Mercurial這樣的分佈式版本控制系統的一個很好的理由。儘可能經常地提交,當你準備好時推送。 – 2011-01-09 07:12:14

+1

@Matthew:無需推送提交備份也無法在Mercurial中使用,因爲它只會在本地提交。 – Avi 2011-01-09 07:16:38

回答

5

這聽起來像一個經典案例使用feature branches被發現。這樣可以讓您的工作分開,但可以繼續使用Subversion的所有其他好處。

3

爲了詳細說明iconik's評論:

一個SVN的強大功能是能夠branch的解決方案。當你創建一個branch時,你基本上是通過從trunk中複製現有代碼來創建一個新的存儲庫。

在該分支上工作時,您可以對代碼執行任何操作並且不會影響主幹。當您完成所有更改後,您可以將merge分支重新放回主幹。

但是,其他人可能在同一分支上(儘管很少見),但您可以要求他們不要,而且他們也不應該有問題。

更多細節可以通過閱讀本SVN book

1

以上評論是合理的答案。您可以爲您的更改創建單獨的分支,但人們知道這些分支不正確(甚至可能不會構建),然後將分支合併到一起。被警告這可能是一個痛苦的過程。

真的,Subversion沒有很好的服務。像git,mercurial和bazaar這樣的分佈式版本控制系統的一大優點是,它們允許你爲備份目的進行本地提交,而無需立即發送到主存儲庫。因此,一種選擇是通過在本地安裝DVCS客戶端來進行雙重管理,並使用該客戶端進行本地提交以進行備份。大多數DVCS客戶端在沒有設置中央服務器的情況下工作良好,因此您可以在不引起與您的Subversion服務器衝突的情況下使用它。實際上,這是開發人員非常普遍的做法,他們希望獲得分佈式版本控制的好處,但在使用集中式版本控制的公司工作。

0

是的,使用分支(使用svn副本)。他遺漏的部分是使用一個svn合併命令,您可以在分支中進行所有更改並將其應用於主幹(假設所有合併都可以在沒有衝突的情況下完成)。我以這種方式使用了SVN的網頁內容。我有一個devel分支(svn copy)我完成了所有的網絡工作,當我們準備上線時,我會做一個svn合併到trunk(live),然後將trunk部署到服務器。

這樣做比使用Mercurial之類的分佈式存儲庫系統(儘管它是一個很好的產品)更具優勢,這就是您的分支位於服務器上,它具有更可靠的硬盤和更頻繁的備份。如果您提交到本地Mercurial存儲庫並且您的臺式計算機死亡,則您的工作將丟失。這也意味着,如果你確實想與一羣人合作(希望在將代碼推送到中繼線之前你將會參與一些QA),你可以通過將它們指向你的分支來實現。

1

將分支「鎖定」一段時間以使其他人無法進行提交非常有用。對於例如同時爲軟件版本創建版本,並且您希望具有已知版本等。 Subversion提供了「掛鉤」機制。

http://svnbook.red-bean.com/en/1.1/ch05s02.html

你可以寫「後」或「預先」承諾掛鉤,並啓用/與其它各種任務一起禁用的提交。