2014-04-20 164 views
0

我使用svn進行簡單項目的版本控制。這是emacs的主要模式 ,所以它只有一個文件。保持svn文件夾之間的修訂歷史記錄

我想要一種方法來維護開發和發佈給用戶的代碼的修訂歷史,所有這些都是從同一個svn倉庫完成的。我的目標之一是用戶可以檢出一致的URL,並且用戶始終能夠運行svn update以獲得最新的「發佈」,儘管發佈非常非正式。

我目前正在「開發」文件夾中進行我的開發,根據需要提交更改 以開發。當準備發佈更改時,我將mymode.el從devel複製到「trunk」(可能是一個糟糕的名稱選擇 - 這是文件夾用戶檢出)以覆蓋具有新更改的工作副本,然後提交到樹幹。

我敢肯定,這可保留主幹, 修訂歷史記錄,但該方法似乎有點kludgey,我覺得我沒有使用SVN 它的預期的方式。

有沒有更好的方式將變化從開發變成主幹, 或者組織我的項目以允許更好的方法?

回答

0

您當前的風格是,好了,醜:(?爲什麼我理解正確的話)

  • 其中任何SCM的任務是整個代碼演變容易重建,但在你的情況,如果你只是複製在多個修訂版本文件中從WC修改爲WC - 您將失去中繼狀態與devel-branch狀態之間的關係:主幹工作爲沒有已知父代的標記集(嘗試回答問題「我從哪個分支修訂版創建$這個版本在後備箱裏「 - 你就會失敗)

工作流程和習慣和口味可能不同。無論如何,總是更喜歡「分支每任務」的風格(並創建分支,即使是單提交更改),並在只有樹幹合併集。爲了您的目標:「提供永久URL到版本庫中代碼的不同版本」I(同樣,它是個人選擇)更喜歡使用「浮動」外部版本作爲發佈的URL(定期更改PEG修訂版)。也就是說,它可以是存儲庫根目錄中的目錄類型外部定義(「Release」,fe),映射到/ trunk的一些修訂版本(對於僅用於trunk的開發或對於幾乎任何其他任務的「Branch per task」工作流程 - 僅鏈接節點策略可能會更改)。

您的用戶總是會得到REPOSTORY/RELEASE,但它可以在開發過程中/行李箱@ 1,/行李箱@ 10 /行李箱@ 100,你就可以看到版本的歷史只是使用日誌(「釋放」意味着更改外部定義,因此 - 特別提交)

+0

我懷疑這是醜陋的。這就是爲什麼我在尋求幫助!我是否正確理解您正在推薦一些類似於空的「REPOSITORY/RELEASE」文件夾,該文件夾使用外部定義引用特定版本的trunk?發佈的歷史是否僅僅是外部屬性的歷史,還是我能夠做一個差異來展示一個版本和下一個版本之間的變化? – jake

+0

@jake-exteral文件夾是** NOT **真實的「物理」文件夾。它是虛擬文件夾,它看起來像在repo瀏覽器(TortoiseSVN)中的文件夾,在工作副本(如果您檢查了外部父項)中存在爲實際文件夾,但這只是使用專門構建的propset命令的結果。你想看截圖和相關命令添加到答案的示例嗎? –

+0

我想我明白了。仍然好奇我能夠得到什麼歷史。除了外部屬性的變化定義之外,svn日誌還會顯示什麼? – jake

0

如果您想標記好版本,請使用標籤。它更簡單,更清潔。你所遇到的問題是如果我請求trunk歷史記錄,Subversion會繼續下去。你不會看到發生在devel分支上的任何有趣的事情。

我更喜歡在樹幹上做所有的工作,並且只在必要時才分支。這通常意味着在發佈之前,一些開發人員正在開發該版本,另一些正在開展未來工作。使用標籤標記您的版本。

通過這種方式,您將獲得完整的歷史記錄,並且仍然能夠取消您的優秀版本。

如果您正在研究的功能需要一段時間,並且您擔心會混合主幹,請創建功能分支,然後將該功能合併到主幹中。

+0

在發佈我的問題之前,我閱讀了大量有關分支的文檔,我認爲它可能會因爲我需要的功能而過分強大。這個項目永遠不會超過2或3個開發人員,而「發佈」不會很正式。 「在發佈之前」的方案並不適用。如果我正確理解標籤,它只是一個不同的文件夾,對吧?我不想讓用戶更新他們的URL,就像我在OP中所描述的那樣。 – jake

+0

@jake - 即使在獨立開發中,我更喜歡「每個任務的分支」 –

+0

@jake標籤僅僅是_folders_,但是您賦予其意義的文件夾。我有一個預先提交的鉤子,允許您創建,但不能修改標籤,使標籤更像標籤。是的,在小商店裏,你不一定要創建一個發佈分支。如果我不需要,我不會。對我而言,分支只是允許平行工作的一種手段。如果你發佈了你的版本,你可以從修訂版本創建一個分支來創建一個標籤,如果你必須修補該版本的話。 –