看板 Programming 關於我們 聯絡資訊
※ 引述《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
johnlinvc:重點就在svn merge sucks!!!git rock!!! 114.32.24.155 07/12 22:51
adrianshum:我兩者都有用,git 所謂merge 比較好, 183.179.61.91 07/13 00:44
adrianshum:並不是這篇文章中提到的情況。這類 183.179.61.91 07/13 00:44
adrianshum:conflict 在 git 底下一樣會出現. 183.179.61.91 07/13 00:44
adrianshum:git 所謂merge 比較好是指 branching 183.179.61.91 07/13 00:45
adrianshum:的情形底下,不同 branch 之間的 merge 183.179.61.91 07/13 00:45
adrianshum:而所謂比較好,只是 git 簡化了整個 183.179.61.91 07/13 00:45
adrianshum:branch/merge 的 model 183.179.61.91 07/13 00:46
adrianshum:現在發生的事,類同 git pull 了後再 183.179.61.91 07/13 00:49
adrianshum:rebase. 由於往往在local 的 changes 183.179.61.91 07/13 00:49
adrianshum:已經有很多,和pull 下來的修改有 183.179.61.91 07/13 00:50
adrianshum:conflict 的話,rebase過程中的conflict 183.179.61.91 07/13 00:50
adrianshum:resolving 可以更麻煩 183.179.61.91 07/13 00:51
bigbite:用tortoise svn的話, merge不會比較難=) 211.76.57.160 07/19 22:49
bigbite:在cmd line下git merge >>>>>> svn merge 211.76.57.160 07/19 22:49
Luba:樓上的一直沒搞懂 在這種情況下 svn >> git 59.104.108.86 07/30 02:32