我有一個php webapp,它必須在指定的文件夾中生成一些pdf文件。在生產服務器上,我也在使用git,問題是一些pdf文件不時消失。 .gitignore我已經添加了我的pdf文件夾和* .pdf在生產服務器中使用git
git是否有刪除我的* .pdf文件的機會?
我有一個php webapp,它必須在指定的文件夾中生成一些pdf文件。在生產服務器上,我也在使用git,問題是一些pdf文件不時消失。 .gitignore我已經添加了我的pdf文件夾和* .pdf在生產服務器中使用git
git是否有刪除我的* .pdf文件的機會?
這是一種猜測,因爲我們確實需要確切知道哪些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.pdf
和pdfs/0002.pdf
,並且因爲這些路徑目前被我們忽略,這決定他們可以靜靜地覆蓋。 (這是你想要與構建產品的情況發生,畢竟是什麼。)
然後,當你回到master
,具有:
git checkout master
...git(相當合理)認爲可以刪除所有這兩個PDF文件,因爲它們已從a1b2c3
的版本庫中刪除。所以,你只剩下:
pdfs/0003.pdf
pdfs/0004.pdf
...和原來忽略pdfs/0001.pdf
和pdfs/0002.pdf
創建您的應用程序都沒有了。
這可能不是完全發生的情況,但它是一個顯而易見的合理操作集合的示例,可能會導致您的生產服務器丟失一些PDF。
我建議的實際解決方案是爲存在從未的PDF創建新的目錄。然後檢出不同版本的代碼不應該觸及該目錄。
首先,我不明白爲什麼PDF文檔放在源碼樹內。如果我在哪裏我總是將上傳的材料存儲在不同的文件夾中,那麼應用程序的源代碼。
其次,我不認爲Git會爲你隱藏你的PDF。當然,如果你的.gitignore的設置就像你說的那樣。恐怕有一些其他程序正在干擾你的PDF。
除了Git可能不會造成這種情況,我建議如下。
以前用過的這些PDF文件是否在存儲庫中被跟蹤?您是否在生產服務器上的舊版和新版代碼之間切換? –
是的,直到某個時間點回來,pdf文件也被git跟蹤。 –