2013-01-31 39 views
1

我決定開始爲我的C++項目使用Git版本控制系統。我不熟悉版本控制。對於主幹來說很簡單,我只提交我擁有的所有項目版本。我將每個版本保存爲一個單獨的文件夾,因爲我知道我很快就會使用Git。但是我遇到了我的分支機構的問題。這些輔助文件應該在Git版本控制下嗎?

在開發的某個階段,我決定在分支中開發一個類。沒有版本控制,我不得不使用make「手動」分支。我將該類的最新頭文件和源文件複製到單獨的文件夾並開始在那裏工作。我在那裏做了幾個版本來同時工作。一個版本是根據計劃(爲此我製作「分支」)的班級的第一個原型。然後我添加了另一個文件,其中我複製了第一個文件,但刪除了似乎沒有必要的東西。這樣我有兩個版本,一個是我的所有想法和功能,另一個是我在代碼中真正使用的版本,沒有什麼目前沒有使用。

但後來我增加了更多。隨着發展的繼續,我決定將這個類作爲模板是個好主意。所以我添加了第三個版本,就像第二個版本,但現在使用多態性實現的一些功能是使用模板實現的。而且我還不能確定哪個版本是最好的,因爲現在說得還爲時過早,所以我想把所有3個都放在一起。

然後我做了另一個特殊文件:第三個版本頭文件的副本,其中每行可以標記或不標記。標記意味着我使用該特定方法,或者我確定它很快就會被使用,否則該行不會被標記。

然後,過了一段時間,我開始了一個新的分支。對於那個分支,我需要在第一個分支中開發的那個類的新版本。所以我只是將其中一個版本複製到新分支的文件夾並開始在那裏工作。現在我又有了一些輔助文件:我有兩個文件,一個用於刪除我使用的類方法,另一個用於編寫我需要的新方法。

現在我想開始使用Git,我想知道:對於所有項目的文本文件,計劃,圖表等,它很明顯 - 我把它們放在Git倉庫之外。每當需要協作編輯時,我都可以創建一個wiki或類似的東西。但是對於同一個頭文件的所有副本以及那些輔助的「標記」文件,我該怎麼處理它們?我的意思是,我把它們全部放在一個分支中是沒問題的,但是當我將一個分支合併到分支時會發生什麼?我不想擁有所有這些副本,版本和列表,只是我製作的最後一個類文件。

一方面,這些是編碼時使用的C++源文件。另一方面,它們不是軟件包的純源代碼的一部分,它們只是在我工作時幫助我,但永遠不會被編譯,因爲最終只有我選擇合併的類的最終版本,並且所有其他輔助文件,列表等僅供參考。

什麼是最好的事情? 感謝您閱讀我長的故事:)

編輯:這是我的個人電腦

+0

爲什麼不在回購計劃等?如果是,那麼找到正確的版本會更容易。至於你的其他問題,我不太清楚你想要什麼,但你可以通過使用不同的合併策略來改變合併作品的方式。如果他們有任何幫助,我會檢查「我們的」和「他們的」。您也可以將這些東西放在單獨的回購中,並將其作爲子項目或其他東西包含在內。 – Makis

+0

其實,我的意思是合併但排除一些文件。我找到了一個很好的解決方案:每次我合併之前,先做一個最後的「乾淨」的提交,並附上一條消息,說明我準備好了合併分支,然後在所有aux文件不存在的情況下合併分支 – cfa45ca55111016ee9269f0a52e771

+1

如果你只想忽略這些文件,在根文件夾中嘗試一個.gitignore文件。 – Makis

回答

1

你描述的是正常使用的分支:你有你的主分支(「官方」,如果它在那裏)和分支來開發新的功能(它並沒有真正要住在一個單獨的目錄,如果我理解你的話)。您可以定期將功能分支與主控制器同步,或者通過在主控制器上對其進行重新定位或合併其中的更改。反過來,您也可以使用下級分支來嘗試開發該功能的方法,並根據功能進行處理就像對主人的一個方面一樣。但是在這種情況下,你必須小心,只要你重新發牌。

你應該記住這是不容易在倉庫中重新創建任何數據,無論是源代碼,文檔甚至是設計草圖。可以重新創建的東西(目標代碼,自動格式化的文檔,...)應該被排除在外(任何改變都會產生差異來檢查)。您的存儲庫(特別是未發佈的分支)是您自己的工作區,它可能會讓您感到混亂。

看看在git homepage提到的那本書。

1

好上的本地回購,這顯然文檔和不源代碼,所以你應該把它從你的源代碼中分離出來。由於您的文檔似乎與分支有關,因此您仍應將其檢入到回購站中,但在單獨的doc目錄中。

關於合併:合併的工作方式最終取決於您。 Git的默認合併策略就是大多數人最需要的。但是如果你說主分支合併應該帶上代碼而不是文檔,那就沒問題了。只需合併:

git merge mybranch --no-commit 
rm -rf **docu-dir** 
git add -A 
git commit 
+0

謝謝,我現在已經想通了。但現在有一個新問題:我可以添加所有文檔並忽略Makefile.am嗎?我的意思是,如果我只是在不編輯Makefile.am的情況下將這些文件添加到repo中,automake會在配置和構建二進制文件時忽略它們。 (這是我想要的) – cfa45ca55111016ee9269f0a52e771

+0

我沒有makefile的使用經驗,但是如果你把你的文檔放在一個單獨的文件夾中,應該很容易忽略 – Chronial

1

始終將文檔保存在與源代碼相同的存儲庫中。如果你不這樣做,你的文檔將會腐爛。這是因爲文檔重新寫入了某個版本的軟件,所以它必須像軟件開發一樣進行開發。

如果你的文檔automaticaly產生或編譯成另一種格式,僅提交源數據,生成文件和生成裝置的結構,就像你的源代碼做。

相關問題