在生产服务器中使用git

问题描述 投票:0回答:2

我有一个php webapp,它必须在指定的文件夹中生成一些pdf文件。 在生产服务器上,我也在使用git,问题是一些pdf文件不时消失。 在.gitignore上,我添加了我的pdf文件夹和* .pdf

git是否有可能删除我的* .pdf文件?

git production-environment
2个回答
2
投票

这是一个猜测,因为我们确实需要确切地知道哪些git操作序列导致文件被删除才能确定。 但是,要理解(并且被广泛误解)的一个关键点是,git的ignore机制是为“一次性”文件(例如构建产品)设计的。 它不是为珍贵的文件设计的,但是您不想保留在存储库中。 (作为这些语句的参考, 在git邮件列表中的这些电子邮件中对此进行了讨论。)

为了给出您描述的情况的示例场景,假设在a1b2c3版本中,您在存储库中提交了以下文件:

pdfs/0001.pdf
pdfs/0002.pdf

在历史的某个后期阶段(例如,您当前的master ),您已使用git rm -rf删除了所有跟踪的PDF,并将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. 不要在服务器上提交(我不知道您是否正在执行此操作,但是如果通常的做法是在实时环境中修复问题,我可以想象出现问题)。 在实时服务器上,您只应提取代码,而绝对不做其他任何事情。
© www.soinside.com 2019 - 2024. All rights reserved.