Файл .gitignore — игнорирование файлов в Git
Git рассматривает каждый файл в вашей рабочей копии как файл одного из трех нижеуказанных типов.
- Отслеживаемый файл — файл, который был предварительно проиндексирован или зафиксирован в коммите.
- Неотслеживаемый файл — файл, который не был проиндексирован или зафиксирован в коммите.
- Игнорируемый файл — файл, явным образом помеченный для Git как файл, который необходимо игнорировать.
Игнорируемые файлы — это, как правило, артефакты сборки и файлы, генерируемые машиной из исходных файлов в вашем репозитории, либо файлы, которые по какой-либо иной причине не должны попадать в коммиты. Вот некоторые распространенные примеры таких файлов:
- кэши зависимостей, например содержимое
/node_modulesили/packages; - скомпилированный код, например файлы
.o,.pycи.class; - каталоги для выходных данных сборки, например
/bin,/out или/target; - файлы, сгенерированные во время выполнения, например
.,
log.lockили.tmp; - скрытые системные файлы, например
.DS_StoreилиThumbs.db; - личные файлы конфигурации IDE, например
.idea/workspace.xml.
Игнорируемые файлы отслеживаются в специальном файле .gitignore, который регистрируется в корневом каталоге репозитория. В Git нет специальной команды для указания игнорируемых файлов: вместо этого необходимо вручную отредактировать файл .gitignore, чтобы указать в нем новые файлы, которые должны быть проигнорированы. Файлы .gitignore содержат шаблоны, которые сопоставляются с именами файлов в репозитории для определения необходимости игнорировать эти файлы.
- Игнорирование файлов в Git
- Шаблоны игнорирования в Git
- Общие файлы .gitignore в вашем репозитории
- Персональные правила игнорирования в Git
- Глобальные правила игнорирования в Git
- Игнорирование ранее закоммиченного файла
- Коммит игнорируемого файла
- Скрытие изменений в игнорируем файле
- Отладка файлов .
gitignore
Шаблоны игнорирования в Git
Для сопоставления с именами файлов в .gitignore используются шаблоны подстановки. С помощью различных символов можно создавать собственные шаблоны.
| Шаблон | Примеры соответствия | Пояснение* |
|---|---|---|
**/logs | logs/debug.loglogs/monday/foo.barbuild/logs/debug.log | Добавьте в начало шаблона две звездочки, чтобы сопоставлять каталоги в любом месте репозитория. |
**/logs/debug.log | logs/debug.logbuild/logs/debug.logно не logs/build/debug.log | Две звездочки можно также использовать для сопоставления файлов на основе их имени и имени родительского каталога. |
*.log | debug.logfoo.log.logs/debug.log | Одна звездочка — это подстановочный знак, который может соответствовать как нескольким символам, так и ни одному. |
*.log !important.log | debug.logtrace.logно не important.loglogs/important.log | Добавление восклицательного знака в начало шаблона отменяет действие шаблона. Если файл соответствует некоему шаблону, но при этом также соответствует отменяющему шаблону, указанному после, такой файл не будет игнорироваться. |
*.log !important/*.logtrace.* | debug.logimportant/trace.logно не important/debug.log | Шаблоны, указанные после отменяющего шаблона, снова будут помечать файлы как игнорируемые, даже если ранее игнорирование этих файлов было отменено.![]() |
/debug.log | debug.logно не logs/debug.log | Косая черта перед именем файла соответствует файлу в корневом каталоге репозитория. |
debug.log | debug.loglogs/debug.log | По умолчанию шаблоны соответствуют файлам, находящимся в любом каталоге |
debug?.log | debug0.logdebugg.logно не debug10.log | Знак вопроса соответствует строго одному символу. |
debug[0-9].log | debug0.logdebug1.logно не debug10.log | Квадратные скобки можно также использовать для указания соответствия одному символу из заданного диапазона. |
debug[01].log | debug0.logdebug1.но не debug2.logdebug01.log | Квадратные скобки соответствуют одному символу из указанного набора. |
debug[!01].log | debug2.logно не debug0.logdebug1.logdebug01.log | Восклицательный знак можно использовать для указания соответствия любому символу, кроме символов из указанного набора. |
debug[a-z].log | debuga.logdebugb.logно не debug1.log | Диапазоны могут быть цифровыми или буквенными. |
logs | logslogs/debug.loglogs/latest/foo.barbuild/logsbuild/logs/debug.log | Без косой черты в конце этот шаблон будет соответствовать и файлам, и содержимому каталогов с таким именем. В примере соответствия слева игнорируются и каталоги, и файлы с именем logs |
| logs/ | logs/debug.logbuild/logs/foo.barbuild/logs/latest/debug.log | Косая черта в конце шаблона означает каталог. Все содержимое любого каталога репозитория, соответствующего этому имени (включая все его файлы и подкаталоги), будет игнорироваться |
logs/ !logs/important.log | logs/debug.loglogs/important.log | Минуточку! Разве файл logs/important.log из примера слева не должен быть исключен нз списка игнорируемых?Нет! Из-за странностей Git, связанных с производительностью, вы не можете отменить игнорирование файла, которое задано шаблоном соответствия каталогу |
logs/**/debug.log | logs/debug.loglogs/monday/debug.logs/monday/pm/debug.log | Две звездочки соответствуют множеству каталогов или ни одному. |
logs/*day/debug.log | logs/monday/debug.loglogs/tuesday/debug.logbut not logs/latest/debug.log | Подстановочные символы можно использовать и в именах каталогов. |
logs/debug.log | logs/debug.logно не debug.logbuild/logs/debug.log | Шаблоны, указывающие на файл в определенном каталоге, задаются относительно корневого каталога репозитория. (При желании можно добавить в начало косую черту, но она ни на что особо не повлияет.) |
Две звездочки (**) означают, что ваш файл .gitignore находится в каталоге верхнего уровня вашего репозитория, как указано в соглашении. Если в репозитории несколько файлов .gitignore, просто мысленно поменяйте слова «корень репозитория» на «каталог, содержащий файл .
Помимо указанных символов, можно использовать символ #, чтобы добавить в файл .gitignore комментарии:
# ignore all logs
*.log
Если у вас есть файлы или каталоги, в имени которых содержатся спецсимволы шаблонов, для экранирования этих спецсимволов в .gitignore можно использовать обратную косую черту (\):
# ignore the file literally named foo[01].txt
foo\[01\].txt
Общие файлы .gitignore в вашем репозитории
Обычно правила игнорирования Git задаются в файле .gitignore в корневом каталоге репозитория. Тем не менее вы можете определить несколько файлов .gitignore
.gitignore проверяется относительно каталога, в котором содержится этот файл. Однако проще всего (и этот подход рекомендуется в качестве общего соглашения) определить один файл .
gitignore в корневом каталоге. После регистрации файла .gitignore для него, как и для любого другого файла в репозитории, включается контроль версий, а после публикации с помощью команды push он становится доступен остальным участникам команды. В файл .gitignore, как правило, включаются только те шаблоны, которые будут полезны другим пользователям репозитория.Персональные правила игнорирования в Git
В специальном файле, который находится в папке .git/info/exclude, можно определить персональные шаблоны игнорирования для конкретного репозитория. Этот файл не имеет контроля версий и не распространяется вместе с репозиторием, поэтому он хорошо подходит для указания шаблонов, которые будут полезны только вам. Например, если у вас есть пользовательские настройки для ведения журналов или специальные инструменты разработки, которые создают файлы в рабочем каталоге вашего репозитория, вы можете добавить их в , чтобы они случайно не попали в коммит в вашем репозитории.
Глобальные правила игнорирования в Git
Кроме того, для всех репозиториев в локальной системе можно определить глобальные шаблоны игнорирования Git, настроив параметр конфигурации Git core.excludesFile . Этот файл нужно создать самостоятельно. Если вы не знаете, куда поместить глобальный файл .gitignore, расположите его в домашнем каталоге (потом его будет легче найти). После создания этого файла необходимо настроить его местоположение с помощью команды git config:
$ touch ~/.gitignore
$ git config --global core.excludesFile ~/.gitignore
Будьте внимательны при указании глобальных шаблонов игнорирования, поскольку для разных проектов актуальны различные типы файлов. Типичные кандидаты на глобальное игнорирование — это специальные файлы операционной системы (например, .DS_Store и thumbs.db) или временные файлы, создаваемые некоторыми инструментами разработки.
Игнорирование ранее закоммиченного файла
Чтобы игнорировать файл, для которого ранее был сделан коммит, необходимо удалить этот файл из репозитория, а затем добавить для него правило в . . Используйте команду
gitignoregit rm с параметром --cached, чтобы удалить этот файл из репозитория, но оставить его в рабочем каталоге как игнорируемый файл.
$ echo debug.log >> .gitignore
$ git rm --cached debug.log
rm 'debug.log'
$ git commit -m "Start ignoring debug.log"
Опустите опцию --cached, чтобы удалить файл как из репозитория, так и из локальной файловой системы.
Коммит игнорируемого файла
Можно принудительно сделать коммит игнорируемого файла в репозиторий с помощью команды git add с параметром -f (или --force):
$ cat .gitignore
*.log
$ git add -f debug.log
$ git commit -m "Force adding debug.log"
Этот способ хорош, если у вас задан общий шаблон (например, *.log), но вы хотите сделать коммит определенного файла. Однако еще лучше в этом случае задать исключение из общего правила:
$ echo !debug.log >> .gitignore
$ cat .gitignore
*.log
!debug.log
$ git add debug.log
$ git commit -m "Adding debug.log"
Этот подход более прозрачен и понятен, если вы работаете в команде.
Скрытие изменений в игнорируем файле
Команда git stash — это мощная функция системы Git, позволяющая временно отложить и отменить локальные изменения, а позже применить их повторно. По умолчанию команда git stash ожидаемо не обрабатывает игнорируемые файлы и создает отложенные изменения только для тех файлов, которые отслеживаются Git. Тем не менее вы можете вызвать команду git stash с параметром —all, чтобы создать отложенные изменения также для игнорируемых и неотслеживаемых файлов.
Отладка файлов .gitignore
Если шаблоны .gitignore сложны или разбиты на множество файлов .gitignore, бывает непросто отследить, почему игнорируется определенный файл. Используйте команду git check-ignore с параметром -v (или --verbose), чтобы определить, какой шаблон приводит к игнорированию конкретного файла:
$ git check-ignore -v debug.log
.gitignore:3:*.log debug.log
Вывод показывает:
<file containing the pattern> : <line number of the pattern> : <pattern> <file name>
При желании команде git check-ignore можно передать несколько имен файлов, причем сами имена могут даже не соответствовать файлам, существующим в вашем репозитории.
Корневой анализ — Словарный запас и стратегии обучения беглости
Корневой анализ
Что это такое и что говорят исследования?
| Корневой анализ — это разбивка и выявление корней в неизвестном слове. Учащиеся могут связать ранее известные слова с новым неизвестным словом, основываясь на сходстве корня (и префикса/суффикса). Было показано, что «читатели-подростки могут использовать корневые слова и знания об аффиксах для анализа значения таких слов» (Pacheco, & Goodwin, 2013). Но как вы, как учитель, можете заставить своих юных учеников применять корневой анализ в классе? Исследования показывают, что, «обучая учащихся средней школы конкретным значениям слов с помощью явных прямых указаний, наряду с такими методами, как анализ семантических признаков или метод ключевых слов, учителя поощряют учащихся к более глубокому пониманию слов» (Ebbers, & Denton, 2008). Примеры анализа корняКак отмечают Пачеко и Гудвин (2013), корень обычно содержит больше информации о значении, чем префикс или суффикс. Попросив учащихся использовать эти корни для создания новых слов, реальных или вымышленных, с префиксами и суффиксами, они могут лучше понять, что означает корень и как его можно использовать.Пример таблицы корневого анализа можно увидеть ниже. Два очень распространенных корня могут происходить от латинских и греческих слов. Таблицу, подобную приведенной ниже, можно использовать, чтобы учащиеся искали значения корня и находили примеры слов, чтобы обнаружить связанную природу корня. Например, слово «spec, spect», означающее «смотреть», встречается в словах «осматривать» и «зритель». Два слова, которые включают в себя действие «смотреть». Это можно расширить, если учащиеся составят новые предложения, используя произведения, содержащие корень, значение которого они только что определили. |
Видео Примеры анализа корней
Это первое видео отлично помогает объяснить разницу между корнями и суффиксами. Некоторая полезная информация может быть собрана о том, как научить разбивать слова и находить корень. Он длинный, поэтому я бы посоветовал просмотреть его, чтобы получить собственное представление об идентификации корней и о том, как их использовать. Он не вдается в подробности о проведении корневого анализа, кроме записи фактических
http://education-portal.com/academy/lesson/science-vocabulary-concepts-study-skills-word-parts.html#lesson |
Интернет-ресурсы для анализа корней
https://academic.cuesta.edu/acasupp/as/506.HTMБольшой список общих корневых слов
http://www.literacyleader.com/sites/litlead.essdack .org/files/prefix%20suffix%20root.pdf
Корни слов разделены по классам
http://www.lethbridgecollege.net/elearningcafe/images/stories/pdf/structural_analysis.pdf
Большой список общих частей слов
http ://www.lethbridgecollege.net/elearningcafe/index.php/studyskills/vocabulary-development/structural-analysis-exercises
Упражнения с корнями
http://www.teachercreatedmaterials.com/curriculum_files/pdfs/newsevents/Teaching%20Vocabulary%20from%20Word%20Roots_An%20Instructional%20Routine%20for%20Elementary%20Grades.pdf
Предложение по изучению корней в начальной школе уровень
Ссылки
Ebbers, S.M., & Denton, C.A. (2008). Корневое пробуждение: инструкция по словарному запасу для учащихся старшего возраста, испытывающих трудности с чтением.
Исследование и практика проблем с обучаемостью (Wiley-Blackwell) , 23 (2), 90-102. doi:10.1111/j.1540-5826.2008.00267.x Пачеко, М.Б., и Гудвин, А.П. (2013). Соединяем два и два: морфологические стратегии решения задач учащихся средней школы для неизвестных слов. Journal Of Adolescent & Adult Literacy , 56 (7), 541-553. doi:10.1002/JAAL.181
Маршрутизация: Интернационализация | Next.js
Примеры- Маршрутизация i18n
Next.js имеет встроенную поддержку интернационализированной (i18n) маршрутизации с v10.0.0 . Вы можете указать список локалей, локаль по умолчанию и локали для конкретного домена, и Next.js автоматически выполнит маршрутизацию.
Поддержка маршрутизации i18n в настоящее время предназначена для дополнения существующих решений библиотеки i18n, таких как react-intl , react-i18next , lingui , rosetta , next-intl , следующий-перевести , следующий -multilingual , typesafe-i18n , tolgee и другие за счет оптимизации маршрутов и анализа локалей.
Для начала добавьте конфигурацию i18n в файл next.config.js .
Локали — это идентификаторы локалей UTS, стандартизированный формат для определения локалей.
Обычно идентификатор локали состоит из языка, региона и алфавита, разделенных дефисом: язык-регион-сценарий . Регион и скрипт необязательны. Пример:
-
en-US— английский язык, используемый в США -
нл-нл— Нидерландский язык, на котором говорят в Нидерландах -
nl— нидерландский, регион не указан
Если локаль пользователя nl-BE и она не указана в вашей конфигурации, они будут перенаправлены на nl , если доступно, или на локаль по умолчанию в противном случае.
Если вы не планируете поддерживать все регионы страны, рекомендуется включить региональные настройки страны, которые будут действовать как запасные.
модуль.экспорт = {
i18n: {
// Это все локали, которые вы хотите поддерживать
// ваше приложение
локали: ['en-US', 'fr', 'nl-NL'],
// Это локаль по умолчанию, которую вы хотите использовать при посещении
// путь с префиксом, не зависящим от локали, например.
`/привет`
локаль по умолчанию: 'en-US',
// Это список доменов локалей и локалей по умолчанию, которые они
// должны обрабатываться (требуются только при настройке доменной маршрутизации)
// Примечание: субдомены должны быть включены в значение домена для сопоставления, например. "fr.example.com".
домены: [
{
домен: 'example.com',
локаль по умолчанию: 'en-US',
},
{
домен: 'example.nl',
язык по умолчанию: 'nl-NL',
},
{
домен: 'example.fr',
язык по умолчанию: 'fr',
// для проверки также можно использовать необязательное поле http
// локальные домены локально с http вместо https
http: правда,
},
],
},
} Существует две стратегии обработки локали: маршрутизация подпути и маршрутизация домена.
Маршрутизация подпути
Маршрутизация подпути помещает языковой стандарт в путь URL.
модуль.экспорт = {
i18n: {
локали: ['en-US', 'fr', 'nl-NL'],
локаль по умолчанию: 'en-US',
},
} При указанной выше конфигурации en-US , fr и nl-NL будут доступны для маршрутизации, а en-US является локалью по умолчанию.
Если у вас pages/blog.js будут доступны следующие URL:
-
/blog -
/фр/блог -
/nl-nl/блог
Локаль по умолчанию не имеет префикса.
Маршрутизация домена
Используя маршрутизацию домена, вы можете настроить локали для обслуживания из разных доменов:
module.exports = {
i18n: {
локали: ['en-US', 'fr', 'nl-NL', 'nl-BE'],
локаль по умолчанию: 'en-US',
домены: [
{
// Примечание: субдомены должны быть включены в значение домена для сопоставления
// например www.example.com следует использовать, если это ожидаемое имя хоста.
домен: 'example.com',
локаль по умолчанию: 'en-US',
},
{
домен: 'example.fr',
язык по умолчанию: 'fr',
},
{
домен: 'example.nl',
язык по умолчанию: 'nl-NL',
// указать другие локали, которые должны быть перенаправлены
// в этот домен
локали: ['nl-BE'],
},
],
},
} Например, если у вас страниц/blog., будут доступны следующие URL-адреса:
js
-
example.com/blog -
www.example.com/blog -
пример.fr/блог -
пример.nl/блог -
пример.nl/nl-BE/блог
Когда пользователь посещает корень приложения (обычно /), Next.js попытается автоматически определить, какой язык предпочитает пользователь, на основе Accept-Language заголовок и текущий домен.
Если обнаружена локаль, отличная от локали по умолчанию, пользователь будет перенаправлен на:
- При использовании маршрутизации подпути: Путь с префиксом локали
- При использовании доменной маршрутизации: Домен с этим языковым стандартом, указанный по умолчанию
При использовании доменной маршрутизации, если пользователь с заголовком Accept-Language fr;q=0.9 посещает example. , они будут перенаправлены на
com example.fr , так как этот домен по умолчанию обрабатывает локаль fr .
При использовании Sub-path Routing пользователь будет перенаправлен на /fr .
Добавление префикса к локали по умолчанию
С помощью Next.js 12 и ПО промежуточного слоя мы можем добавить префикс к локали по умолчанию с помощью обходного пути.
Например, вот файл next.config.js с поддержкой нескольких языков. Обратите внимание, что локаль «по умолчанию» была добавлена намеренно.
модуль.экспорт = {
i18n: {
локали: ['по умолчанию', 'en', 'de', 'fr'],
defaultLocale: 'по умолчанию',
localeDetection: ложь,
},
трейлингслэш: правда,
} Затем мы можем использовать промежуточное ПО для добавления пользовательских правил маршрутизации:
import { NextRequest, NextResponse } from 'next/server'
const PUBLIC_FILE = /\.
(.*)$/
экспортировать промежуточное ПО асинхронной функции (требование: NextRequest) {
если (
req.nextUrl.pathname.startsWith('/_next') ||
req.nextUrl.pathname.includes('/api/') ||
PUBLIC_FILE.test(req.nextUrl.pathname)
) {
возвращаться
}
если (req.nextUrl.locale === 'по умолчанию') {
const locale = req.cookies.get('NEXT_LOCALE')?.value || 'en'
вернуть NextResponse.redirect(
новый URL(`/${locale}${req.nextUrl.pathname}${req.nextUrl.search}`, req.url)
)
}
} Это ПО промежуточного слоя пропускает добавление префикса по умолчанию к маршрутам API и общедоступным файлам, таким как шрифты или изображения. Если делается запрос к локали по умолчанию, мы перенаправляем на наш префикс /en .
Отключение автоматического определения локали
Автоматическое определение локали можно отключить с помощью:
module.exports = {
i18n: {
localeDetection: ложь,
},
} Когда для localeDetection задано значение false Next.
js больше не будет автоматически перенаправлять на основе предпочтительного языкового стандарта пользователя и будет предоставлять только информацию о языковом стандарте, обнаруженную либо из домена на основе языкового стандарта, либо из пути к языковому стандарту, как описано выше.
Вы можете получить доступ к информации о локали через маршрутизатор Next.js. Например, при использовании хука useRouter() доступны следующие свойства:
-
локальсодержит текущую активную локаль. -
локалейсодержит все настроенные локали. -
defaultLocaleсодержит настроенную локаль по умолчанию.
При предварительном рендеринге страниц с getStaticProps или getServerSideProps информация о локали предоставляется в контексте, предоставляемом функции.
При использовании getStaticPaths сконфигурированные локали предоставляются в параметре контекста функции под локалями и сконфигурированным defaultLocale под defaultLocale .
Вы можете использовать next/link или next/router для перехода между локалями.
Для next/link может быть предоставлена поддержка локали для перехода к другой локали, отличной от текущей активной. Если нет языковой стандарт предоставляется, текущий активный языковой стандарт используется во время клиентских переходов. Например:
импортировать ссылку из 'далее/ссылка'
функция экспорта по умолчанию IndexPage (реквизит) {
возвращаться (
<Ссылка href="/another" locale="fr">
В / фр / другой
Ссылка>
)
} При непосредственном использовании методов next/router можно указать локаль , которую следует использовать с помощью параметров перехода. Например:
import {useRouter} из 'следующий/маршрутизатор'
функция экспорта по умолчанию IndexPage (реквизит) {
постоянный маршрутизатор = useRouter()
возвращаться (
<дел
onClick={() => {
router.
push('/другой', '/другой', {локаль: 'fr'})
}}
>
к / фр / другому
log
gitignore
log
log
В примере соответствия слева игнорируются и каталоги, и файлы с именем logs
log
gitignore
log >> .gitignore
log
Это может быть бесценным инструментом для них на других занятиях, дома или на работе. 

`/привет`
локаль по умолчанию: 'en-US',
// Это список доменов локалей и локалей по умолчанию, которые они
// должны обрабатываться (требуются только при настройке доменной маршрутизации)
// Примечание: субдомены должны быть включены в значение домена для сопоставления, например. "fr.example.com".
домены: [
{
домен: 'example.com',
локаль по умолчанию: 'en-US',
},
{
домен: 'example.nl',
язык по умолчанию: 'nl-NL',
},
{
домен: 'example.fr',
язык по умолчанию: 'fr',
// для проверки также можно использовать необязательное поле http
// локальные домены локально с http вместо https
http: правда,
},
],
},
}
(.*)$/
экспортировать промежуточное ПО асинхронной функции (требование: NextRequest) {
если (
req.nextUrl.pathname.startsWith('/_next') ||
req.nextUrl.pathname.includes('/api/') ||
PUBLIC_FILE.test(req.nextUrl.pathname)
) {
возвращаться
}
если (req.nextUrl.locale === 'по умолчанию') {
const locale = req.cookies.get('NEXT_LOCALE')?.value || 'en'
вернуть NextResponse.redirect(
новый URL(`/${locale}${req.nextUrl.pathname}${req.nextUrl.search}`, req.url)
)
}
}
push('/другой', '/другой', {локаль: 'fr'})
}}
>
к / фр / другому
js поддерживает переопределение заголовка accept-language с помощью
Вы можете узнать больше о
Это важно учитывать, поскольку это может увеличить время сборки в зависимости от того, сколько локалей настроено внутри 