2011-10-11 101 views
0

我敢肯定,我不是最新的代碼更改爲從SVN直播服務器剛剛回家前誰曾試圖switch唯一的一個,才發現有些傻瓜已經修改過的文件直接在服務器上,現在你有五個PHP腳本標記爲衝突,該網站是下降和你得到由你的妻子大吼遲到吃飯,因爲你必須手動解決所有的衝突,因爲回滾是不可能的。擴展爲PHP忽略SVN衝突

我認爲這將是真棒,如果有對PHP會使用解析錯誤unexpected T_SL遇到衝突的文件時導致死亡的擴展,但僅使用每一個衝突的工作拷貝的版本將代替解析它。

<<<<<<< .mine 
changes_my_stupid_coworker_made(); // This would be executed 
======= 
my_important_changes(); // This would NOT be executed 
>>>>>>> .r9 

是否有這樣的擴展或可以爲類似效果的用戶?

+0

我只能想象這是一個非常複雜的插件,可以在保持性能的同時進行編寫......而問題本身可以通過不讓所有人訪問實時環境來避免,如果您需要編輯實時環境在版本控制之外,你可能會做錯事情(在你的工作流程中)... – sg3s

+0

我同意,沒有人應該在生活環境中觸碰任何東西,我們的工作流程嚴格禁止沒有非常有說服力的理由。儘管如此,也許是因爲「令人信服的理由」的定義因人而異。 – Kaivosukeltaja

+0

你的同事正在使用「jenga」反模式。參見[每日跆拳道:右鍵進行版本管理(http://thedailywtf.com/Articles/Release-Management-Done-Right.aspx)有關它的信息。 要強制顛覆,用使用SVN出口的JB Nizet的建議,並設置它來覆蓋服務器的文件。 有人的工作迷路了? Shucks,他們沒有按照這個過程。如果事情真的很緊急,告訴他們修改「標記」分支中的來源,並通知項目經理清理混亂(即需要一個新的標記,而舊的標記不再是「乾淨的」)。 – JBert

回答

3

這真的是解決問題的最糟糕的方式。

  • 永遠不要讓任何人直接在服務器上編輯文件。這些文件可以是隻讀的(或者可以解僱的罪魁禍首)
  • 不要直接從SVN存儲庫更新服務器:更新工作副本,在此工作副本上運行所有單元和集成測試,然後標記修改並將工作副本導出到服務器上

如果人們無法正常工作,請不要讓他們再工作。

+0

我們已經在更新過程中標記修訂並使用它們,但是如果服務器上存在本地更改,它們仍然可能會發生衝突。測試集成測試環境中的更改時,甚至無法發現它們。我們還需要允許對文件進行寫訪問,否則'svn switch'無法觸及它們。 – Kaivosukeltaja

+0

不要使服務器從工作副本提供文件。通過有限的文件訪問,使其從導出的工作副本提供文件。 –

0

嘗試更新現場環境迫使他們滿,仍可能會造成問題(見前面的評論),但防止衝突的發生。從那裏開始,您可以不必更改版本控制之外的實時環境。

從我的頭頂

svn up --accept theirs-full 

我們確保所有的開發人員有一種方法來更新現場環境,不論是非常嚴格的。我們無法通過實時服務器上的命令行進行更新,但我們在服務器上有一箇中央腳本,我們可以在其上配置項目,然後我們可以通過腳本提供更新命令。然後,腳本將首先進行比較,檢查衝突並更新(如果沒有錯誤),併發送多個人員和負責該項目的團隊負責人發送帶有cmd輸出的電子郵件。

這是相當整潔,防止可怕的螺絲起坐,真正深夜。