2011-08-24 23 views
0

我正在使用Git來管理CodeIgniter項目。我在本地機器上工作並推送到遠程服務器,在那裏測試所有內容。然後我使用git ftp push更新另一臺主機上的生產站點。如何在本地工作目錄,遠程工作目錄和git ftp目標中擁有不同版本的文件?

現在,爲了使這項工作,我需要三個不同的index.php文件,每個環境一個,我只是設置一個不同的環境變量。

所以我需要gitignore index.php文件,甚至git-ftp-忽略它。對於它正在工作的ftp。對於正常的gitignore來說,它並不是:它不斷更新遠程服務器上的index.php文件。

我試着做git rm --cached index.php,但我得到的是它完全刪除遠程服務器上的index.php文件。

我在做什麼錯?

編輯:看來這不是我能用git做的事情,但是I've found a better way to set the CodeIgniter environment variable

回答

3

首先,忽略機制對已在存儲庫中進行跟蹤的文件沒有任何影響。因此,如果您希望.gitignore正常工作,則必須從存儲庫中刪除該文件(如您所做的那樣,使用git rm --cached),但正如您所看到的那樣,在更新遠程存儲庫時它將被刪除。

綜上所述,我不認爲你應該在這種情況下.gitignore這個文件。 git中被忽略的文件的語義有一個微妙的問題,它讓我感覺很多次 - 忽略的文件被認爲是一次性的,因爲機制是爲構建產品而設計的。你在這裏有一個你想被忽略的文件,但是很珍貴,而git目前沒有指定的方式。

例如,在你的情況,如果您手動重新index.php,將顯示所有做工精細,但這時如果使用git checkout old-commit搬回到老的版本,其中index.php被跟蹤,然後回去的地方,你之前,git checkout -,您的index.php將被刪除!

我建議你改變你的index.php到源代碼的權利,從其他一些文件,或者是設置環境變量:

  1. 以外或是在倉庫中,忽略,在一個從未在存儲庫中跟蹤的路徑

理想情況下,然後還爲其他文件不存在時添加默認值。

+2

感謝您的回答。我知道這不是我可以用git解決的問題。所以,尋找其他東西,我發現這個:http://philsturgeon.co.uk/news/2009/01/How-to-Support-multiple-production-environments-in-CodeIgniter – Carlo

0

這是一個古老的問題,但我也是這麼做的,過去也一直在努力。

發生了什麼是因爲index.php最初並不在您的.gitignore中,所以您的所有存儲庫都會跟蹤index.php。

當您更新開發站點上的.gitignore並將其從存儲庫中刪除時,它所做的是將「deleted index.php」傳遞給您的生產站點。如果您的生產站點仍然缺少ITS上的index.php。gitignore,它會「刪除」index.php,因爲它應該。

然後您需要做的是確保您將index.php添加到每個存儲庫的每個分支上的每個.gitignore。那麼你可以使用rm --cached,一切都會按預期工作。

相關問題