2017-08-04 71 views
2

我們有一個VOB,代碼開發主要在main分支中完成。在某個時間點,是時候研究一些彼此密切相關的新功能。爲此,我們創建了一個新分支,some_feature_set。多位開發人員使用此功能集。每個開發人員都在自己的分支中工作,一旦某個子功能被視爲已完成,它將合併回some_feature_set。一旦功能集完全實施,該計劃將合併到main嵌套分支的ClearCase配置規範

爲了實現這一目標,我們使用配置規格像這樣的:

element * CHECKEDOUT 
element * /main/some_feature_set/some_sub_feature/LATEST 
element * /main/some_feature_set/LATEST -mkbranch some_sub_feature 
element * /main/LATEST -mkbranch some_feature_set 

因爲對於some_sub_feature工作的目的是要合併到some_feature_set,我們的想法是從some_feature_set創建任務分支之前已經轉移。

我們的組織使用動態視圖(我們不能改變它)。爲了保護自己免受其他開發人員對可能破壞子功能分支中正在進行的工作的mainsome_feature_set分支所做的更改,我們使用時間戳。因此配置規範如下所示:

element * CHECKEDOUT 
element * /main/some_feature_set/some_sub_feature/LATEST 
mkbranch some_sub_feature 
    element * /main/some_feature_set/LATEST -time <some_time> 
    mkbranch some_feature_set 
    element * /main/LATEST -time <some_time> 
    end mkbranch 
end mkbranch 

這會導致從main檢出文件時出現問題。 ClearCase將它分支到some_feature_set,但由於沒有規則選擇新創建的版本,它將嘗試再次分支併發出分支存在的錯誤。這一點我們可以通過添加更多的規則來配置規範解決:

element * CHECKEDOUT 
element * /main/some_feature_set/some_sub_feature/LATEST 
mkbranch some_sub_feature 
    element * /main/some_feature_set/LATEST -time <some_time> 
    element * /main/some_feature_set/0 
    mkbranch some_feature_set 
    element * /main/LATEST -time <some_time> 
    element * /main/0 
    end mkbranch 
end mkbranch 

這樣取出文件或添加新的文件到ClearCase的時候,我們沒有得到任何的問題。然而,我們得到的問題是,當另一個開發人員想爲some_feature_set分支做一些只有main分支的文件並且檢查該文件時,視圖選擇的版本將會改變。

比方說,在上面列出的配置規範中,版本/main/4在我看來被選爲some_file。工作並行繼續,版本/main/5由不同的開發人員創建。配置規範中的time規則仍將選擇版本/main/4。在稍後的某個時間點,另一位開發人員必須爲some_feature_set做一些工作,並使用類似的配置規範建立自己的視圖,但使用更新的時間戳,以便some_file獲得版本/main/5。該開發人員必須對some_file進行一些更改並檢查出來。這立即創建版本/main/some_feature_set/0/main/some_feature_set/some_other_sub_feature/0。由於/main/some_feature_set/0現在存在,我的視圖選擇它。它的內容與/main/5相同,而不是/main/4,與其他開發者檢出文件之前的情況相同。

有什麼辦法可以防止上述問題的發生?

回答

1

首先,每個開發者的一個分支用於開發相同的功能並不是最佳實踐。我一直主張反對(since 2009)。

但是,如果你必須並且想要支行,從標籤創建它們,而不是依靠時間來創建它們要有效得多。
而且最好是不強制分支路徑(它變得太挑剔,因爲你的問題說明)

我將使用「ClearCase : Loading Older Version of a specific Directory?」基於時間的選擇規則。
但你會看到新的元素規則是更簡單,一旦出現索尼:

element * /main/0 -mkbranch myBranch 

你需要指定,爲元素,要在正確的分支直接創建。

這就是爲什麼基於分支的選擇規則通常使用省略號...的原因,如在​​3210中所述。請參閱「Details of config spec in base ClearCase」。

總的想法是:只要它的起始版本是正確的(即具有正確的不可變標籤的版本),您不應該關心從哪個分支創建新的分支。

+0

我的措辭可能是錯誤的。我說'some_feature'的地方是指一些大家族的子特徵,我說'some_task'我的意思是其中的'子特徵'。我明白工作流程應該是面向工作的,而不是面向開發人員的。我會更新我的問題。 –

+0

@TudorTimi我同意,但我的答案仍然存在。使用...更好。 – VonC

+0

關於時間戳與標籤的關係,我們沒有任何標籤,因爲我們沒有定義任何中間里程碑。目前我們只有時間戳。談論除了釋放以外的目的的標籤會很有趣。我將不得不提出一個關於這個問題的新問題。 –