Release 1.2.0: setup-1c-repo for 1C Configurator dumps (EOL/encoding/ignore).
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -7,6 +7,26 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## [1.2.0] - 2026-07-27
|
||||||
|
|
||||||
|
### Добавлено
|
||||||
|
|
||||||
|
- 🔧 **`setup-1c-repo`** — настройка локального Git-репозитория под выгрузку конфигуратора 1С
|
||||||
|
- `setup-1c-repo.sh` — Linux / macOS
|
||||||
|
- `setup-1c-repo.ps1` + `setup-1c-repo.cmd` — Windows
|
||||||
|
- Локальный `git config`: `core.quotepath=false`, `core.longpaths=true`, UTF-8, `core.autocrlf=false`
|
||||||
|
- На macOS дополнительно `core.precomposeunicode=true`
|
||||||
|
- Создание `.gitattributes` с `eol=crlf` для файлов выгрузки (`*.bsl`, `*.xml`, …) и `binary` для артефактов 1С
|
||||||
|
- Создание типового `.gitignore` (`*.cf`, `*.cfe`, `*.epf`, …)
|
||||||
|
- Опции: `--dry-run` / `-DryRun`, `--force`, `--init`, `--renormalize`, `--no-gitignore`
|
||||||
|
|
||||||
|
### Документация
|
||||||
|
|
||||||
|
- 📖 Обновлён **README.md**
|
||||||
|
- 📝 Обновлён **CHANGELOG.md**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## [1.0.6] - 2026-07-20
|
## [1.0.6] - 2026-07-20
|
||||||
|
|
||||||
### Добавлено
|
### Добавлено
|
||||||
@@ -133,6 +153,7 @@
|
|||||||
|
|
||||||
| Версия | Дата | Изменения |
|
| Версия | Дата | Изменения |
|
||||||
|--------|------|-----------|
|
|--------|------|-----------|
|
||||||
|
| **1.2.0** | 2026-07-27 | `setup-1c-repo` — настройки Git под выгрузку конфигуратора 1С |
|
||||||
| **1.0.6** | 2026-07-20 | Автоснятие из `.gitignore`, fix macOS sed, `--version` |
|
| **1.0.6** | 2026-07-20 | Автоснятие из `.gitignore`, fix macOS sed, `--version` |
|
||||||
| **1.1.0** | 2025-07-19 | Добавлена настройка игнорирования подмодулей |
|
| **1.1.0** | 2025-07-19 | Добавлена настройка игнорирования подмодулей |
|
||||||
| **1.0.0** | 2025-07-19 | Первый стабильный релиз |
|
| **1.0.0** | 2025-07-19 | Первый стабильный релиз |
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Git Management Tools (`git_man`)
|
# Git Management Tools (`git_man`)
|
||||||
|
|
||||||
**Версия:** 1.0.6
|
**Версия:** 1.2.0
|
||||||
|
|
||||||
Набор скриптов и утилит для управления Git-репозиториями, работы с подмодулями и автоматизации повседневных задач.
|
Набор скриптов и утилит для управления Git-репозиториями, работы с подмодулями и автоматизации повседневных задач.
|
||||||
|
|
||||||
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
- [Описание](#описание)
|
- [Описание](#описание)
|
||||||
- [Скрипты](#скрипты)
|
- [Скрипты](#скрипты)
|
||||||
|
- [setup-1c-repo](#setup-1c-repo--настройка-репозитория-под-1с)
|
||||||
- [register-submodules.sh](#register-submodulessh)
|
- [register-submodules.sh](#register-submodulessh)
|
||||||
- [Установка](#установка)
|
- [Установка](#установка)
|
||||||
- [Использование](#использование)
|
- [Использование](#использование)
|
||||||
@@ -22,19 +23,81 @@
|
|||||||
|
|
||||||
## 📖 Описание
|
## 📖 Описание
|
||||||
|
|
||||||
Данный репозиторий содержит вспомогательные скрипты для работы с Git в проектах, где используется множество вложенных репозиториев (монорепозиторий с подмодулями).
|
Данный репозиторий содержит вспомогательные скрипты для работы с Git в проектах, где используется множество вложенных репозиториев (монорепозиторий с подмодулями), а также настройка репозиториев под выгрузку конфигуратора 1С.
|
||||||
|
|
||||||
Основные задачи:
|
Основные задачи:
|
||||||
- Автоматическая регистрация вложенных репозиториев как подмодулей
|
- Автоматическая регистрация вложенных репозиториев как подмодулей
|
||||||
- Снятие путей из `.gitignore` при регистрации
|
- Снятие путей из `.gitignore` при регистрации
|
||||||
- Централизованное управление множеством репозиториев
|
- Централизованное управление множеством репозиториев
|
||||||
- Настройка игнорирования состояния подмодулей в основном репозитории
|
- Настройка игнорирования состояния подмодулей в основном репозитории
|
||||||
|
- Настройка кодировки, EOL и ignore для проектов 1С (выгрузка конфигуратора)
|
||||||
- Автоматизация рутинных операций
|
- Автоматизация рутинных операций
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🛠️ Скрипты
|
## 🛠️ Скрипты
|
||||||
|
|
||||||
|
### `setup-1c-repo` — настройка репозитория под 1С
|
||||||
|
|
||||||
|
**Описание:**
|
||||||
|
Включает локальные настройки Git в **текущей папке** (каталог запуска) под выгрузку конфигурации/расширения из **конфигуратора 1С**: UTF-8 с BOM, CRLF в рабочей копии для файлов выгрузки, корректные пути с кириллицей, длинные пути, `.gitattributes` и `.gitignore`.
|
||||||
|
|
||||||
|
| Платформа | Скрипт |
|
||||||
|
|-----------|--------|
|
||||||
|
| **Windows** | `setup-1c-repo.ps1` или `setup-1c-repo.cmd` |
|
||||||
|
| **macOS / Linux** | `setup-1c-repo.sh` |
|
||||||
|
|
||||||
|
**Использование (Windows):**
|
||||||
|
```powershell
|
||||||
|
.\setup-1c-repo.ps1
|
||||||
|
.\setup-1c-repo.ps1 -Force -Renormalize
|
||||||
|
.\setup-1c-repo.cmd -Init -DryRun
|
||||||
|
```
|
||||||
|
|
||||||
|
**Использование (macOS / Linux):**
|
||||||
|
```bash
|
||||||
|
./setup-1c-repo.sh
|
||||||
|
./setup-1c-repo.sh --force --renormalize
|
||||||
|
./setup-1c-repo.sh --init --dry-run
|
||||||
|
```
|
||||||
|
|
||||||
|
**Опции:**
|
||||||
|
|
||||||
|
| Опция (sh / ps1) | Описание |
|
||||||
|
|------------------|----------|
|
||||||
|
| `--help` / `-Help` | Справка |
|
||||||
|
| `--version` / `-Version` | Версия скрипта (`1.2.0`) |
|
||||||
|
| `--dry-run` / `-DryRun` | Только показать действия |
|
||||||
|
| `--force` / `-Force` | Перезаписать `.gitattributes` и `.gitignore` |
|
||||||
|
| `--init` / `-Init` | `git init`, если папка ещё не репозиторий |
|
||||||
|
| `--renormalize` / `-Renormalize` | `git add --renormalize .` после настройки |
|
||||||
|
| `--no-gitignore` / `-NoGitignore` | Не трогать `.gitignore` |
|
||||||
|
| `--verbose` / `-Verbose` | Подробный вывод |
|
||||||
|
| `--quiet` / `-Quiet` | Только ошибки |
|
||||||
|
|
||||||
|
**Что применяется локально (`git config --local`):**
|
||||||
|
|
||||||
|
| Параметр | Значение | Зачем |
|
||||||
|
|----------|----------|--------|
|
||||||
|
| `core.quotepath` | `false` | Кириллические пути без `\320\…` |
|
||||||
|
| `core.longpaths` | `true` | Длинные пути (Windows / глубокие деревья 1С) |
|
||||||
|
| `gui.encoding` | `utf-8` | Кодировка GUI |
|
||||||
|
| `i18n.commitEncoding` | `utf-8` | Кодировка сообщений коммитов |
|
||||||
|
| `core.autocrlf` | `false` | EOL только через `.gitattributes` |
|
||||||
|
| `core.safecrlf` | `warn` | Предупреждение о смешанных EOL |
|
||||||
|
| `diff.renames` | `false` | Как в рекомендациях 1С:ГитКонвертер |
|
||||||
|
| `core.precomposeunicode` | `true` | Только macOS (NFD/NFC для имён файлов) |
|
||||||
|
|
||||||
|
**`.gitattributes`:** для `*.bsl`, `*.xml`, `*.txt`, `*.html` и др. файлов выгрузки — `text eol=crlf` (рабочая копия как у конфигуратора). Бинарники (`*.cf`, `*.bin`, картинки, …) — `binary`. BOM UTF-8 хранится как часть содержимого файла.
|
||||||
|
|
||||||
|
**После запуска:**
|
||||||
|
```bash
|
||||||
|
git add .gitattributes .gitignore
|
||||||
|
git commit -m "Настройки Git для выгрузки конфигуратора 1С"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### `register-submodules.sh`
|
### `register-submodules.sh`
|
||||||
|
|
||||||
**Описание:**
|
**Описание:**
|
||||||
@@ -121,8 +184,10 @@ git submodule update --init --recursive
|
|||||||
git_man/
|
git_man/
|
||||||
├── README.md # Этот файл
|
├── README.md # Этот файл
|
||||||
├── CHANGELOG.md # История изменений
|
├── CHANGELOG.md # История изменений
|
||||||
├── register-submodules.sh # Скрипт регистрации подмодулей
|
├── register-submodules.sh # Регистрация вложенных репозиториев как подмодулей
|
||||||
└── scripts/ # Дополнительные скрипты (планируется)
|
├── setup-1c-repo.sh # Настройка репозитория под 1С (macOS / Linux)
|
||||||
|
├── setup-1c-repo.ps1 # Настройка репозитория под 1С (Windows PowerShell)
|
||||||
|
└── setup-1c-repo.cmd # Обёртка Windows для .ps1
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -156,9 +221,9 @@ git submodule add https://git.p7net.ru/tools/git_man.git tools/git_man
|
|||||||
|
|
||||||
## 📋 Требования
|
## 📋 Требования
|
||||||
|
|
||||||
- **Git** (версия 1.8.5 или выше)
|
- **Git** (версия 1.8.5 или выше; для `--renormalize` рекомендуется 2.16+)
|
||||||
- **Bash** (4.0+)
|
- **Bash** (4.0+) — для `*.sh` на Linux / macOS / WSL
|
||||||
- **Unix-подобная ОС** (Linux, macOS) или **WSL** на Windows
|
- **PowerShell** 5.1+ или 7+ — для `setup-1c-repo.ps1` / `.cmd` на Windows
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -183,18 +248,20 @@ git submodule add https://git.p7net.ru/tools/git_man.git tools/git_man
|
|||||||
|
|
||||||
## 📌 История версий
|
## 📌 История версий
|
||||||
|
|
||||||
Текущая версия: **1.0.6** (2026-07-20).
|
Текущая версия: **1.2.0** (2026-07-27).
|
||||||
|
|
||||||
Кратко по релизам — см. [CHANGELOG.md](./CHANGELOG.md).
|
Кратко по релизам — см. [CHANGELOG.md](./CHANGELOG.md).
|
||||||
|
|
||||||
| Версия | Дата | Суть |
|
| Версия | Дата | Суть |
|
||||||
|--------|------|------|
|
|--------|------|------|
|
||||||
|
| **1.2.0** | 2026-07-27 | `setup-1c-repo` — настройки Git под выгрузку конфигуратора 1С |
|
||||||
| **1.0.6** | 2026-07-20 | Автоснятие из `.gitignore`, fix macOS, `--version` |
|
| **1.0.6** | 2026-07-20 | Автоснятие из `.gitignore`, fix macOS, `--version` |
|
||||||
| **1.1.0** | 2025-07-19 | Настройка `ignore` для подмодулей |
|
| **1.1.0** | 2025-07-19 | Настройка `ignore` для подмодулей |
|
||||||
| **1.0.0** | 2025-07-19 | Первый стабильный релиз |
|
| **1.0.0** | 2025-07-19 | Первый стабильный релиз |
|
||||||
|
|
||||||
Проверка версии:
|
Проверка версии:
|
||||||
```bash
|
```bash
|
||||||
|
./setup-1c-repo.sh --version
|
||||||
./register-submodules.sh --version
|
./register-submodules.sh --version
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
@echo off
|
||||||
|
setlocal EnableExtensions
|
||||||
|
REM ============================================================
|
||||||
|
REM setup-1c-repo.cmd - обёртка Windows для setup-1c-repo.ps1
|
||||||
|
REM Версия: 1.2.0
|
||||||
|
REM Запуск из корня Git-репозитория 1С-проекта (выгрузка конфигуратора).
|
||||||
|
REM ============================================================
|
||||||
|
|
||||||
|
set "SCRIPT_DIR=%~dp0"
|
||||||
|
set "PS1=%SCRIPT_DIR%setup-1c-repo.ps1"
|
||||||
|
|
||||||
|
if not exist "%PS1%" (
|
||||||
|
echo [ERROR] Не найден файл: %PS1%
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
REM Bypass только для этого скрипта; аргументы пробрасываются как есть.
|
||||||
|
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%PS1%" %*
|
||||||
|
set "EXITCODE=%ERRORLEVEL%"
|
||||||
|
exit /b %EXITCODE%
|
||||||
@@ -0,0 +1,411 @@
|
|||||||
|
# ============================================================
|
||||||
|
# setup-1c-repo.ps1 - Настройка Git-репозитория под выгрузку 1С (конфигуратор)
|
||||||
|
#
|
||||||
|
# Версия: 1.2.0
|
||||||
|
# Автор: Michael BAG <mk@p7net.ru>
|
||||||
|
# Репозиторий: https://git.p7net.ru/tools/git_man
|
||||||
|
#
|
||||||
|
# Платформа: Windows (PowerShell 5.1+ / PowerShell 7+)
|
||||||
|
# Для Linux/macOS используйте setup-1c-repo.sh
|
||||||
|
#
|
||||||
|
# Использование:
|
||||||
|
# .\setup-1c-repo.ps1 [-DryRun] [-Force] [-Init] [-Renormalize] [-NoGitignore]
|
||||||
|
# [-Verbose] [-Quiet] [-Help] [-Version]
|
||||||
|
#
|
||||||
|
# Описание:
|
||||||
|
# Включает локальные настройки Git в текущей папке (cwd) для проектов
|
||||||
|
# с выгрузкой конфигурации/расширения из конфигуратора 1С:
|
||||||
|
# - UTF-8 с BOM (как у конфигуратора; BOM хранится как часть содержимого)
|
||||||
|
# - CRLF в рабочей копии для *.bsl / *.xml и др. текстовых файлов выгрузки
|
||||||
|
# - корректное отображение кириллических путей (core.quotepath=false)
|
||||||
|
# - длинные пути (core.longpaths=true)
|
||||||
|
# - создаёт/обновляет .gitattributes и .gitignore
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
[CmdletBinding()]
|
||||||
|
param(
|
||||||
|
[switch]$DryRun,
|
||||||
|
[Alias('f')]
|
||||||
|
[switch]$Force,
|
||||||
|
[switch]$Init,
|
||||||
|
[switch]$Renormalize,
|
||||||
|
[switch]$NoGitignore,
|
||||||
|
[Alias('q')]
|
||||||
|
[switch]$Quiet,
|
||||||
|
[Alias('h')]
|
||||||
|
[switch]$Help,
|
||||||
|
[Alias('V')]
|
||||||
|
[switch]$Version
|
||||||
|
)
|
||||||
|
|
||||||
|
$ErrorActionPreference = 'Stop'
|
||||||
|
$ScriptVersion = '1.2.0'
|
||||||
|
|
||||||
|
function Show-Help {
|
||||||
|
@"
|
||||||
|
============================================================
|
||||||
|
📦 setup-1c-repo.ps1 v$ScriptVersion — настройка репозитория под 1С
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
ОПИСАНИЕ:
|
||||||
|
Настраивает локальный Git-репозиторий в ТЕКУЩЕЙ папке под
|
||||||
|
выгрузку из конфигуратора 1С (UTF-8 BOM + CRLF).
|
||||||
|
|
||||||
|
ИСПОЛЬЗОВАНИЕ:
|
||||||
|
.\setup-1c-repo.ps1 [ОПЦИИ]
|
||||||
|
.\setup-1c-repo.cmd [ОПЦИИ]
|
||||||
|
|
||||||
|
ОПЦИИ:
|
||||||
|
-Help, -h Показать эту справку
|
||||||
|
-Version, -V Показать версию скрипта
|
||||||
|
-DryRun Только показать, что будет сделано
|
||||||
|
-Force, -f Перезаписать существующие .gitattributes / .gitignore
|
||||||
|
-Init Выполнить git init, если папка ещё не репозиторий
|
||||||
|
-Renormalize После настройки: git add --renormalize .
|
||||||
|
-NoGitignore Не создавать/не менять .gitignore
|
||||||
|
-Verbose, -v Подробный вывод
|
||||||
|
-Quiet, -q Минимальный вывод (только ошибки)
|
||||||
|
|
||||||
|
ПРИМЕРЫ:
|
||||||
|
.\setup-1c-repo.ps1
|
||||||
|
.\setup-1c-repo.ps1 -Force -Renormalize
|
||||||
|
.\setup-1c-repo.ps1 -Init -DryRun
|
||||||
|
|
||||||
|
============================================================
|
||||||
|
"@ | Write-Host
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function Show-Version {
|
||||||
|
Write-Host "setup-1c-repo.ps1 $ScriptVersion"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($Help) { Show-Help }
|
||||||
|
if ($Version) { Show-Version }
|
||||||
|
|
||||||
|
function Write-Info([string]$Message) {
|
||||||
|
if (-not $Quiet) { Write-Host "ℹ️ $Message" -ForegroundColor Cyan }
|
||||||
|
}
|
||||||
|
function Write-Success([string]$Message) {
|
||||||
|
if (-not $Quiet) { Write-Host "✅ $Message" -ForegroundColor Green }
|
||||||
|
}
|
||||||
|
function Write-WarnMsg([string]$Message) {
|
||||||
|
if (-not $Quiet) { Write-Host "⚠️ $Message" -ForegroundColor Yellow }
|
||||||
|
}
|
||||||
|
function Write-ErrMsg([string]$Message) {
|
||||||
|
Write-Host "❌ $Message" -ForegroundColor Red
|
||||||
|
}
|
||||||
|
function Write-DebugMsg([string]$Message) {
|
||||||
|
if ($VerbosePreference -ne 'SilentlyContinue' -and -not $Quiet) {
|
||||||
|
Write-Host "🔍 $Message" -ForegroundColor Blue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function Write-Step([string]$Message) {
|
||||||
|
if (-not $Quiet) { Write-Host "▶ $Message" -ForegroundColor Magenta }
|
||||||
|
}
|
||||||
|
|
||||||
|
$GitAttributesContent = @'
|
||||||
|
# .gitattributes — выгрузка конфигуратора 1С (UTF-8 BOM + CRLF)
|
||||||
|
# Создано setup-1c-repo.ps1 (git_man). Не удаляйте без необходимости.
|
||||||
|
#
|
||||||
|
# Правило: текстовые файлы выгрузки — text + eol=crlf (рабочая копия = CRLF,
|
||||||
|
# в объекте Git нормализуется к LF). Бинарники — binary (без конвертации EOL).
|
||||||
|
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
# --- Текстовые файлы выгрузки конфигуратора ---
|
||||||
|
*.bsl text eol=crlf
|
||||||
|
*.os text eol=crlf
|
||||||
|
*.xml text eol=crlf
|
||||||
|
*.txt text eol=crlf
|
||||||
|
*.html text eol=crlf
|
||||||
|
*.htm text eol=crlf
|
||||||
|
*.xsd text eol=crlf
|
||||||
|
*.xslt text eol=crlf
|
||||||
|
*.xsl text eol=crlf
|
||||||
|
*.Form text eol=crlf
|
||||||
|
*.Module text eol=crlf
|
||||||
|
*.max text eol=crlf
|
||||||
|
|
||||||
|
# --- Служебные / документация репозитория (LF) ---
|
||||||
|
*.md text eol=lf
|
||||||
|
*.json text eol=lf
|
||||||
|
*.yml text eol=lf
|
||||||
|
*.yaml text eol=lf
|
||||||
|
*.sh text eol=lf
|
||||||
|
*.gitignore text eol=lf
|
||||||
|
*.gitattributes text eol=lf
|
||||||
|
.editorconfig text eol=lf
|
||||||
|
|
||||||
|
# --- Скрипты Windows ---
|
||||||
|
*.bat text eol=crlf
|
||||||
|
*.cmd text eol=crlf
|
||||||
|
*.ps1 text eol=crlf
|
||||||
|
|
||||||
|
# --- Бинарные артефакты 1С и медиа ---
|
||||||
|
*.bin binary
|
||||||
|
*.cf binary
|
||||||
|
*.cfe binary
|
||||||
|
*.cfu binary
|
||||||
|
*.epf binary
|
||||||
|
*.erf binary
|
||||||
|
*.axdt binary
|
||||||
|
*.addin binary
|
||||||
|
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.jpeg binary
|
||||||
|
*.gif binary
|
||||||
|
*.bmp binary
|
||||||
|
*.ico binary
|
||||||
|
*.webp binary
|
||||||
|
*.tif binary
|
||||||
|
*.tiff binary
|
||||||
|
*.svg -text
|
||||||
|
|
||||||
|
*.zip binary
|
||||||
|
*.rar binary
|
||||||
|
*.7z binary
|
||||||
|
*.gz binary
|
||||||
|
|
||||||
|
*.xls binary
|
||||||
|
*.xlsx binary
|
||||||
|
*.xlsm binary
|
||||||
|
*.doc binary
|
||||||
|
*.docx binary
|
||||||
|
*.pdf binary
|
||||||
|
*.rtf binary
|
||||||
|
|
||||||
|
*.ttf binary
|
||||||
|
*.otf binary
|
||||||
|
*.woff binary
|
||||||
|
*.woff2 binary
|
||||||
|
*.eot binary
|
||||||
|
'@
|
||||||
|
|
||||||
|
$GitIgnoreContent = @'
|
||||||
|
# .gitignore — типовые исключения для проектов 1С (конфигуратор)
|
||||||
|
# Создано setup-1c-repo.ps1 (git_man)
|
||||||
|
|
||||||
|
# Бинарные выгрузки конфигурации / расширений / обработок
|
||||||
|
*.cf
|
||||||
|
*.cfe
|
||||||
|
*.cfu
|
||||||
|
*.epf
|
||||||
|
*.erf
|
||||||
|
|
||||||
|
# Временные и резервные
|
||||||
|
*.tmp
|
||||||
|
*.bak
|
||||||
|
*.~*
|
||||||
|
*~
|
||||||
|
*.old
|
||||||
|
*.orig
|
||||||
|
|
||||||
|
# Логи и дампы
|
||||||
|
*.log
|
||||||
|
*.lgp
|
||||||
|
*.lgf
|
||||||
|
|
||||||
|
# ОС
|
||||||
|
Thumbs.db
|
||||||
|
ehthumbs.db
|
||||||
|
Desktop.ini
|
||||||
|
desktop.ini
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
|
||||||
|
# IDE / редакторы
|
||||||
|
.vs/
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.userosscache
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# Отладка / кэш
|
||||||
|
Debug/
|
||||||
|
debug/
|
||||||
|
cache/
|
||||||
|
*.pfl
|
||||||
|
'@
|
||||||
|
|
||||||
|
function Test-GitAvailable {
|
||||||
|
try {
|
||||||
|
$null = Get-Command git -ErrorAction Stop
|
||||||
|
return $true
|
||||||
|
} catch {
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function Test-GitRepository {
|
||||||
|
if (Test-Path -LiteralPath '.git') { return $true }
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
|
||||||
|
function Set-LocalGitConfig {
|
||||||
|
param([string]$Key, [string]$Value)
|
||||||
|
if ($DryRun) {
|
||||||
|
Write-Host " [DRY-RUN] git config --local $Key $Value"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
& git config --local $Key $Value
|
||||||
|
if ($LASTEXITCODE -ne 0) {
|
||||||
|
throw "Не удалось установить git config $Key=$Value"
|
||||||
|
}
|
||||||
|
Write-DebugMsg "config $Key=$Value"
|
||||||
|
}
|
||||||
|
|
||||||
|
function Write-Utf8File {
|
||||||
|
param(
|
||||||
|
[string]$Path,
|
||||||
|
[string]$Content
|
||||||
|
)
|
||||||
|
# UTF-8 без BOM: для .gitattributes/.gitignore достаточно; BOM у *.bsl
|
||||||
|
# — содержимое выгрузки конфигуратора, не этих служебных файлов.
|
||||||
|
$normalized = $Content -replace "`r`n", "`n" -replace "`r", "`n"
|
||||||
|
$normalized = $normalized.TrimEnd("`n") + "`n"
|
||||||
|
$encoding = New-Object System.Text.UTF8Encoding($false)
|
||||||
|
[System.IO.File]::WriteAllText((Join-Path (Get-Location) $Path), $normalized, $encoding)
|
||||||
|
}
|
||||||
|
|
||||||
|
function Write-FileSafe {
|
||||||
|
param(
|
||||||
|
[string]$Path,
|
||||||
|
[string]$Content,
|
||||||
|
[string]$Label
|
||||||
|
)
|
||||||
|
|
||||||
|
if ((Test-Path -LiteralPath $Path) -and -not $Force) {
|
||||||
|
Write-WarnMsg "$Label уже существует — пропуск (используйте -Force)"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($DryRun) {
|
||||||
|
if (Test-Path -LiteralPath $Path) {
|
||||||
|
Write-Host " [DRY-RUN] перезаписать $Path (бэкап $Path.bak)"
|
||||||
|
} else {
|
||||||
|
Write-Host " [DRY-RUN] создать $Path"
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Test-Path -LiteralPath $Path) {
|
||||||
|
Copy-Item -LiteralPath $Path -Destination "$Path.bak" -Force
|
||||||
|
Write-Info "Бэкап: $Path.bak"
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Utf8File -Path $Path -Content $Content
|
||||||
|
Write-Success "Записан $Path"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Основной ход
|
||||||
|
# ============================================================
|
||||||
|
Write-Step "Проверка окружения (ОС: Windows)..."
|
||||||
|
|
||||||
|
if (-not (Test-GitAvailable)) {
|
||||||
|
Write-ErrMsg "Git не установлен или недоступен в PATH"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not (Test-GitRepository)) {
|
||||||
|
if ($Init) {
|
||||||
|
if ($DryRun) {
|
||||||
|
Write-Host " [DRY-RUN] git init"
|
||||||
|
} else {
|
||||||
|
& git init
|
||||||
|
if ($LASTEXITCODE -ne 0) { throw "git init завершился с ошибкой" }
|
||||||
|
Write-Success "Выполнен git init"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Write-ErrMsg "Текущая папка не является Git-репозиторием"
|
||||||
|
Write-Host " Запустите из корня репозитория или добавьте -Init" -ForegroundColor Red
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Success "Окружение проверено"
|
||||||
|
|
||||||
|
Write-Step "Локальные настройки Git..."
|
||||||
|
|
||||||
|
# Кириллические пути без \320\...
|
||||||
|
Set-LocalGitConfig 'core.quotepath' 'false'
|
||||||
|
# Длинные пути Windows / глубокие деревья метаданных 1С
|
||||||
|
Set-LocalGitConfig 'core.longpaths' 'true'
|
||||||
|
# Кодировки UI и коммитов
|
||||||
|
Set-LocalGitConfig 'gui.encoding' 'utf-8'
|
||||||
|
Set-LocalGitConfig 'i18n.commitEncoding' 'utf-8'
|
||||||
|
# EOL полностью через .gitattributes
|
||||||
|
Set-LocalGitConfig 'core.autocrlf' 'false'
|
||||||
|
Set-LocalGitConfig 'core.safecrlf' 'warn'
|
||||||
|
# Рекомендации 1С:ГитКонвертер для крупных деревьев метаданных
|
||||||
|
Set-LocalGitConfig 'diff.renames' 'false'
|
||||||
|
Set-LocalGitConfig 'diff.renameLimit' '1'
|
||||||
|
|
||||||
|
if ($DryRun) {
|
||||||
|
Write-Info "Локальный git config (dry-run)"
|
||||||
|
} else {
|
||||||
|
Write-Success "Локальный git config применён"
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Step "Файл .gitattributes..."
|
||||||
|
Write-FileSafe -Path '.gitattributes' -Content $GitAttributesContent -Label '.gitattributes'
|
||||||
|
|
||||||
|
if (-not $NoGitignore) {
|
||||||
|
Write-Step "Файл .gitignore..."
|
||||||
|
Write-FileSafe -Path '.gitignore' -Content $GitIgnoreContent -Label '.gitignore'
|
||||||
|
} else {
|
||||||
|
Write-Info "Пропуск .gitignore (-NoGitignore)"
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($Renormalize) {
|
||||||
|
Write-Step "Нормализация индекса (git add --renormalize .)..."
|
||||||
|
if ($DryRun) {
|
||||||
|
Write-Host " [DRY-RUN] git add --renormalize ."
|
||||||
|
} else {
|
||||||
|
& git add --renormalize .
|
||||||
|
if ($LASTEXITCODE -ne 0) { throw "git add --renormalize завершился с ошибкой" }
|
||||||
|
Write-Success "Индекс перенормализован"
|
||||||
|
Write-WarnMsg "Проверьте git status — возможны массовые изменения EOL"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not $Quiet) {
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "============================================================"
|
||||||
|
Write-Host "📊 Итог настройки под выгрузку конфигуратора 1С" -ForegroundColor Cyan
|
||||||
|
Write-Host "============================================================"
|
||||||
|
Write-Host " ОС: Windows"
|
||||||
|
Write-Host " Каталог: $(Get-Location)"
|
||||||
|
Write-Host " Encoding: UTF-8 (BOM сохраняется в содержимом файлов)"
|
||||||
|
Write-Host " EOL (выгрузка): CRLF в рабочей копии (*.bsl, *.xml, …)"
|
||||||
|
Write-Host " core.autocrlf: false (управляет .gitattributes)"
|
||||||
|
Write-Host " core.quotepath: false"
|
||||||
|
Write-Host " core.longpaths: true"
|
||||||
|
if ($DryRun) {
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "⚠️ Режим -DryRun: изменения НЕ применены" -ForegroundColor Yellow
|
||||||
|
} else {
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "✅ Готово" -ForegroundColor Green
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "Следующие шаги:" -ForegroundColor Cyan
|
||||||
|
Write-Host " 1. git status"
|
||||||
|
Write-Host " 2. git add .gitattributes .gitignore"
|
||||||
|
Write-Host ' 3. git commit -m "Настройки Git для выгрузки конфигуратора 1С"'
|
||||||
|
if (-not $Renormalize) {
|
||||||
|
Write-Host " 4. При необходимости нормализовать EOL:"
|
||||||
|
Write-Host " .\setup-1c-repo.ps1 -Renormalize"
|
||||||
|
Write-Host " или: git add --renormalize ."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Write-Host "============================================================"
|
||||||
|
Write-Host ""
|
||||||
|
}
|
||||||
|
|
||||||
|
exit 0
|
||||||
@@ -0,0 +1,427 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# ============================================================
|
||||||
|
# setup-1c-repo.sh - Настройка Git-репозитория под выгрузку 1С (конфигуратор)
|
||||||
|
#
|
||||||
|
# Версия: 1.2.0
|
||||||
|
# Автор: Michael BAG <mk@p7net.ru>
|
||||||
|
# Репозиторий: https://git.p7net.ru/tools/git_man
|
||||||
|
#
|
||||||
|
# Платформы: Linux, macOS (на Windows используйте setup-1c-repo.ps1)
|
||||||
|
#
|
||||||
|
# Использование:
|
||||||
|
# ./setup-1c-repo.sh [--help] [--version] [--dry-run] [--force]
|
||||||
|
# [--init] [--renormalize] [--no-gitignore]
|
||||||
|
# [--verbose] [--quiet]
|
||||||
|
#
|
||||||
|
# Описание:
|
||||||
|
# Включает локальные настройки Git в текущей папке (cwd) для проектов
|
||||||
|
# с выгрузкой конфигурации/расширения из конфигуратора 1С:
|
||||||
|
# - UTF-8 с BOM (как у конфигуратора; BOM хранится как часть содержимого)
|
||||||
|
# - CRLF в рабочей копии для *.bsl / *.xml и др. текстовых файлов выгрузки
|
||||||
|
# - корректное отображение кириллических путей (core.quotepath=false)
|
||||||
|
# - длинные пути (core.longpaths=true), Unicode на macOS
|
||||||
|
# - создаёт/обновляет .gitattributes и .gitignore
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
SCRIPT_VERSION="1.2.0"
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Справка
|
||||||
|
# ============================================================
|
||||||
|
show_help() {
|
||||||
|
cat << EOF
|
||||||
|
============================================================
|
||||||
|
📦 setup-1c-repo.sh v${SCRIPT_VERSION} — настройка репозитория под 1С
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
ОПИСАНИЕ:
|
||||||
|
Настраивает локальный Git-репозиторий в ТЕКУЩЕЙ папке под
|
||||||
|
выгрузку из конфигуратора 1С (UTF-8 BOM + CRLF).
|
||||||
|
|
||||||
|
ИСПОЛЬЗОВАНИЕ:
|
||||||
|
./setup-1c-repo.sh [ОПЦИИ]
|
||||||
|
|
||||||
|
ОПЦИИ:
|
||||||
|
--help, -h Показать эту справку
|
||||||
|
--version, -V Показать версию скрипта
|
||||||
|
--dry-run Только показать, что будет сделано
|
||||||
|
--force, -f Перезаписать существующие .gitattributes / .gitignore
|
||||||
|
--init Выполнить git init, если папка ещё не репозиторий
|
||||||
|
--renormalize После настройки: git add --renormalize .
|
||||||
|
--no-gitignore Не создавать/не менять .gitignore
|
||||||
|
--verbose, -v Подробный вывод
|
||||||
|
--quiet, -q Минимальный вывод (только ошибки)
|
||||||
|
|
||||||
|
ЧТО ДЕЛАЕТ:
|
||||||
|
1. Локальный git config (quotepath, encoding, autocrlf, longpaths, …)
|
||||||
|
2. Файл .gitattributes — EOL/binary для файлов выгрузки 1С
|
||||||
|
3. Файл .gitignore — типичные исключения (*.cf, *.cfe, …)
|
||||||
|
|
||||||
|
ПРИМЕРЫ:
|
||||||
|
./setup-1c-repo.sh
|
||||||
|
./setup-1c-repo.sh --force --renormalize
|
||||||
|
./setup-1c-repo.sh --init --dry-run
|
||||||
|
|
||||||
|
============================================================
|
||||||
|
EOF
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
show_version() {
|
||||||
|
echo "setup-1c-repo.sh ${SCRIPT_VERSION}"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Аргументы
|
||||||
|
# ============================================================
|
||||||
|
DRY_RUN=false
|
||||||
|
FORCE=false
|
||||||
|
VERBOSE=false
|
||||||
|
QUIET=false
|
||||||
|
DO_INIT=false
|
||||||
|
RENORMALIZE=false
|
||||||
|
NO_GITIGNORE=false
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
--help|-h) show_help ;;
|
||||||
|
--version|-V) show_version ;;
|
||||||
|
--dry-run) DRY_RUN=true; shift ;;
|
||||||
|
--force|-f) FORCE=true; shift ;;
|
||||||
|
--init) DO_INIT=true; shift ;;
|
||||||
|
--renormalize) RENORMALIZE=true; shift ;;
|
||||||
|
--no-gitignore) NO_GITIGNORE=true; shift ;;
|
||||||
|
--verbose|-v) VERBOSE=true; shift ;;
|
||||||
|
--quiet|-q) QUIET=true; shift ;;
|
||||||
|
*)
|
||||||
|
echo -e "\033[0;31m❌ Неизвестная опция: $1\033[0m" >&2
|
||||||
|
echo " Используйте --help для справки" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Логирование
|
||||||
|
# ============================================================
|
||||||
|
if [ "$QUIET" != true ]; then
|
||||||
|
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'; CYAN='\033[0;36m'; MAGENTA='\033[0;35m'; NC='\033[0m'
|
||||||
|
else
|
||||||
|
RED=''; GREEN=''; YELLOW=''; BLUE=''; CYAN=''; MAGENTA=''; NC=''
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info() { [ "$QUIET" != true ] && echo -e "${CYAN}ℹ️ $1${NC}"; }
|
||||||
|
log_success() { [ "$QUIET" != true ] && echo -e "${GREEN}✅ $1${NC}"; }
|
||||||
|
log_warning() { [ "$QUIET" != true ] && echo -e "${YELLOW}⚠️ $1${NC}"; }
|
||||||
|
log_error() { echo -e "${RED}❌ $1${NC}" >&2; }
|
||||||
|
log_debug() { [ "$VERBOSE" = true ] && [ "$QUIET" != true ] && echo -e "${BLUE}🔍 $1${NC}"; }
|
||||||
|
log_step() { [ "$QUIET" != true ] && echo -e "${MAGENTA}▶ $1${NC}"; }
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Определение ОС
|
||||||
|
# ============================================================
|
||||||
|
OS_NAME="$(uname -s 2>/dev/null || echo unknown)"
|
||||||
|
case "$OS_NAME" in
|
||||||
|
Darwin*) OS_KIND="macos" ;;
|
||||||
|
Linux*) OS_KIND="linux" ;;
|
||||||
|
MINGW*|MSYS*|CYGWIN*) OS_KIND="windows-bash" ;;
|
||||||
|
*) OS_KIND="unix" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Шаблоны файлов
|
||||||
|
# ============================================================
|
||||||
|
# Конфигуратор 1С выгружает текстовые файлы в UTF-8 с BOM и с CRLF.
|
||||||
|
# Git хранит BOM как часть содержимого; eol=crlf даёт CRLF в рабочей копии
|
||||||
|
# на любой ОС — совпадает с повторной выгрузкой из конфигуратора.
|
||||||
|
GITATTRIBUTES_CONTENT='# .gitattributes — выгрузка конфигуратора 1С (UTF-8 BOM + CRLF)
|
||||||
|
# Создано setup-1c-repo.sh (git_man). Не удаляйте без необходимости.
|
||||||
|
#
|
||||||
|
# Правило: текстовые файлы выгрузки — text + eol=crlf (рабочая копия = CRLF,
|
||||||
|
# в объекте Git нормализуется к LF). Бинарники — binary (без конвертации EOL).
|
||||||
|
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
# --- Текстовые файлы выгрузки конфигуратора ---
|
||||||
|
*.bsl text eol=crlf
|
||||||
|
*.os text eol=crlf
|
||||||
|
*.xml text eol=crlf
|
||||||
|
*.txt text eol=crlf
|
||||||
|
*.html text eol=crlf
|
||||||
|
*.htm text eol=crlf
|
||||||
|
*.xsd text eol=crlf
|
||||||
|
*.xslt text eol=crlf
|
||||||
|
*.xsl text eol=crlf
|
||||||
|
*.Form text eol=crlf
|
||||||
|
*.Module text eol=crlf
|
||||||
|
*.max text eol=crlf
|
||||||
|
|
||||||
|
# --- Служебные / документация репозитория (LF) ---
|
||||||
|
*.md text eol=lf
|
||||||
|
*.json text eol=lf
|
||||||
|
*.yml text eol=lf
|
||||||
|
*.yaml text eol=lf
|
||||||
|
*.sh text eol=lf
|
||||||
|
*.gitignore text eol=lf
|
||||||
|
*.gitattributes text eol=lf
|
||||||
|
.editorconfig text eol=lf
|
||||||
|
|
||||||
|
# --- Скрипты Windows ---
|
||||||
|
*.bat text eol=crlf
|
||||||
|
*.cmd text eol=crlf
|
||||||
|
*.ps1 text eol=crlf
|
||||||
|
|
||||||
|
# --- Бинарные артефакты 1С и медиа ---
|
||||||
|
*.bin binary
|
||||||
|
*.cf binary
|
||||||
|
*.cfe binary
|
||||||
|
*.cfu binary
|
||||||
|
*.epf binary
|
||||||
|
*.erf binary
|
||||||
|
*.axdt binary
|
||||||
|
*.addin binary
|
||||||
|
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.jpeg binary
|
||||||
|
*.gif binary
|
||||||
|
*.bmp binary
|
||||||
|
*.ico binary
|
||||||
|
*.webp binary
|
||||||
|
*.tif binary
|
||||||
|
*.tiff binary
|
||||||
|
*.svg -text
|
||||||
|
|
||||||
|
*.zip binary
|
||||||
|
*.rar binary
|
||||||
|
*.7z binary
|
||||||
|
*.gz binary
|
||||||
|
|
||||||
|
*.xls binary
|
||||||
|
*.xlsx binary
|
||||||
|
*.xlsm binary
|
||||||
|
*.doc binary
|
||||||
|
*.docx binary
|
||||||
|
*.pdf binary
|
||||||
|
*.rtf binary
|
||||||
|
|
||||||
|
*.ttf binary
|
||||||
|
*.otf binary
|
||||||
|
*.woff binary
|
||||||
|
*.woff2 binary
|
||||||
|
*.eot binary
|
||||||
|
'
|
||||||
|
|
||||||
|
GITIGNORE_CONTENT='# .gitignore — типовые исключения для проектов 1С (конфигуратор)
|
||||||
|
# Создано setup-1c-repo.sh (git_man)
|
||||||
|
|
||||||
|
# Бинарные выгрузки конфигурации / расширений / обработок
|
||||||
|
*.cf
|
||||||
|
*.cfe
|
||||||
|
*.cfu
|
||||||
|
*.epf
|
||||||
|
*.erf
|
||||||
|
|
||||||
|
# Временные и резервные
|
||||||
|
*.tmp
|
||||||
|
*.bak
|
||||||
|
*.~*
|
||||||
|
*~
|
||||||
|
*.old
|
||||||
|
*.orig
|
||||||
|
|
||||||
|
# Логи и дампы
|
||||||
|
*.log
|
||||||
|
*.lgp
|
||||||
|
*.lgf
|
||||||
|
|
||||||
|
# ОС
|
||||||
|
Thumbs.db
|
||||||
|
ehthumbs.db
|
||||||
|
Desktop.ini
|
||||||
|
desktop.ini
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
|
||||||
|
# IDE / редакторы
|
||||||
|
.vs/
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.suo
|
||||||
|
*.user
|
||||||
|
*.userosscache
|
||||||
|
*.sln.docstates
|
||||||
|
|
||||||
|
# Отладка / кэш
|
||||||
|
Debug/
|
||||||
|
debug/
|
||||||
|
cache/
|
||||||
|
*.pfl
|
||||||
|
'
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Проверка окружения
|
||||||
|
# ============================================================
|
||||||
|
log_step "Проверка окружения (ОС: ${OS_KIND})..."
|
||||||
|
|
||||||
|
if ! command -v git >/dev/null 2>&1; then
|
||||||
|
log_error "Git не установлен"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d ".git" ] && [ ! -f ".git" ]; then
|
||||||
|
if [ "$DO_INIT" = true ]; then
|
||||||
|
if [ "$DRY_RUN" = true ]; then
|
||||||
|
echo " [DRY-RUN] git init"
|
||||||
|
else
|
||||||
|
git init
|
||||||
|
log_success "Выполнен git init"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_error "Текущая папка не является Git-репозиторием"
|
||||||
|
echo " Запустите из корня репозитория или добавьте --init" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_success "Окружение проверено"
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Локальный git config
|
||||||
|
# ============================================================
|
||||||
|
set_local_config() {
|
||||||
|
local key="$1"
|
||||||
|
local value="$2"
|
||||||
|
if [ "$DRY_RUN" = true ]; then
|
||||||
|
echo " [DRY-RUN] git config --local $key $value"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
git config --local "$key" "$value"
|
||||||
|
log_debug "config $key=$value"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_step "Локальные настройки Git..."
|
||||||
|
|
||||||
|
# Кириллические пути без \320\...
|
||||||
|
set_local_config core.quotepath false
|
||||||
|
# Длинные пути (особенно Windows / сетевые диски / глубокие деревья 1С)
|
||||||
|
set_local_config core.longpaths true
|
||||||
|
# Кодировки UI и коммитов
|
||||||
|
set_local_config gui.encoding utf-8
|
||||||
|
set_local_config i18n.commitEncoding utf-8
|
||||||
|
# EOL полностью через .gitattributes (без двойной конвертации)
|
||||||
|
set_local_config core.autocrlf false
|
||||||
|
set_local_config core.safecrlf warn
|
||||||
|
# Рекомендации 1С:ГитКонвертер для крупных деревьев метаданных
|
||||||
|
set_local_config diff.renames false
|
||||||
|
set_local_config diff.renameLimit 1
|
||||||
|
|
||||||
|
# macOS: NFD/NFC для имён файлов с кириллицей
|
||||||
|
if [ "$OS_KIND" = "macos" ]; then
|
||||||
|
set_local_config core.precomposeunicode true
|
||||||
|
log_info "macOS: core.precomposeunicode=true"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$DRY_RUN" = true ]; then
|
||||||
|
log_info "Локальный git config (dry-run)"
|
||||||
|
else
|
||||||
|
log_success "Локальный git config применён"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Запись файла с бэкапом
|
||||||
|
# ============================================================
|
||||||
|
write_file_safe() {
|
||||||
|
local path="$1"
|
||||||
|
local content="$2"
|
||||||
|
local label="$3"
|
||||||
|
|
||||||
|
if [ -f "$path" ] && [ "$FORCE" != true ]; then
|
||||||
|
log_warning "$label уже существует — пропуск (используйте --force)"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$DRY_RUN" = true ]; then
|
||||||
|
if [ -f "$path" ]; then
|
||||||
|
echo " [DRY-RUN] перезаписать $path (бэкап ${path}.bak)"
|
||||||
|
else
|
||||||
|
echo " [DRY-RUN] создать $path"
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$path" ]; then
|
||||||
|
cp -f "$path" "${path}.bak"
|
||||||
|
log_info "Бэкап: ${path}.bak"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Пишем через printf, чтобы сохранить финальный перевод строки
|
||||||
|
printf '%s\n' "$content" > "$path"
|
||||||
|
log_success "Записан $path"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_step "Файл .gitattributes..."
|
||||||
|
write_file_safe ".gitattributes" "$GITATTRIBUTES_CONTENT" ".gitattributes"
|
||||||
|
|
||||||
|
if [ "$NO_GITIGNORE" != true ]; then
|
||||||
|
log_step "Файл .gitignore..."
|
||||||
|
write_file_safe ".gitignore" "$GITIGNORE_CONTENT" ".gitignore"
|
||||||
|
else
|
||||||
|
log_info "Пропуск .gitignore (--no-gitignore)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Renormalize
|
||||||
|
# ============================================================
|
||||||
|
if [ "$RENORMALIZE" = true ]; then
|
||||||
|
log_step "Нормализация индекса (git add --renormalize .)..."
|
||||||
|
if [ "$DRY_RUN" = true ]; then
|
||||||
|
echo " [DRY-RUN] git add --renormalize ."
|
||||||
|
else
|
||||||
|
git add --renormalize .
|
||||||
|
log_success "Индекс перенормализован"
|
||||||
|
log_warning "Проверьте git status — возможны массовые изменения EOL"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# Итог
|
||||||
|
# ============================================================
|
||||||
|
if [ "$QUIET" != true ]; then
|
||||||
|
echo ""
|
||||||
|
echo "============================================================"
|
||||||
|
echo -e "${CYAN}📊 Итог настройки под выгрузку конфигуратора 1С${NC}"
|
||||||
|
echo "============================================================"
|
||||||
|
echo " ОС: $OS_KIND ($OS_NAME)"
|
||||||
|
echo " Каталог: $(pwd)"
|
||||||
|
echo " Encoding: UTF-8 (BOM сохраняется в содержимом файлов)"
|
||||||
|
echo " EOL (выгрузка): CRLF в рабочей копии (*.bsl, *.xml, …)"
|
||||||
|
echo " core.autocrlf: false (управляет .gitattributes)"
|
||||||
|
echo " core.quotepath: false"
|
||||||
|
if [ "$DRY_RUN" = true ]; then
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW}⚠️ Режим --dry-run: изменения НЕ применены${NC}"
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}✅ Готово${NC}"
|
||||||
|
echo ""
|
||||||
|
echo -e "${CYAN}Следующие шаги:${NC}"
|
||||||
|
echo " 1. git status"
|
||||||
|
echo " 2. git add .gitattributes .gitignore"
|
||||||
|
echo " 3. git commit -m \"Настройки Git для выгрузки конфигуратора 1С\""
|
||||||
|
if [ "$RENORMALIZE" != true ]; then
|
||||||
|
echo " 4. При необходимости нормализовать EOL:"
|
||||||
|
echo " ./setup-1c-repo.sh --renormalize"
|
||||||
|
echo " или: git add --renormalize ."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "============================================================"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
Reference in New Issue
Block a user