簡體   English   中英

如何在本地工作目錄,遠程工作目錄和git ftp目標中擁有不同版本的文件?

[英]How can I have different versions of a file in the local working directory, remote working directory and git ftp target?

我正在使用Git管理CodeIgniter項目。 我在本地計算機上工作,然后推送到遠程服務器,在此測試所有內容。 然后,我使用git ftp push來更新另一台主機上的生產站點。

現在,要進行此工作,我需要三個不同的index.php文件,每個文件用於一個環境,在這里我只是設置了一個不同的環境變量。

所以我需要gitignore index.php文件,甚至git-ftp-ignore。 對於ftp,它正在工作。 對於普通的gitignore不是:它會不斷更新遠程服務器上的index.php文件。

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

我究竟做錯了什么?

編輯:看來這不是我可以用git做的,但是我找到了一種更好的方法來設置CodeIgniter環境變量

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

總而言之,在這種情況下,我認為您不應該.gitignore文件。 關於git中被忽略文件的語義的微妙之處使我無數次-被忽略的文件被認為是一次性的 ,因為該機制是為構建產品而設計的。 您所擁有的是一個您要忽略的文件,但是它很寶貴,而git當前沒有指定該文件的方法。

例如,在您的情況下,如果您手動重新創建index.php ,則看起來一切正常,但是如果您使用git checkout old-commit移回到跟蹤index.php的舊版本,然后轉到回到以前的位置,通過git checkout - ,您的index.php將被刪除!

我建議您更改index.php以從其他一些文件中為環境變量獲取正確的設置:

  1. 倉庫外
  2. 或位於存儲庫中,被忽略,並且位於存儲庫中從未跟蹤過的路徑

理想情況下,然后為該其他文件不存在時添加一個默認值。

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

發生的事情是,由於index.php最初不在您的.gitignore中,因此所有存儲庫都將跟蹤index.php。

當您在開發站點上更新.gitignore並將其從存儲庫中刪除時,其作用是將“已刪除的index.php”傳遞給生產站點。 如果您的生產站點仍在ITS .gitignore上缺少index.php,它將按需“刪除” index.php。

然后,您要做的是確保將index.php添加到每個存儲庫每個分支上的每個.gitignore中。 然后,您可以使用rm --cached,一切都會按預期進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM