Вы разработали проект на своём компьютере и теперь хотите сохранить его в GitLab — поделиться с командой или просто иметь надёжное облачное хранилище с контролем версий. Казалось бы, задача простая, но у новичков часто возникают неожиданные трудности: конфликт веток, отказ в push из-за защиты, а иногда и случайная публикация файлов с паролями. В этой статье я подробно, шаг за шагом, расскажу, как правильно загрузить проект в GitLab, обойти все грабли и, если вы уже наступили на некоторые из них, как исправить ситуацию.
Содержание
- Подготовка
- Создание репозитория на GitLab
- Локальная инициализация Git и первый коммит
- Связываем локальный репозиторий с GitLab
- Отправляем код на сервер
- Типичные проблемы и их решения
- Remote origin already exists
- Ветка master вместо main
- Push rejected (fetch first)
- Protected branch error
- Важнейший раздел: как не допустить утечку секретов (файлы .env)
- До первого коммита: добавляем .gitignore
- Если уже запушили .env: экстренные меры
- Заключение
Подготовка
Прежде всего убедитесь, что у вас установлен Git. Для Windows скачайте и установите Git for Windows — вместе с ним появится удобный терминал Git Bash, в котором работают все команды из статьи.
Также у вас должен быть аккаунт на GitLab.com (или корпоративном GitLab).
Создание репозитория на GitLab
- Войдите в свой профиль и нажмите кнопку New project.
- Выберите Create blank project.
- Важно: снимите галочку "Initialize repository with a README"! Если оставить её, GitLab создаст начальный коммит с README, и потом придётся объединять истории. Пустой репозиторий — то, что нужно для загрузки существующего проекта.
- Введите название проекта (например, my-awesome-app) и нажмите Create project.
После создания вы увидите страницу с URL вашего репозитория. Он выглядит так:
plaintexthttps://gitlab.com/username/my-awesome-app.git (доступ по HTTPS)
или
plaintextgit@gitlab.com:username/my-awesome-app.git (доступ по SSH)
Скопируйте его — он понадобится чуть позже.
Локальная инициализация Git и первый коммит
Откройте терминал (Git Bash на Windows) и перейдите в папку с вашим проектом:
plaintextcd /c/Users/Имя/Desktop/проект
Теперь сделаем папку Git-репозиторием и создадим первый коммит:
plaintextgit init # инициализация репозитория git add . # добавляем все файлы в индекс git commit -m "Initial commit" # создаём коммит
Если вы ни разу не настраивали Git, он может попросить представиться:
plaintextgit config --global user.name "Ваше Имя" git config --global user.email "ваш.email@example.com"
Связываем локальный репозиторий с GitLab
Теперь нужно указать Git, где находится удалённый репозиторий (на GitLab). Используйте команду remote add с тем URL, который скопировали ранее:
plaintextgit remote add origin https://gitlab.com/username/my-awesome-app.git
Если вы предпочитаете SSH (и настроили ключи), подставьте SSH-ссылку.
Отправляем код на сервер
Загружаем наши коммиты в GitLab:
plaintextgit push -u origin main
Флаг -u устанавливает связь между вашей локальной веткой main и удалённой, чтобы в будущем можно было писать просто git push.
Если ваша локальная ветка называется mastermain, прочитайте следующий раздел про переименование ветки.
Типичные проблемы и их решения
Даже при точном следовании инструкциям могут возникнуть ошибки. Рассмотрим самые частые.
Remote origin already exists
Ошибка:
error: remote origin already exists.
Причина:
Вы уже добавляли удалённый репозиторий с именем origin ранее.
Решение:
Проверьте, какой URL привязан:
plaintextgit remote -v
Если URL не тот, замените его:
plaintextgit remote set-url origin https://gitlab.com/username/правильный-проект.git
Если хотите удалить старый origin и добавить заново:
plaintextgit remote remove origin git remote add origin https://gitlab.com/username/правильный-проект.git
Ветка master вместо main
Современные сервисы (в том числе GitLab) используют имя main для основной ветки. Если ваш локальный репозиторий создан давно, ветка может называться master.
Решение: переименуйте локальную ветку:
plaintextgit branch -m master main
Теперь можно пушить как обычно: git push -u origin main.
Push rejected (fetch first)
Ошибка:! [rejected] main -> main (fetch first)
Причина: удалённый репозиторий содержит коммиты, которых нет у вас локально (например, вы случайно создали проект с README или кто-то другой уже что-то запушил).
Решение 1 (безопасное): скачайте изменения и объедините их:
plaintextgit pull origin main --allow-unrelated-histories
Разрешите возможные конфликты, затем сделайте коммит слияния и запушьте:
plaintextgit push origin main
Решение 2 (если на сервере ничего ценного нет): принудительно перезапишите удалённую ветку своей версией:
plaintextgit push -f origin main
Будьте осторожны: эта команда удалит файлы на сервере и заменит их вашими.
Protected branch error
Ошибка:
remote: GitLab: You are not allowed to push code to protected branches on this project.
Причина: ветка main защищена от прямых изменений (настройки по умолчанию для главной ветки).
Решение:
- Зайдите в проект на GitLab.
- Перейдите Settings → Repository → Protected branches.
- Найдите ветку main и нажмите Unprotect (или отредактируйте, разрешив push для разработчиков/мейнтейнеров).
- После этого повторите git push.
Важнейший раздел: как не допустить утечку секретов (файлы .env)
Файлы .env содержат пароли, токены, ключи API — то, что никогда не должно попадать в репозиторий. Если вы случайно запушили такой файл, считайте, что все секреты скомпрометированы. Действовать нужно немедленно.
До первого коммита: добавляем .gitignore
Лучший способ избежать проблемы — вообще не добавлять .env в Git. Для этого создайте в корне проекта файл .gitignore и пропишите в нём:
plaintext.env .env.*
Затем выполните git add .gitignore и закоммитьте. Теперь Git будет игнорировать любые файлы, начинающиеся с .env.
Если уже запушили .env: экстренные меры
Вы обнаружили, что файлы .env уже в репозитории и даже на сервере. Что делать?
Шаг 1. Немедленно смените все пароли и токены!
Даже после удаления файлов из Git старые коммиты остаются в истории. Любой, у кого есть доступ к репозиторию, может их найти. Поэтому смените все секреты, которые были в .env.
Шаг 2. Удалите .env из отслеживания и добавьте в .gitignore
plaintext# Добавляем .env в .gitignore echo ".env" >> .gitignore echo ".env.*" >> .gitignore # Удаляем все .env файлы из индекса Git (но оставляем на диске) git ls-files | grep "\.env" | xargs -r git rm --cached
Шаг 3. Создайте коммит с этими изменениями
plaintextgit add .gitignore git commit -m "Remove .env files from tracking"
Шаг 4. Перепишите историю, чтобы полностью удалить секреты (если это критично)
Если вы хотите не просто убрать файлы из последнего коммита, а вычистить их из всей истории, используйте специальные инструменты, например BFG Repo-Cleaner.
- Скачайте bfg.jar с официального сайта.
- Временно удалите remote, чтобы случайно не запушить во время чистки:
plaintextgit remote remove origin
Запустите BFG из папки проекта:
plaintextjava -jar /путь/к/bfg.jar --delete-files .env- Очистите репозиторий:
plaintextgit reflog expire --expire=now --all && git gc --prune=now --aggressive
- Верните remote и принудительно запушьте исправленную историю:
plaintextgit remote add origin https://gitlab.com/username/my-awesome-app.git git push --force-with-lease origin main
Внимание: после переписывания истории всем, кто работает с репозиторием, нужно выполнить git pull с флагом --force (или переклонировать репозиторий).
Альтернативный простой способ: пересоздать репозиторий
Если проект только начинается и история не важна, проще удалить репозиторий на GitLab и загрузить всё заново, предварительно настроив .gitignore. Для этого:
- Удалите папку
.gitлокально(rm -rf .git). - Заново выполните
git init, git add ., git commit. - Создайте новый пустой проект на GitLab и запушьте.
Заключение
Загрузка проекта в GitLab — процесс несложный, но требующий внимания к деталям. Самое главное:
- Всегда создавайте пустой репозиторий на сервере (без README).
- Сразу настраивайте .gitignore, чтобы случайно не закоммитить секреты.
- Если столкнулись с ошибками — не паникуйте, у каждой есть простое решение.
Надеюсь, это руководство помогло вам успешно разместить код на GitLab и избежать утечки важных данных. Сохраняйте статью в закладки — она пригодится не раз.



