2013-04-26 129 views
3

在我們的.gitignore文件中,我們有database.php,因爲它是一個需要具體到每個開發人員的本地安裝一個數據庫配置文件。但是,每次我簽出分支時,我都必須重新創建該文件。它很爛。混帳:如何添加一個文件,但沒有跟蹤它

如何添加的文件,以便它不會消失每一次,也沒有跟蹤?

+0

你可以用一組環境變量替換'database.php'嗎?然後每個開發人員只需設置他們的環境,並且可以避開問題。 – 2013-04-26 06:18:02

+0

@mu這正是我們試圖避免的。我們有很多分支機構,每次都需要重新配置環境,這會影響生產力。 – emersonthis 2013-04-26 09:44:08

+0

請不要這樣做!一個可選的,記錄的,特定於實例的,未經修改的'database-local.php'設置文件就是你想要公開給開發者的東西。 – 2013-11-03 00:12:21

回答

4

這是一個非常糟糕的主意將文件添加到版本控制下的存儲庫,然後要求混帳不跟蹤對文件進行任何更改。這是版本控制下添加的文件是爲了進行版本控制和跟蹤,如果你不想跟蹤任何對文件的更改,拇指法則是不要在首位添加。

一致認爲人們有自己的喜好,和git支持這些流程在一定程度上爲好,但你會用它很少見的人,將有利於更清潔和直接的解決方案來代替。實際上,OP請求的用例(在版本控制下添加一個文件,並讓git停止跟蹤對文件的任何更改,併爲將來的所有克隆/提取/提取做好準備),這在git中不可行所有。

.gitignore用於排除偶然在版本控制下發生的文件,也用於git未在git status等命令中列出對它的任何更改。但是如果一個文件已經存在於版本控制之下,那麼git並不關心該文件是否爲.gitignore的一部分,並開始跟蹤對其的更改。

相反,我會建議您添加一個名爲database-template.php的模板文件,並讓每個用戶創建它的一個副本爲database.php並將其更改輸入到該文件中。你也可以寫一個簡單的腳本來做到這一點。

除此之外,將database.php添加到您的.gitignore,您可以輕鬆前往,以便用戶的本地副本不會進入版本控制。

替代解決方案: 還有另一種方式來做到這一點,但每個開發者應該做他的本地回購,這的確是一個不錯的辦法IMO:

# Ask git to stop tracking any changes to database.php 
git update-index --assume-unchanged database.php 

# If you want to start tracking changes again to database.php 
git update-index --no-assume-unchanged database.php 
+1

爲什麼這是一個非常糟糕的主意? – mounds 2013-04-26 05:34:13

+0

我也很困惑爲什麼這麼糟糕。我認爲這是gitihnore的確切原因 – emersonthis 2013-04-26 09:45:47

+0

@Emerson,'.gitignore'的確切原因是忽略自動生成的可能很容易重新創建的亂碼(如編譯器生成的對象文件和二進制文件,日誌,文本編輯器交換和備份文件等)。當你執行'git status''或'git add .'時,這些文件會阻礙你,所以'.gitignore'存在。 – kostix 2013-04-26 14:40:03

8

[編輯] 確定的副本包含針對此問題的更強大的解決方案(git submodules)。這個答案是有效的,但經過進一步的考慮,如果你希望一個團隊在每個克隆中獲得相同的行爲是不合適的。 [結束編輯]

GIT中支持此與--assume-unchanged選項git update-index。這可以讓你提交database.php的生產版本,並讓開發人員更新這個文件的本地版本以指向他們的本地資源。

git add database.php 
git commit 
git push 
git update-index --assume-unchanged database.php 

當/如果需要更改database.php中的量產版:

git update-index --no-assume-unchanged database.php 
git commit -a 
git update-index --assume-unchanged database.php 

而且每個開發人員將需要運行git update-index --assume-unchanged database.php如果想這也因爲此命令隻影響本地存儲庫。

你會希望確保由database.php失敗的開發商提供了一些機制未能對非生產機器 - 不希望開發商指着生產明顯:)

注意你將需要刪除爲database.php文件從您的忽略列表中,然後才能添加它。

+0

下面是我嘗試'git add database.php'時得到的結果:fatal:pathspec'database.php'與任何文件都不匹配。我認爲這是因爲它目前在.gitignore。我需要先從gitignore中刪除它嗎? – emersonthis 2013-04-26 11:03:43

+0

是的 - 已更新我的答案,謝謝! – mounds 2013-04-26 11:57:32

+0

@mounds - 你錯過了這個答案的關鍵和重要部分。 'git push'將會** NOT **和** CAN NOT **將您的更改推送到索引(對於'--assume-unchanged'),因爲它不是可以傳播到遠程的實際更改。該選項僅爲本地回購中的工作樹的文件路徑設置「assume-unchanged」位。因此,每個開發者都需要在他的本地倉庫中運行這個命令(在每個新克隆之後),以確保不會跟蹤對'database.php'所做的更改。 – Tuxdude 2013-04-26 16:38:10

相關問題