2011-09-20 83 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. 不要在服务器上提交(我不知道你是否正在这样做,但如果通常的做法是在现场环境中修复某些事情,我可以想象出错的东西)。在一台实时服务器上,你应该只提取代码,而且绝对没有别的。