Re: [問題] SVN的衝突解決

看板Programming作者 (Alien)時間14年前 (2011/07/12 18:23), 編輯推噓2(2014)
留言16則, 4人參與, 最新討論串3/5 (看更多)
※ 引述《knives ()》之銘言: : 我現在在學著用ToroiseSVN : 可是常常會發生 : 錯誤: 送交失敗 (細節隨附): : 錯誤: File or directory 'user.php' is out of date; try updating : 錯誤: resource out of date; try updating : 這樣的衝突,而不能更新 : 有一種我覺得很爛的解決方法就是先把本地的檔案刪了再重新SVN更新 : 如果用更新到某個版本的話 : 程式碼會被追加這樣的字串 : <<<<<<< .mine : ======= : 不知道大家是怎麼解決衝突 : 謝謝 你應該去看一看 svn 的書 (官方的免費書), 理解一下發生什麼事, 我感覺你好像不太清楚這部份的理念. 這裡發生的一切事都是始於協同工作的時候有衝突. 假設 A, B 二人都在用 svn, 大家協同修改某檔. (假設叫 x.txt) 原本 svn 的 revision 是 100 A, B 都各自 checkout 了 x.txt B 先修改完, commit 了. svn 的 revision 變為 101 當 A commit 的時候, svn client 作檢查 (其實 B 也有發生這檢查, 只是 他平安過渡而已), 發覺 A 的 working copy 的修改是 基於 rev 100 的 x.txt, 可是 server 上的檔案已經在 rev 101 修改過了, 那麼 svn client 當然不可以卯然把 A 的 x.txt 丟上去, 不然的話, B 的修改不就消失了嗎? 所以才會有說: x.txt out of date; try updating 的訊息出現. 這訊息是叫 A 去做 update, 而 update 就會把 server 上新的 x.txt 拿下來. 然後 svn client 會把 A 之前基於 rev 100 的修改部份, 自動 在 rev 101 的 x.txt 嘗試照樣的修改. 一般來說, 要 A 和 B 修改的部 份沒有重疊, 這個自動 merge 的動作就已經幫你搞定了. 可是萬一 A 和 B 都修改了同一行, svn 又怎麼知道誰改的才對? 這個時 候就會出現 merge conflict, 然後在 conflict 的部份用 <<<<< mine etc 來指出, 用意只是叫A 修改為 A 認為正確的結果. 所以你要問, 怎麼 resolve conflict 才對, 根本沒有人可以答你, 因為每一次的衝突都不同, 你要自己去判斷才行呀. 有時候, 可能剛 巧另一個同事和你都修改了一樣的東西, 那麼你就可以用他的版本取代, 有時候只是修改的位置重疊, 而修改的內容是不同的, 那麼你當然要 把兩部份都保留下來嘍. Alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.238.156.185

07/12 22:51, , 1F
重點就在svn merge sucks!!!git rock!!!
07/12 22:51, 1F

07/13 00:44, , 2F
我兩者都有用,git 所謂merge 比較好,
07/13 00:44, 2F

07/13 00:44, , 3F
並不是這篇文章中提到的情況。這類
07/13 00:44, 3F

07/13 00:44, , 4F
conflict 在 git 底下一樣會出現.
07/13 00:44, 4F

07/13 00:45, , 5F
git 所謂merge 比較好是指 branching
07/13 00:45, 5F

07/13 00:45, , 6F
的情形底下,不同 branch 之間的 merge
07/13 00:45, 6F

07/13 00:45, , 7F
而所謂比較好,只是 git 簡化了整個
07/13 00:45, 7F

07/13 00:46, , 8F
branch/merge 的 model
07/13 00:46, 8F

07/13 00:49, , 9F
現在發生的事,類同 git pull 了後再
07/13 00:49, 9F

07/13 00:49, , 10F
rebase. 由於往往在local 的 changes
07/13 00:49, 10F

07/13 00:50, , 11F
已經有很多,和pull 下來的修改有
07/13 00:50, 11F

07/13 00:50, , 12F
conflict 的話,rebase過程中的conflict
07/13 00:50, 12F

07/13 00:51, , 13F
resolving 可以更麻煩
07/13 00:51, 13F

07/19 22:49, , 14F
用tortoise svn的話, merge不會比較難=)
07/19 22:49, 14F

07/19 22:49, , 15F
在cmd line下git merge >>>>>> svn merge
07/19 22:49, 15F

07/30 02:32, , 16F
樓上的一直沒搞懂 在這種情況下 svn >> git
07/30 02:32, 16F
文章代碼(AID): #1E722UFc (Programming)
文章代碼(AID): #1E722UFc (Programming)