GitHub Flavored Markdown (GFM)
GitHub Flavored Markdown (GFM) — это улучшенная версия Markdown от GitHub с дополнительными функциями, разработанными специально для разработки программного обеспечения и совместной работы. Это руководство охватывает все специальные расширения синтаксиса, доступные на GitHub.
Что такое GitHub Flavored Markdown (GFM)?
GitHub Flavored Markdown расширяет базовый синтаксис Markdown функциями, которые делают его более полезным для:
- Документации (READMEs, wikis)
- Отслеживания задач (issues)
- Pull requests
- Рецензирования кода
- Управления проектами
Основные функции GFM
1. Ограждённые блоки кода
GFM поддерживает ограждённые блоки кода с подсветкой синтаксиса для конкретных языков:
```javascript
function calculateSum(numbers) {
return numbers.reduce((sum, num) => sum + num, 0);
}
const result = calculateSum([1, 2, 3, 4, 5]);
console.log(result); // Output: 15
```function calculateSum(numbers) {
return numbers.reduce((sum, num) => sum + num, 0);
}
const result = calculateSum([1, 2, 3, 4, 5]);
console.log(result); // Output: 152. Подсветка синтаксиса
GitHub поддерживает подсветку синтаксиса для сотен языков. Некоторые распространённые из них:
# Bash script
echo "Hello GitHub!"# Python script
def greet(name):
return f"Hello, {name}!"// Java code
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello GitHub!");
}
}3. Списки задач
Создавайте интерактивные списки задач с флажками:
- [x] Завершить аутентификацию пользователя
- [x] Реализовать API endpoints
- [ ] Написать модульные тесты
- [ ] Тесты backend
- [ ] Тесты frontend
- [ ] Развернуть в production- [x] Завершить аутентификацию пользователя
- [x] Реализовать API endpoints
- [ ] Написать модульные тесты
- [ ] Тесты backend
- [ ] Тесты frontend
- [ ] Развернуть в production
4. Таблицы
GFM предоставляет простой синтаксис для создания таблиц:
| Функция | Поддерживается | Описание |
|-------------------|----------------|---------------------------------|
| Ограждённый код | ✅ | Подсветка для конкретного языка |
| Списки задач | ✅ | Интерактивные флажки |
| Таблицы | ✅ | Структурированное отображение |
| Упоминания | ✅ | Уведомления пользователей |
| Emoji | ✅ | Визуальные выражения || Функция | Поддерживается | Описание |
|---|---|---|
| Ограждённый код | ✅ | Подсветка для конкретного языка |
| Списки задач | ✅ | Интерактивные флажки |
| Таблицы | ✅ | Структурированное отображение |
| Упоминания | ✅ | Уведомления пользователей |
| Emoji | ✅ | Визуальные выражения |
5. Упоминания
Упоминайте пользователей или команды, чтобы уведомить их:
@username - Упомянуть конкретного пользователя
@team-name - Упомянуть команду6. Emoji
Добавляйте emoji с помощью коротких кодов:
:smile: - 😊
:thumbsup: - 👍
:heart: - ❤️
:rocket: - 🚀
:warning: - ⚠️😄 - 😊 👍 - 👍 ❤️ - ❤️ 🚀 - 🚀 ⚠️ - ⚠️
7. Автоматическое создание ссылок
GFM автоматически создаёт ссылки для определённых типов контента:
Номера Issue и Pull Request
#123 - Ссылка на issue 123
PR #456 - Ссылка на pull request 456Hash SHA
a1b2c3d - Ссылка на commit с этим SHAУпоминания пользователей в Issues/PRs
@username - Автоматически ссылается на профиль пользователяURLs
https://github.com - Автоматически становится ссылкой8. Зачёркивание
GFM поддерживает зачёркнутый текст:
~~Этот текст зачёркнут~~Этот текст зачёркнут
9. Ссылки на автолинки
GFM автоматически создаёт ссылки для:
- HTTP/HTTPS URLs
- Адресов электронной почты
- Номеров issue/PR GitHub
- Commit SHAs
https://github.com/markdownlang/markdownlang.com
user@example.com
#123
PR #456
a1b2c3d4e5f610. Подсветка строк в блоках кода
Подсвечивайте конкретные строки в блоках кода:
```javascript{2,4}
function calculateSum(numbers) {
return numbers.reduce((sum, num) => sum + num, 0); // Highlighted
}
const result = calculateSum([1, 2, 3, 4, 5]); // Highlighted
console.log(result);
```function calculateSum(numbers) {
return numbers.reduce((sum, num) => sum + num, 0); // Highlighted
}
const result = calculateSum([1, 2, 3, 4, 5]); // Highlighted
console.log(result);11. Подсветка синтаксиса Diff
Подсвечивайте изменения в коде с помощью синтаксиса diff:
```diff
- const oldFunction = () => {
- return "old value";
- };
+
+ const newFunction = () => {
+ return "new value";
+ };
```- const oldFunction = () => {
- return "old value";
- };
+
+ const newFunction = () => {
+ return "new value";
+ };12. Специфическая разметка GitHub
Оповещения
Используйте специальный синтаксис для оповещений в документации GitHub:
> [!NOTE]
> Это оповещение типа note.
> [!TIP]
> Это оповещение типа tip.
> [!IMPORTANT]
> Это важное оповещение.
> [!WARNING]
> Это предупреждение.
> [!CAUTION]
> Это оповещение типа caution.NOTE
Это оповещение типа note.
TIP
Это оповещение типа tip.
IMPORTANT
Это важное оповещение.
WARNING
Это предупреждение.
CAUTION
Это оповещение типа caution.
Относительные ссылки
Используйте относительные ссылки для навигации между файлами в одном репозитории:
[README](/README.md)
[Руководство по внесению вклада](/CONTRIBUTING.md)
[Документация API](/docs/api.md)Ссылки на изображения с текстом при наведении
Расширенное использование GFM
1. Вложенные списки со списками задач
Объединяйте вложенные списки со списками задач:
## Дорожная карта проекта
### Этап 1: Планирование
- [x] Определить область проекта
- [x] Выявить требования
- [x] Функциональные требования
- [x] Нефункциональные требования
- [x] Создать временную шкалу
### Этап 2: Разработка
- [x] Настроить структуру проекта
- [ ] Реализовать основные функции
- [x] Аутентификация
- [ ] Панель управления
- [ ] Интеграция API2. Таблицы с emoji и ссылками
Улучшайте таблицы с помощью emoji и ссылок:
| Компонент | Статус | Ответственный |
|----------------|-------------------|---------------|
| Аутентификация | ✅ Стабильно | @johndoe |
| База данных | ⚠️ Требуется обновление | @janedoe |
| API | 🚧 В процессе | @bobsmith |
| UI | ✅ Стабильно | @alicesmith || Компонент | Статус | Ответственный |
|---|---|---|
| Аутентификация | ✅ Стабильно | @johndoe |
| База данных | ⚠️ Требуется обновление | @janedoe |
| API | 🚧 В процессе | @bobsmith |
| UI | ✅ Стабильно | @alicesmith |
3. Блоки кода в списках
Включайте блоки кода в списки:
1. Установите зависимости:
```bash
npm installЗапустите сервер разработки:
bashnpm run devСоберите для production:
bashnpm run build
### 4. Блоки цитат с кодом
Объединяйте цитаты с блоками кода:
```markdown
> **Совет профессионала:** Используйте следующую команду для быстрой проверки статуса Git:
>
> ```bash
> git status
> ```Совет профессионала: Используйте следующую команду для быстрой проверки статуса Git:
bashgit status
GFM в различных контекстах GitHub
Файлы README
Файлы README поддерживают все функции GFM и автоматически отображаются на страницах репозитория.
Issues и Pull Requests
- Используйте списки задач для отслеживания прогресса
- Упоминайте членов команды для совместной работы
- Включайте фрагменты кода с подсветкой синтаксиса
- Ссылайтесь на связанные issues/PRs с помощью синтаксиса
#123
Комментарии
- Используйте emoji для быстрых реакций
- Ссылайтесь на строки в коде с помощью комментариев к строкам
- Используйте блоки цитат для ответа на конкретные пункты
Wikis
- Организуйте контент с помощью вложенных страниц
- Используйте таблицы для структурированных данных
- Включайте примеры кода с подсветкой синтаксиса
Лучшие практики
1. Стиль кода
<!-- ✅ Хорошо -->
```javascript
// Используйте описательные имена функций
function calculateTotal(items) {
return items.reduce((sum, item) => sum + item.price, 0);
}function f(i){return i.reduce((a,b)=>a+b.p,0)}```2. Дизайн таблиц
<!-- ✅ Хорошо -->
| Функция | Описание | Статус |
|---------|----------|--------|
| Функция 1 | Краткое описание | ✅ |
| Функция 2 | Другое описание | 🚧 |
<!-- ❌ Избегайте -->
| Функция | Описание | Статус | | | |
|---------|----------|--------|---|---|---|
| Функция 1 | Это описание слишком длинное и делает таблицу трудной для чтения на мобильных устройствах | ✅ | | | |3. Использование списков задач
<!-- ✅ Хорошо -->
## Sprint Backlog
- [x] Завершить страницу профиля пользователя
- [ ] Реализовать функционал поиска
- [x] Backend API
- [ ] Frontend компонент
- [ ] Написать документацию
<!-- ❌ Избегайте -->
- [ ] Задача 1
- [ ] Задача 2
- [ ] Задача 3
- [ ] Задача 4
- [ ] Задача 5
(Слишком много задач без организации)GFM против стандартного Markdown
| Функция | Стандартный Markdown | GitHub Flavored Markdown |
|---|---|---|
| Ограждённые блоки кода | ❌ | ✅ |
| Подсветка синтаксиса | ❌ | ✅ |
| Списки задач | ❌ | ✅ |
| Таблицы | ❌ | ✅ |
| Зачёркивание | ❌ | ✅ |
| Emoji | ❌ | ✅ |
| Упоминания | ❌ | ✅ |
| Автоматическое создание ссылок | Ограничено | Расширено |
Инструменты для работы с GFM
Локальные редакторы
- Visual Studio Code - Предварительный просмотр GFM и расширения
- Typora - Рендеринг GFM в реальном времени
- Mark Text - Поддержка GFM
Онлайн-инструменты
- GitHub Gist - Создание и обмен фрагментами GFM
- Dillinger - Онлайн-редактор GFM
- StackEdit - Поддержка GFM с облачной синхронизацией
Инструменты командной строки
- glow - Терминальный рендерер GFM
- pandoc - Конвертация GFM в другие форматы
- marked - Парсер GFM для Node.js
Распространённые проблемы и решения
1. Блок кода не подсвечивается
Проблема: Блок кода не отображает подсветку синтаксиса
Решение: Убедитесь, что вы указали правильный язык:
<!-- ✅ Правильно -->
```javascript
console.log("Hello");console.log("Hello"); // Использование jsx вместо javascript для кода не JSX
### 2. Флажки списков задач не работают
**Проблема:** Флажки списков задач не интерактивны
**Решение:** Убедитесь в правильном синтаксисе (пробел между `-` и `[ ]`):
```markdown
<!-- ✅ Правильно -->
- [ ] Задача
<!-- ❌ Неправильно -->
-[ ] Задача (нет пробела)
-[x] Задача (нет пробела)3. Таблица не отображается правильно
Проблема: Столбцы таблицы не выровнены
Решение: Убедитесь, что трубы правильно выровнены:
<!-- ✅ Правильно -->
| Column 1 | Column 2 |
|----------|----------|
| Data 1 | Data 2 |
<!-- ❌ Неправильно -->
|Column 1|Column 2|
|--|--|
|Data 1|Data 2|Следующие шаги
- Изучить базовый синтаксис Markdown
- Посмотреть шпаргалку по синтаксису
- Практиковаться с GitHub Gist
- Прочитать официальную документацию GitHub GFM
GitHub Flavored Markdown — это мощный инструмент для общения и совместной работы в разработке программного обеспечения. Освоив эти функции, вы сможете создавать более эффективную документацию, лучше отслеживать задачи и более эффективно сотрудничать с вашей командой.