Файл .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.log logs/monday/foo.bar build/logs/debug.log | Добавьте в начало шаблона две звездочки, чтобы сопоставлять каталоги в любом месте репозитория. |
**/logs/debug.log | logs/debug.log build/logs/debug.log но не logs/build/debug.log | Две звездочки можно также использовать для сопоставления файлов на основе их имени и имени родительского каталога. |
*.log | debug.log foo.log . log logs/debug.log | Одна звездочка — это подстановочный знак, который может соответствовать как нескольким символам, так и ни одному. |
*.log !important.log | debug.log trace.log но не important.log logs/important.log | Добавление восклицательного знака в начало шаблона отменяет действие шаблона. Если файл соответствует некоему шаблону, но при этом также соответствует отменяющему шаблону, указанному после, такой файл не будет игнорироваться. |
*.log !important/*.log trace.* | debug.log important/trace.log но не important/debug.log | Шаблоны, указанные после отменяющего шаблона, снова будут помечать файлы как игнорируемые, даже если ранее игнорирование этих файлов было отменено. |
/debug.log | debug.log но не logs/debug.log | Косая черта перед именем файла соответствует файлу в корневом каталоге репозитория. |
debug.log | debug.log logs/debug.log | По умолчанию шаблоны соответствуют файлам, находящимся в любом каталоге |
debug?.log | debug0.log debugg.log но не debug10.log | Знак вопроса соответствует строго одному символу. |
debug[0-9].log | debug0.log debug1.log но не debug10.log | Квадратные скобки можно также использовать для указания соответствия одному символу из заданного диапазона. |
debug[01].log | debug0.log debug1. log но не debug2.log debug01.log | Квадратные скобки соответствуют одному символу из указанного набора. |
debug[!01].log | debug2.log но не debug0.log debug1.log debug01.log | Восклицательный знак можно использовать для указания соответствия любому символу, кроме символов из указанного набора. |
debug[a-z].log | debuga.log debugb.log но не debug1.log | Диапазоны могут быть цифровыми или буквенными. |
logs | logs logs/debug.log logs/latest/foo.bar build/logs build/logs/debug.log | Без косой черты в конце этот шаблон будет соответствовать и файлам, и содержимому каталогов с таким именем. В примере соответствия слева игнорируются и каталоги, и файлы с именем logs |
logs/ | logs/debug.log
build/logs/foo.bar build/logs/latest/debug.log | Косая черта в конце шаблона означает каталог. Все содержимое любого каталога репозитория, соответствующего этому имени (включая все его файлы и подкаталоги), будет игнорироваться |
logs/ !logs/important.log | logs/debug.log logs/important.log | Минуточку! Разве файл logs/important.log из примера слева не должен быть исключен нз списка игнорируемых?Нет! Из-за странностей Git, связанных с производительностью, вы не можете отменить игнорирование файла, которое задано шаблоном соответствия каталогу |
logs/**/debug.log | logs/debug.log logs/monday/debug. log logs/monday/pm/debug.log | Две звездочки соответствуют множеству каталогов или ни одному. |
logs/*day/debug.log | logs/monday/debug.log logs/tuesday/debug.log but not logs/latest/debug.log | Подстановочные символы можно использовать и в именах каталогов. |
logs/debug.log | logs/debug.log но не debug.log build/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
) или временные файлы, создаваемые некоторыми инструментами разработки.
Игнорирование ранее закоммиченного файла
Чтобы игнорировать файл, для которого ранее был сделан коммит, необходимо удалить этот файл из репозитория, а затем добавить для него правило в . gitignore
. Используйте команду git 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. js
, будут доступны следующие URL-адреса:
-
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'}) }} > к / фр / другому