2011-09-20 88 views
0

我有一個php webapp,它必須在指定的文件夾中生成一些pdf文件。在生產服務器上,我也在使用git,問題是一些pdf文件不時消失。 .gitignore我已經添加了我的pdf文件夾和* .pdf在生產服務器中使用git

git是否有刪除我的* .pdf文件的機會?

+2

以前用過的這些PDF文件是否在存儲庫中被跟蹤?您是否在生產服務器上的舊版和新版代碼之間切換? –

+0

是的,直到某個時間點回來,pdf文件也被git跟蹤。 –

回答

2

這是一種猜測,因爲我們確實需要確切知道哪些git操作序列導致文件被刪除才能確定。然而,理解(以及被廣泛誤解)的一個關鍵點是git的忽略機制是爲「一次性」的文件而設計的,比如構建產品。它不是爲珍貴的文件而設計的,但您不想保存在存儲庫中。 (至於那些語句的參考,這是在these emails on the git mailing list討論。)

爲了讓你所描述的情況的示例場景,假設在a1b2c3版本中,你必須致力於資源庫中的下列文件:

pdfs/0001.pdf 
pdfs/0002.pdf 

在歷史的某個後期階段(比如在您當前的master),您已經刪除了所有跟蹤的PDF文件,其中git rm -rf並將pdfs目錄添加到.gitignore。然而,Web應用程序仍舊產生的PDF文件,並把它們放入pdfs子目錄,現在你有以下忽略的文件:

pdfs/0001.pdf 
pdfs/0002.pdf 
pdfs/0003.pdf 
pdfs/0004.pdf 

什麼現在可能發生的是,如果你決定要看看老版的代碼,以:

git checkout a1b2c3 

... git會看到,它希望從該版本更新pdfs/0001.pdfpdfs/0002.pdf,並且因爲這些路徑目前被我們忽略,這決定他們可以靜靜地覆蓋。 (這是你想要與構建產品的情況發生,畢竟是什麼。)

然後,當你回到master,具有:

git checkout master 

...git(相當合理)認爲可以刪除所有這兩個PDF文件,因爲它們已從a1b2c3的版本庫中刪除。所以,你只剩下:

pdfs/0003.pdf 
pdfs/0004.pdf 

...和原來忽略pdfs/0001.pdfpdfs/0002.pdf創建您的應用程序都沒有了。

這可能不是完全發生的情況,但它是一個顯而易見的合理操作集合的示例,可能會導致您的生產服務器丟失一些PDF。

我建議的實際解決方案是爲存在從未的PDF創建新的目錄。然後檢出不同版本的代碼不應該觸及該目錄。

1

首先,我不明白爲什麼PDF文檔放在源碼樹內。如果我在哪裏我總是將上傳的材料存儲在不同的文件夾中,那麼應用程序的源代碼。

其次,我不認爲Git會爲你隱藏你的PDF。當然,如果你的.gitignore的設置就像你說的那樣。恐怕有一些其他程序正在干擾你的PDF。

除了Git可能不會造成這種情況,我建議如下。

  1. 有你的應用程序商店上傳材料應用程序本身的源代碼文件夾。
  2. 不要在服務器上提交(我不知道你是否正在這樣做,但如果通常的做法是在現場環境中修復某些事情,我可以想象出錯的東西)。在一臺實時服務器上,你應該只提取代碼,而且絕對沒有別的。