используя git на производственном сервере - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть php webapp, который должен генерировать некоторые pdf файлы в указанной папке. На производственном сервере я также использую git, и проблема в том, что некоторые pdf файлы время от времени исчезают. На .gitignore я добавил свою папку pdf и * .pdf

Есть ли вероятность, что git удалит мои * .pdf файлы?

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

Это предположение, поскольку нам действительно нужно точно знать, какая последовательность операций git привела к удалению файлов, чтобы быть уверенным. Тем не менее, ключевой момент, который нужно понять (и который часто неправильно понимают), заключается в том, что механизм игнорирования в git предназначен для «одноразовых» файлов, таких как продукты сборки. Он не предназначен для файлов, которые ценны, но которые вы не хотите хранить в хранилище. (В качестве ссылки для этих утверждений это обсуждается в этих электронных письмах в списке рассылки git .)

Чтобы привести пример сценария для ситуации, которую вы описываете, предположим, что в версии a1b2c3 в хранилище зафиксированы следующие файлы:

pdfs/0001.pdf
pdfs/0002.pdf

На более позднем этапе истории (скажем, на текущем master) вы удалили все отслеженные PDF-файлы с помощью git rm -rf и добавили каталог pdfs в .gitignore. Однако ваше веб-приложение все еще генерирует 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-файлов, в котором никогда не было в хранилище. Тогда извлечение разных версий вашего кода никогда не должно касаться этого каталога.

1 голос
/ 20 сентября 2011

Прежде всего, я не понимаю, почему документы PDF размещаются внутри дерева исходных текстов.Если бы я находился там, где вы, я всегда сохранял бы загруженные материалы в другой папке, чем исходный код вашего приложения.

Во-вторых, я не думаю, что Git скрывает ваши PDF для вас.Конечно, нет, если ваш .gitignore настроен так, как вы говорите.Боюсь, что какой-то другой процесс мешает вашим PDF-файлам.

Помимо того, что Git, вероятно, не вызывает этого, я рекомендую следующее.

  1. в вашем приложении загружены материалы снаружи папки с исходным кодом самого приложения.
  2. Не фиксируйте на сервере (я не знаю, делаете ли вы это, но если это обычная практика - исправлять вещи вживуюокружающая среда, я могу представить, что вещи идут не так, как надо).На работающем сервере вы должны только извлекать код и больше ничего не делать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...