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

看板Programming作者時間14年前 (2011/08/13 16:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/5 (看更多)
※ 引述《adrianshum.bbs@ptt.cc (Alien)》之銘言: > ※ 引述《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 個人經驗: 1. 若很確定這個 file 自己沒修改過, 的確砍掉後再 svn up 最簡單 2. 若自己有動過這個 file, 那就如同 Alien 說的, svn up 後有機會看到 conflict, 同時間會幫你產生 xxx.mine, xxx.OldVersion, xxx.NewVersion 分別代表: xxx.mine: 你下 svn up 之前的檔案內容, 包含你修改過的 xxx.OldVersion: 你下 svn up 之前的檔案內容, "不"包含你修改過的 xxx.NewVersion: 目前 server 上最新的檔案內容 由以上 3 個 file, 你可以決定怎麼更新 xxx file, 修改好後, 你可以使用 svn resolved xxx, 代表你已經修正好了, 此時那幾個多出的 file 也會自動被砍掉了, 接者也就能 svn commit 回去 -- ※ Origin: 交大次世代(bs2.to) ◆ From: 220-133-198-183.HINET-IP.hinet.net
文章代碼(AID): #1EHYy-_G (Programming)
文章代碼(AID): #1EHYy-_G (Programming)