2011-10-06 41 views
2

我一直在努力學習和習慣版本控制,更具體地說git。然而,我的開發團隊目前(和在可預見的未來)完全由我組成,因此,我的工作重點是嘗試掌握分支和提交技術。單人開發Git

我看過並嘗試過一些工作流程示例,如git-flow。但是,我似乎無法真正掌握如何使用它們。例如,多長時間一次以及應該提交哪種內容?我應該什麼時候分支出一個新功能?我經常發現自己在編寫新功能的情況下,突然意識到我需要修復以前的編碼錯誤,或者認爲要完成一項新功能,並在稍後意識到我仍然錯過了某些事情。

這會導致一些令人困惑的分支和提交,這是絕對沒有幫助的。我發現自己想知道幫助版本控制的真正含義。

我在做什麼錯了?或者不是用於單人開發的git /版本控制系統?

回答

8

如果您剛開始使用版本控制,對於單人項目,那麼最初不要擔心所有這些工作流程等。首先,習慣於提交。

你剛剛運行你的程序和測試的東西,它的工作?太好了,承諾。要做一些你不太確定的事情會起作用嗎?承諾。儘早並經常提交。關於git的好處是,如果你選擇了一個不好的地方提交,提交是可撤消的(提示:如果它不能編譯,它可能是一個糟糕的地方 - 但也有例外,一旦你對git rebase -i和10和git add -i有一種先進的工具,所以先習慣基礎!(嵌套括號很有趣!)))。

現在,關於切換焦點 - git有很多有用的工具。

舉例來說,如果你要修復一個bug,但有一堆已經等工作......

git stash save 

的Git然後採取所有未提交的更改,保存它們,並恢復到上次提交。你可以修復bug,測試,提交,然後

git stash pop 

所有這些變化然後重新應用在bugfix之上。

如果你工作在一個小功能,但後來意識到這實際上是一種複雜的,你可能會犯不止一次......

git checkout -b mynewbranch 

而且你去那裏 - 你現在在一個新的分支。您可以隨時回到另一個分支

git checkout someotherbranch 

您可以同時使用這與git stash保存未提交的修改,然後交換到另一個分支做完全不同的事情。當你想回來,git checkout mynewbranch

作爲一個稍微更先進的工具,如果你有一個微小的錯誤修正之作,而不想與整個積攢的事情打擾,你可以做

git add -i 
# select what changes to include 
git commit # commits only what you selected 

這是由於git的指數 - git add -i可讓您選擇從單個行級別到工作副本到索引的複製內容,然後git commit將其保存爲提交。通過這樣做,您可以非常快速輕鬆地從一系列其他更改中挑出較小的修復。但是,請注意,這意味着您剛剛提交了一些從未編譯或測試過的內容;所以它需要注意不要犯一些被完全破壞的東西(你通常應該避免提交完全破壞的代碼,因爲它破壞了git bisect-一種用於追蹤迴歸的非常方便的工具)。

一旦你習慣了這個基本流程,你可以開始向它添加一些過程。例如,您可以保留一個v1.x分支,僅針對1.x系列進行錯誤修正。管他呢。使用適合您的工作流程。

+1

+1提交頻率。承諾很便宜;早期和經常! – Nic

+0

+1好答案。儘管如此,小修正。它應該是'git stash save',或者相當於'git stash'。 – vhallac

+0

@vhallac,哎呀 - 混合它與'流行':) – bdonlan