2009-12-11 90 views
12

我需要一些關於「svn switch」行爲的說明。我正在使用SVN版本1.6.5。'svn switch'永遠刪除本地添加的文件嗎?

通過閱讀手冊,我對行爲的理解是本地更改將被保留。所以我希望在svn switch之後,本地添加的文件仍然存在於我的工作目錄中。

但是,我的同事和我看到了幾個新文件被交換機刪除的情況。不幸的是,我們無法弄清楚如何重現這一點。

是否存在某種情況(無論是功能還是已知錯誤),在這種情況下svn switch刪除本地添加的文件?

回答

11

我認爲當您有未提交的更改時切換是個壞主意。首先,將您的本地更改提交到svn cp . <branch URL>的分支,然後切換。可能會有很多難以處理的情況,否則你可能會陷入困境。

想象一下,在您切換到的版本中,本地添加的文件已經存在,並且完全不同。或者,如果您添加了一個完整的文件目錄,那麼該目錄無法與您切換到的版本中的文件充分合並。你真的想要這個大沖突嗎?

svn status顯示「S」狀態,表示源樹的不同部分具有不同的版本。它恰好發生在切換期間SVN與本地更改混淆的時候。它只是在開關中間斷開,然後恢復過來就是一種痛苦。幾次發生在我身上。這就是爲什麼我總是確保在運行svn sw之前,我的工作副本沒有本地修改。

+0

謝謝伊萬。 當你說「用svn cp提交本地更改到一個分支」時,大概我應該使用一個臨時的,特定於開發人員的分支?即不是我最終想要切換到的那個,因爲我的更改尚未完成。 – 2009-12-11 11:14:39

+0

是的。那會是你個人的「工作進行中」分支。 – 2009-12-11 11:25:55

+0

如果您的存儲庫中項目的路徑發生更改(由於管理員將其移動),那麼這並不適用,因爲您切換的原因是檢查您的工作。 – badbod99 2012-04-13 15:54:53

6

它不應刪除本地添加的文件或未版本化的文件。邊緣情況是交換機移動或刪除目錄的位置,但在這種情況下應該存在樹衝突。

我經常這樣做,如果我認爲可能存在樹衝突,那就是保存一個當前更改的補丁。然後我知道我可以將我的工作副本剔除,並在必要時重新開始,而不會丟失我的工作。

svn diff > ../somewhere/safe/save.diff 
# Break stuff 
patch -p0 < ../somewhere/safe/save.diff 
+0

曾經沒有想到:) – Pondidum 2009-12-11 11:04:18

+0

謝謝安德魯。我曾嘗試過,但svn diff的限制是它不顯示新文件 - 只有修改過的文件。 – 2009-12-11 11:06:55

+3

如果你'svn添加'一個文件,它會出現在diff中,甚至在你簽入之前。 – 2009-12-11 13:20:38

0

svn switch行爲非常類似於svn update:如果開關的目標是在其中一些文件是關於工作拷貝丟失的路徑,這些文件會從工作拷貝中刪除。

像伊萬說的,你應該提交你的改變,然後切換。