2013-09-28 6 views
1

Я работаю над веб-приложением php, где мне нужен каталог с именем «library», который всегда остается нетронутым git.Git: Как защитить каталог

Причина в том, что этот каталог используется для хранения других файлов и папок, которые пользователь может загрузить из моего приложения php на сервер. Таким образом, он содержит элементы на моем локальном компьютере и разные элементы на промежуточном сервере, который я использую, который никогда не должен удаляться.

Я понимаю, что могу. gitignore каталог «library», но я читаю предупреждения о git, возможно удаляющие gitignored элементов, в какой-то момент.

Есть ли способ для явной защиты каталога или файла?

+1

«но я читаю предупреждения о git, возможно, удаляя gitignored items». – PeeHaa

+0

.gitignore - единственный способ, проверьте, правильно ли вы указали. https://github.com/github/gitignore. Можете ли вы сообщить мне, что вы упомянули в «.gitignore»? – Viji

+0

My .gitgnore содержит только "library /". Это верно? – eyeprotocol

ответ

0

Вы можете добавить файл .gitkeep в каталог library, который расскажет git, что этот каталог находится в управлении версиями. Просто не делайте никаких файлов в library, которые являются специфичными для среды.

What are the differences between .gitignore and .gitkeep?

3

Git только когда-либо удалить каталог или файлы на то пошло, если таковые на самом деле часть хранилища в какой-то момент. Если ни один из ваших филиалов не содержит эти файлы, Git вообще не коснется их. И даже если это произойдет; данные не теряются.

Чтобы понять это, нам нужно понять, что происходит при оформлении заказа в Git. Предположим, что мы находимся на ветке A и хотим проверить ветвь B. Что Git делает, удаляет все файлы, которые содержатся в ветке A, и являются clean (т. Е. У них нет никаких незафиксированных изменений). Затем Git создаст все файлы из ветки B. Теперь, если ветвь A отследила файл, но ветвь B не делает этого, это приведет к удалению этого файла в кассе. То же самое относится к каталогам (потому что Git только отслеживает файлы, а каталоги создаются/удаляются по мере необходимости). Но когда мы возвращаемся в ветвь A, файл снова восстанавливается.

Итак, суммируем это; файл удаляется только в том случае, если он является частью репозитория Git, а новый контрольный объект не содержит этот файл. В противном случае он остается там, где он (поскольку Гит даже не знает об этом).

Так что, если вы просто не хотите, чтобы в Git были отслежены какие-либо файлы в этом каталоге, добавьте его в .gitignore и не добавляйте его вручную в репозиторий.

Смежные вопросы