2013-06-06 41 views
5

我在我的Java應用程序類路徑下有一個tracking.properties文件,它可以像「seq = 10」一樣改變爲「seq = 17」。如何在第一次提交後保護git倉庫中的文件免於提交?

屬性文件現在被放入github存儲庫。我希望該文件存在於存儲庫中,以便其他開發人員可以克隆它,並且文件不會被他們推送,因爲「seq」可能因用戶而異。

我試圖

git rm --cached -f <file> 

再加入tracking.properties到的.gitignore,但它導致在delete一個git倉庫的屬性文件。它應該保持在那裏,只允許一次提交。可能嗎?

回答

3

考慮爲此使用「模板」模式。

檢查文件爲tracking.properties.template並將tracking.properties添加到您的.gitignore。然後,在簽出存儲庫後,開發人員應將模板文件複製到tracking.properties,然後按需要進行編輯。該文件將被忽略,因此文件不會顯示爲髒文件,開發人員不太可能對其進行更改。

這不會阻止模板文件的更改,但這可能是一件好事 - 您可能需要在將來對其進行更改。重要的是,本地只有更改tracking.properties是可能的,沒有太多的混淆。

+0

這對開發人員來說確實很好。但我的應用程序有望從非開發人員克隆(github沒有下載按鈕,所以克隆),我寧願不強迫他們複製和重命名文件儘可能...是否有任何其他更自動的方法? – linzhixing

+0

@linzhixing如果他們需要改變文件中的某些內容,那麼文件就不多了。 Git沒有「追蹤文件不變」的概念 - 文件被追蹤或者沒有追蹤。如果有某種設置腳本,則可以讓腳本負責製作副本。否則,您可以記錄該步驟。 – cdhowie

+0

謝謝!我終於在seup shell腳本中包含了cp命令。 – linzhixing

2

如果每個開發人員克隆回購

git update-index --skip-worktree tracking.properties 

Git會永遠將這個文件後,如果它沒有本地更改,即使它有後運行此命令。

如果你確實需要提交本地修改它,你可以把它恢復到正常這樣

git update-index --no-skip-worktree tracking.properties 

另一種替代方案是

git update-index --assume-unchanged tracking.properties 

Here is a good explanation of the subtle differences between skip-worktree and assume-unchanged。我認爲skip-worktree對你更好,因爲它忽略了reset --hard,並在上游版本發生變化時保留標誌。