2017-02-22 53 views
1

我問了幾天前how to commit an arbitrary directory tree in ClearCase,我收到的答案是使用clearfsimport工具。這在目前的完美無缺,並可以「​​進口」到ClearCase中(到動態視圖)任意目錄樹(從一些外部的文件系統目錄):如何在任意目錄樹上執行更新

clearfsimport -recu -nset /some/external/directory/foo . 

我的工作流程是,我做我所有的工作,在外部目錄(foo)中測試,當我很高興時,我使用上述的clearfsimport工具將我的源代碼提交給ClearCase。到目前爲止,這在最初的提交中起作用,但現在我發現自己想要導入修改過的源代碼。實際上,我需要導入一個新的目錄樹來代替現有的foo目錄。這些更改可能是普遍的:添加,刪除或重命名文件/目錄,更改爲目錄或符號鏈接的文件(反之亦然)。實際上,我們可能會討論兩個非常不同的目錄樹,其中有非常詳細的diff -r輸出。

我打算使用下面的工作流程:

ct co . 
ct rm foo            // remove existing dir from view 
ct ci . 
clearfsimport -recu -nset /some/external/directory/foo . // import the new dir version 

你能看到歷史等方面與上述方法有問題?

充分披露我保持我的項目(在/some/external/directory)使用Git,所以我跑clearfsimport(刪除特定的git-文件如.git.gitignore等)之前創建我的項目的一個「乾淨」的副本。我通常在git中有更詳細的歷史記錄,但我只對維護ClearCase中特別值得注意的「里程碑」的歷史記錄感興趣,其他團隊成員可能想查看我的代碼及其隨着時間的演變。話雖如此,我不想(至少暫時)使用任何工具將git與ClearCase聯繫起來,並且更願意將事情簡單化。

我澄清,我試圖建立的工作流程只是一種方式(外部目錄到ClearCase),我將導入到動態視圖中。

縱觀手冊頁clearfsimport我看到像被提及「兩遍」和像-rmname選項,使我的東西,它有可能只是運行clearfsimport與目標作爲一個現有目錄結構(即不首先必須要有ct rm)。但我不確定哪個咒語正確使用,以及它是否可以處理給定名稱以各種方式(例如從文件到目錄,從目錄到符號鏈接或從符號鏈接到文件)進行更改的情況,或者如何處理重命名歷史。

回答

1

您是否發現上述方法在歷史等方面存在問題?

是的:你不應該rm什麼時候使用clearfsimport
只需導入到相同的視圖/目標文件夾,ClearCase會爲您檢測新的/修改/刪除的文件,將檢查,更新或刪除相應的文件。

添加-rmname optionclearfsimport,和ClearCase將確保「鏡子」你的進口,這意味着在源文件夾中刪除的文件將在目標文件夾中刪除。

「使用咒語」與以前相同,只是額外的-rmname參數。

+0

我只是有點不安的是'clearfsimport'會做正確的事情,當涉及到的名字,其類型已改變(例如從文件到符號鏈接或從符號鏈接到目錄),這就是爲什麼我認爲'ct rm'會導致一個乾淨的石板。但我明白你的答案是說只要信任'clearfsimport'做正確的事情... –

+0

@MarcusJuniusBrutus我同意,這需要嵌套邊緣情況下,但一般來說,'clearfsimport'是爲這個用例。 – VonC

+0

@MarcusJuniusBrutus rm的問題是你完全失去了所有已修改的公共文件的歷史。 ClearCase會將它們視爲沒有歷史記錄的新元素。 – VonC

0

你有沒有使用快照視圖,並直接在ClearCase的工作考慮,這隻會你的方法