2012-11-24 35 views
1

我最近開始開發一個新的圖書館,並使用Gi​​t的修訂控制。我決定遵循非常受歡迎的博客文章A successful Git branching model來管理分支。現在是時候讓我做出我的第一個版本,並且我希望在管理下面描述的特定文件集時提供一些建議。git的承諾不同的文件集的開發和掌握

在開發分支和功能分支,我希望所有的「配套文件」,如用於編譯的makefile文件和使用的doxygen生成文檔的readme.md文件。 (注意這些只是一些例子,我有更多的「支持文件」。)

該博客文章還表示,主分支的提交是按照定義發佈的版本。我希望發佈包含所有「二進制文件」(其中包括例如編譯產生的目標文件和包含文檔的html文件)。這些文件應該被提交給主分支,以便客戶可以使用標籤從存儲庫中進行克隆並獲得所需的版本。

我不想讓在發佈的「支持文件」(因爲我不希望給文件的客戶堆,他們不想或不能使用)。同樣,我不希望在開發和功能分支中對「二進制文件」進行版本控制。因此,我想提交一組文件進行開發,另一組文件要掌握。 (當然,這裏也有一組對兩個分支都是「通用」的文件)。但是,我對如上所述保持主控和開發分支不同步持懷疑態度。

請問我提出的模型好聽?如果是這樣,我應該如何處理不同的文件,致力於開發和掌握?有沒有更好的方法來處理這種情況?

我已經通過上述博客頁面上評論的每一個走了,在網上搜索,並且搜索也這裏在計算器上。從搜索結果來看,這個帖子GIT repositories with some different files似乎是唯一一個接近我的問題的地方。這些都幫助我找出解決方案。

回答

1

IMO提出的解決方案是不好的。您的問題的常見解決方案是:

  • 版本控制所有「支持文件」。如果你關心這些文件是否被修改或刪除,那麼它們應該在版本控制下
  • 如果它們僅僅是編譯過程生成的,那麼它們不是版本控制的「二進制文件」。編譯的代碼和Makefiles是重要的。如果使用二進制文件編譯代碼,那麼您可能會在二進制文件中顯示「bin」文件夾。
  • 圍繞您想要交付給客戶端的包創建構建過程。您可以爲他們可以訪問的客戶端構建一個包,也可以讓他們自己運行「包腳本」。 「包腳本」可以克隆回購,構建包,並刪除回購只是通過在命令行上執行它。

要了解更多關於git的分支模型和它們如何適用於發展退房http://git-scm.com/book/en/Git-Branching

+0

感謝您的回覆。 讓我澄清一點。 「支持文件」受版本控制。我只希望他們不會被委託給主分支。您是否建議「包腳本」應該選擇性地從客戶端的主服務器簽出特定文件(即,跳過所有「支持文件」)?這可能是可行的,只是想澄清,如果這就是你的意思。 –

+0

這很接近。我不知道用git選擇性簽出特定文件的方法。但這個想法是正確的,你在客戶端過濾不需要的文件。我的Web開發世界的一個例子是創建一個Capistrano腳本,它可以在本地編譯scss和咖啡腳本文件,然後將scp腳本文件編譯到服務器。通過這種方式,您可以從客戶需求中分離回購,並將回購用於開發需求。我希望你能朝正確的方向發展。 –

1

使用Git流主分支擁有最新版本的提示,在語句中的缺陷是當你使用需要編譯的軟件。

在這種情況下,主分支是您從中創建實際版本的源版本分支。如果您按照定義查看分支模型,則您還需要在主分支中包含所有支持文件。這樣您就可以隨時創建最新版本的二進制文件。

就你而言,你說你不希望客戶擁有一堆他們不需要的文件,這意味着在你做一個發佈後你需要做一些額外的工作。用git-flow術語來說,在完成git流發佈之後,您需要執行編譯發佈的額外步驟。彙編的結果不應受修訂控制。使用原來的git-flow軟件,您需要手動開始編譯過程,如果您使用我的分支,git-flow (AVH Edition),您實際上可以通過使用掛鉤來自動完成此操作。

我願意說,github上的99%的項目,需要某種編譯,在master分支中也有所有支持文件。