2016-09-27 63 views
1

雖然我知道git索引如果在通過分段很多較小的區塊進行復雜合併時很有用,我不明白爲什麼非合併應該或需要通過索引。考慮下面的例子。如何使用git索引來測試更改是否有效?

我在一個項目上工作,並在許多文件中進行更改。有些我打算提交,有些可能只是在調試過程中臨時使用(例如跟蹤語句)。功能完成後,我需要進行提交。現在,讓我們假設我沒有執行所有必要的更改而犯了錯誤,並且提交被破壞。除非我在某個地方結賬,然後重新編譯和重新測試(我認爲這不是一個高效的方法),否則我甚至不知道這個問題,並且稍後必須重寫該提交。

它使我認爲,也許我應該編譯和測試只有分段內容,如果這將等於工作副本本身,它會更容易。但未跟蹤文件的問題仍然存在。

應該如何使用索引來確保階段性變化是好的?

+0

您可以使用'git stash'刪除所有臨時工作(使用'git stash apply'進行恢復)。留下未跟蹤文件的問題,但是... – knittl

+0

@knittl查看'git stash save -u'。 – Schwern

回答

3

除非我簽上演變化的地方,並重新編譯和重新測試(不太富有成效的做法在我看來)

這是非常有成效的。它被稱爲"continuous integration testing"或CI。這被認爲是最佳做法。 CI服務器可以免費找到這些日子,包括TravisCI,GitLab CIAppVeyor用於Windows測試。

CI確保代碼的乾淨副本在乾淨的環境中進行測試。這會產生你提到的那些問題,忘記提交一些東西,以及其他許多問題。它還避免了基於特定開發機器的任何假設,如您忘記聲明的任何依賴關係。

CI可以運行用戶可能遇到的操作系統,編譯器和依賴關係的各種組合。它還使得捐助和接受捐款變得更加容易,因爲CI服務器確保這些捐款經過測試。

而且,也許最重要的是,它確保測試運行。人們有時會忘記,或者變得懶惰。


我在一個項目上工作,並在許多文件中的更改。有些我打算提交,有些可能只是在調試過程中臨時使用(例如跟蹤語句)。

你想要它,以便當你運行git status什麼它說要上演。那麼就沒有必要仔細檢查git status來找出什麼是和不要上演。這大大減少了丟失東西的機會(或者意外提交了某些東西)。

$ git status 
On branch master 
Your branch is up-to-date with 'origin/master'. 
nothing to commit, working tree clean 

首先是要明智地使用.gitignore忽略不屬於被提交的任何文件。這包括構建工件和本地配置文件。

其次是避免習慣性地從承諾提交手寫的調試語句。它真的是很容易意外提交它們,其他開發人員不會從中受益。相反,使用調試標誌並將它們放入。根據需要翻轉調試標誌。


這使我想到,也許我應該編譯和測試只上演的內容,它會更容易些,如果這樣做等於工作副本本身。但未跟蹤文件的問題仍然存在。

這是一個好主意。你可以通過stashing your changes來完成。存儲是存儲正在進行的工作的一個小小的地方,有點像保存補丁文件。基本的工作流程是...

# Save all changes except what is staged 
$ git stash save -ku 

...do your testing on the staged change... 

# If it worked, commit the change. 
$ git commit 

# Restore your unstaged changes and untracked files. 
$ git stash pop 

-k說保持任何已經上演。 -u表示存儲未跟蹤的文件。


一般來說,任何需要所有人都小心的過程將會失敗。持續集成意味着您不能忘記運行測試,或在特定環境中運行測試。保持你的工作目錄清潔意味着人們不必仔細檢查要登臺或不登臺,他們可以習慣性地把所有東西都展示出來。人們可以撥打git add .git commit -a,併合理確定它是正確的。

相關問題