Моя проблема в том, что в моем репозитории git есть несколько веб-сайтов WordPress, из которых я хочу выборочно фиксировать только содержимое моих themes
папок, игнорируя при этом остальные избыточные файлы, обнаруженные в WordPress.
Раньше я использовал файлы .gitignore, чтобы игнорировать типы файлов, но можно ли его использовать наоборот - то есть игнорировать все, НО определенный путь к папке?
root (git repo)
- / wordpress
- - / (Сайт WordPress 1) / wp-content / themes
- - / (Сайт WordPress 2) / wp-content / themes
- - / (Сайт WordPress 3) / wp-content / themes
Благодарность-
ОБНОВИТЬ:
Основываясь на ответах, я сделал следующее, но это не работает. Любые идеи?
# Ignore everything:
*
# Except for wordpress themes:
!*/wp-content/themes/*
Я также пробовал следующие варианты:
!*/wp-content/themes*
!*wp-content/themes/*
!wp-content/themes/*
!/wordpress/*/wp-content/themes*
!wordpress/*/wp-content/themes*
Ни один из них не читает мои themes
папки.
**
подстановочный знак работает только в том случае, если в вашем шаблоне нет косой черты, см. Spareknight.wordpress.com/2011/07/19/…!/wordpress/*/wp-content/themes/**/*
Я попробовал описанное выше, но они не сработали. Отсюда следует лучший подход: https://gist.github.com/444295
источник
изменить первую строку
измените это на
источник
Попробуйте эти ответы:
источник
!*/wp-content/themes/
и!*/wp-content/themes/*
. Вы пробовали этот вариант? Кроме того, в качестве альтернативы вы можете просто использовать!*/wp-content/themes/
и в каждой папке тем иметь свой собственный файл .gitignore с!*
!*/wp-content/themes*
Если вы добавляете к шаблону префикс восклицательного знака (
!
), он отменяет любой предыдущий шаблон, который его исключил. Таким образом, по-видимому, вы можете игнорировать все, а затем разрешать только то, что хотите, используя этот шаблон.источник
!wordpress/[write out directories]/wp-content/themes/
. Обратите внимание на закрывающую косую черту и отсутствие закрывающей звездочки. Также обратите внимание, что*
будет соответствовать только один уровень, а не несколько каталогов. Вот страница руководстваДопустим, у вас есть такая структура каталогов:
Если вы хотите разрешить только сайты / все / файлы / частные / газеты и сайты / default / файлы / частные / газеты , вы можете сначала попробовать следующее:
Это не правильно! Сложность с gitignore заключается в том, что вы должны сначала разрешить включение родительского («частного») каталога , прежде чем вы сможете разрешить включение его дочернего каталога («газетилот») в коммиты.
http://www.christianengvall.se/gitignore-exclude-folder-but-include-a-subfolder/
источник
Мне нужно было игнорировать все, кроме одной папки с подкаталогами.
Для меня это работает
источник
Я всегда где-то зацикливаюсь на этом, даже если возвращаюсь к этому вопросу много раз. Я придумал подробный процесс, как это сделать шаг за шагом:
Сначала просто используйте
git add
чтобы добавить фактический контент.Он покажет соответствующие файлы, добавленные в индекс, в то время как все остальные еще не отслеживаются. Это помогает строить
.gitignore
поэтапно.Добавьте временный
DUMMY.TXT
файл в свой каталог:Наша цель сейчас - построить такие правила, чтобы
DUMMY.TXT
было единственным правилом, которое по-прежнему отображалось как Не отслеживаемое, когда мы закончили.Начните добавлять правила:
.gitignore
Первый - просто все игнорировать. Все неотслеживаемые файлы должны исчезнуть, должны отображаться только проиндексированные файлы:
Добавьте первый каталог в путь
wp-content
Теперь файлы без отслеживания снова появятся, но будут содержать только их
wp-content
содержимое.Игнорировать все в первом каталоге
/wp-content/*
и отменять игнорирование!/wp-content/themes
Теперь файлы без отслеживания будут сужены до
wp-content/themes
Повторяйте процесс до тех пор, пока этот фиктивный файл не останется единственным, который все еще отображается как Не отслеживаемый:
источник
Ответ Ярина сработал для меня, вот моя версия (мне не нужен
/wordpress
подкаталог):источник
После того, как мне это понадобилось несколько раз, я наконец нашел решение [1]:
Объяснение построчно:
.gitignore
себе (и потенциально.gitattributes
).[1] Ограничения (о которых я знаю):
/*
нарушит всю схему).wordpress
в этом случае), не может иметь.
в имени (напримерwordpress.1
, не будет работать). Если он есть.
, удалите строку 2 и найдите другой способ исключить все файлы в корне.git version 2.17.1.windows.2
источник
Тем, кто ищет более чистое решение, попробуйте следующее.
Как упоминалось в комментариях к этому ответу, вы должны использовать этот метод рекурсивно.
В этом примере у вас есть настройка веб-сайта
./
там, где находятся ваша.git
папка и.gitignore
файл, а также настройка установки WordPress в формате./wordpress
. Чтобы правильно игнорировать все, что находится в./wordpress
каталоге, кроме самого каталога темы (wordpress/wp-content/themes/my-theme
), вам придется рекурсивно игнорировать и разрешать каждый каталог до каталога, который вы хотите разрешить:Причина игнорирования с помощью подстановочного знака и разрешения (или игнорирования «отдельно от») самого каталога позволяет Git сначала заглянуть внутрь каталога, прежде чем игнорировать все внутри. Затем мы говорим Git игнорировать все «кроме» указанного нами каталога. Вот тот же синтаксис, но в том порядке, в котором на него смотрит Git:
Надеюсь, это поможет кому-то лучше понять необходимость рекурсивного метода.
источник
поздно на вечеринку, но вот то, что я использую для неизвестной глубины (принятое решение требует известной глубины)
таким образом все, что находится под wp-content, не игнорируется.
источник
Еще одно простое решение:
Вы хотите игнорировать все файлы Wordpress, но не вашу тему (например).
.gitignore , содержимое:
В этом примере вы можете удалить wordpress, если .gitignore находится в корневом каталоге wordpress.
Вы можете сделать то же самое с любыми папками и контентом, которые вы хотите "в исключительных случаях" держать вне gitignored папок / файлов.
Вывод :
НО
источник
Вы можете попробовать это:
Где :
источник
Вот мое решение, которое предполагает оформление заказа в
wp-content
и тестирование:
поэтому он правильно игнорирует все, что я не хочу, и ничего, что я хочу сохранить.
Код выпуска
Gitlab настроен с зеркалами репозитория для защищенных веток, согласно https://docs.gitlab.com/ee/workflow/repository_mirroring.html.
Когда код помещается в защищенную ветку, он будет зеркально отражен на промежуточном и рабочем серверах в
/opt/checkout/repo.git/
чистом репо. Следующаяpost-receive
ловушка (в/opt/checkout/repo.git/hooks/post-receive
) затем извлечет код в рабочий каталог.Для получения дополнительной информации см. Https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps.
источник
Вот как я это сделал:
Это то, что у меня сработало. Позволяет игнорировать все, кроме определенных файлов или папок
macOS sierra
источник
Я нахожусь в одной лодке, пытаясь управлять кучей сайтов Wordpress в одном репо. Моя структура каталогов выглядит так:
Я хочу просто отслеживать элементы внутри
app/public
папки для каждого сайта. Я попробовал образцы на этой странице, а также некоторые из предложений здесь, и в итоге попробовал следующее:который работал, но мне пришлось бы игнорировать один и тот же путь для каждого сайта, которого я пытался избежать.
Затем я просто заменил название сайта на,
*
и это помогло мне. Вот что я в итоге использовал:Это эффективно игнорировало все в папке сайта, сохраняя при этом все, что находится в
app/public
папке для любого сайта, который я создаю в корне.Обратите внимание, что он не будет игнорировать файлы в корне, только каталоги :)
Надеюсь это поможет.
источник
Это единственный файл, который в большинстве случаев игнорируется, потому что у вас есть wp-config-sample.php, которым вы можете поделиться с другими.
источник