2009-06-05 101 views
31

我正在嘗試使用有關使用TFS源代碼管理的最佳做法。現在,無論何時我們進行構建,我們都會使用版本號將檢入的文件標記到TFS中。這種方法比單純檢查註釋中的文件和版本號更好還是更差? 如果有必要,您可以使用變更集返回還是標籤仍然更通用?TFS:標籤與更改集

謝謝!

回答

32

它們有兩個不同的用途,ChangeSets是當文件實際發生變化時,並且希望保留該更改的永久記錄。標籤標記某些版本的文件,以便您可以輕鬆回到那一點。除非你的構建實際上在源代碼管理下更改了文件,並且你希望記錄這些更改。你應該貼上標籤。

另外,標籤的資源密集程度要低得多。並且您可以在同一版本的文件上有多個標籤。

+16

標籤可以是可怕的,它們可以只應用於代碼庫的一部分,它們可以在事後被更改並且可以被刪除。 CS號碼是一個常數。它不能被改變,應該總是得到最新版本(除非TFS管理員使用Destroy從源代碼控制中刪除文件,而標籤不能恢復)。 以我的經驗,一個標籤是很好的,因爲你可以給它一個人類可讀的名字並且可以被搜索。 CS號碼可以很好地作爲替代品。 – jessehouwing 2013-02-13 10:24:51

2

現在,任何時候我們做一個構建,我們的標籤已簽入TFS與版本號

你並不需要這樣做的文件。 TFS可以通過多種方式引用代碼庫的狀態,其中標籤確實是一個 - 但構建甚至更改集也是如此。你可以做一個Get Specific Version...並檢查在Type下拉列表中選擇一次查看可用的方法來重建一個特定的點:

Changeset 
Date 
Label 
Latest Version 
Workspace Version 

Changeset允許你只是任何變更後獲得; Date很明顯; Label也是如此,除了自動構建*創建標籤(從此下拉列表中選擇Label,然後看看Find Label對話框)。

*我認爲它是自動的!除非這是我們現在專門設置的東西......

+3

當您在Build Definition設置中(在高級部分下)選擇選項時,Team Build可以自動標註。 – jessehouwing 2013-02-13 10:22:56

7

您應該標註組成您的版本的源文件的版本。如果你使用的是TeamBuild,它會自動爲你做。它結合了您的構建定義的名稱,日期和內部版本號。所以你不需要做任何事情。

您的其他選項不是非常傳統,需要大量不必要的工作。如果我理解正確,那麼您將在構建過程中檢查您的源文件,然後使用簽入註釋中指定的版本號檢查它們。這正如Alex所提到的,在構建過程和源代碼控制庫方面非常耗費資源。此外,如果版本信息嵌入到註釋中,您將如何獲取特定版本的源文件?這將是非常困難的,你將不得不坐下來編寫自己的應用程序,使用TFS源代碼控制api通過在簽入註釋中搜索版本號將源文件下載到工作區。這會造成不必要的複雜性和令人頭痛

如果使用標籤代替,則可以在VS IDE中通過標籤獲取以下載組成該標籤的源文件。您甚至可以讓TeamBuild使用標籤,而不是在構建自動化期間下載最新的源文件。這樣您可以輕鬆構建應用程序的以前版本。使用標籤,如果代碼發生變化,只需獲取該標籤,然後獲取特定的變更集,然後執行快速標籤或創建全新標籤,就可以將以後的變更集應用於現有標籤。

標籤功能非常強大,使用方便,是TFS的一部分。不要提出需要大量努力才能使其工作和維護的定製解決方案,只需嘗試使用已有的解決方案即可。

0

StackOverflow不會讓我評論上面的答案,所以我把它寫成一個新的「答案」。我想澄清一下上面列出的一些誤解。

首先,使用TFVC標籤比使用更改集更耗費資源。多很多。諸如Branch,Merge和Label by Label之類的命令速度較慢。對於擁有巨大數據庫的企業服務器,您不希望使用標籤。

其次,構建不會自動創建標籤,但默認構建步驟包括創建標籤的步驟。

第三,正如其他人已經提到的,標籤可以被移動或刪除,所以它們比不可變的變更集更不可靠。

總的來說,我建議你不要使用標籤。最簡單的選擇是隻記住您的構建的變更集編號。或者,如果你想隔離不同的發行版本,你應該創建發佈分支。

標籤適用於小型系統,但不適合大型企業。

+0

在我們的設置中,我們在VSTS代理上創建了構建過程,在構建成功後在該版本的代碼上創建一個標籤。這並不能減輕你所討論的性能問題,但是確保標籤更可靠,因爲它們引用了一些與Chanset編號一樣永久和明確的內容。它使我們能夠輕鬆找到構建版中包含的代碼版本,但是如果某人編輯或刪除了該標籤,這不會是一場災難。 – 2017-08-22 14:18:37