2012-10-18 86 views
0

我們看到在我們的回購奇怪的問題,即下面的命令報告傳入衝突:SVN預覽更新顯示衝突,但更新不會導致衝突

svn merge --dry-run -r BASE:HEAD . | egrep -e '^[[:space:]]*(A|B|C|D|E|G|U)+[[:space:]]+' 

    C path/to/fileA 
    C path/to/fileB 
    C path/to/fileC 
U path/to/fileD 

然而,SVN了實際上並不導致衝突。事實上,輸出結果如下:

At revision 7922. 
At revision 7922. 
At revision 7922. 
U path/to/fileD 
Updated to revision 7922. 

據我所知,沒有什麼奇怪的有關問題的文件。 svn狀態不報告任何問題,svn info顯示文件是最新的,而svn resolve沒有任何影響。這是週期性發生的,但不是每次都發生,並且它總是顯示相同的文件。

有沒有人見過這個?

編輯:它看起來像我遺漏了一個關鍵的細節,這也許是爲什麼沒有人能夠在這裏回答。在svn up步驟中,我們逐個更新每個文件以避免在分級自動部署期間發生衝突(例如,t0:預計傳入更新,t1:針對數據庫運行任何必要的模式更改,t1 + X:更新剩餘的該批次,其中X可能是不重要的數字)。完整更新如下:

svn up --depth=empty path/to/fileA path/to/fileB path/to/fileC path/to/fileD 

At revision 7922. 
At revision 7922. 
At revision 7922. 
U path/to/fileD 
Updated to revision 7922. 

回答

0

看起來這裏的問題來自父目錄不同步。

例:

修訂X:

A path/to/fileA 

版本X + 1:

A path/to/fileB 
A path/to/fileC 

我們一直在更新,像這樣:(假設BASE = X-1和HEAD = X + 1)

​​3210

雖然這對於提交中涉及的3個文件來說都很好,dir /,dir/path /和dir/path/to /現在位於HEAD修訂版的後面。 svn info dir /將修訂報告爲X-1(BASE),因爲它沒有被包含在前面的svn中。

現在,當我們到修訂X + 2:

U path/to/fileD 

我們再次嘗試的過程,但這次的前瞻報道衝突:

%> cd dir/ 
%> svn merge --dry-run -r BASE:HEAD . 
... 
    C path/to/fileA 
    C path/to/fileB 
    C path/to/fileC 
U path/to/fileD 
... 

(來電從X-增加1-> X + 2,當真的文件已經在那裏)。同時,這些文件上的svn將無害地報告一切都是最新的。

我們已經將自己的部署轉變爲更原子化的過程,因此我們可以自由地從分支根節點中獲取所有內容,避免醜陋--depth = empty,並保持所有文件同步。