- Андрей Куманяев/
- Git: руководства и команды/
- Как удалить папку в GitLab: через веб-интерфейс и git rm/
Как удалить папку в GitLab: через веб-интерфейс и git rm
Удалить папку из GitLab репозитория можно двумя способами: через командную строку с git rm -r или через веб-интерфейс GitLab. В обоих случаях папка исчезнет из текущей версии, но останется в истории коммитов — это нормальное поведение Git.
Способ 1: удаление через команду git rm #
Самый надёжный способ — через командную строку:
# Клонировать репозиторий (если ещё нет локально)
git clone [email protected]:username/project.git
cd project
# Посмотреть содержимое (убедиться, что папка существует)
ls -la
# Удалить папку рекурсивно
git rm -r old-folder/
# Вывод:
# rm 'old-folder/file1.txt'
# rm 'old-folder/subdir/file2.txt'
# rm 'old-folder/subdir/file3.js'
# Проверить статус
git status
# Changes to be committed:
# deleted: old-folder/file1.txt
# deleted: old-folder/subdir/file2.txt
# Создать коммит
git commit -m "Remove old-folder directory"
# Отправить на GitLab
git push origin main
Сухой прогон перед удалением #
Если не уверены, что именно будет удалено — используйте флаг --dry-run:
# Посмотреть, что будет удалено, без реального удаления
git rm -r --dry-run old-folder/
# Вывод:
# rm 'old-folder/README.md'
# rm 'old-folder/config.json'
# rm 'old-folder/src/main.js'
# (реального удаления не произошло)
После проверки — повторить без --dry-run.
Разница между git rm и просто удалением папки #
# Обычное удаление (файлы удалены с диска, Git не знает)
rm -rf old-folder/
# Нужно явно сообщить Git об удалении
git add -u
# или
git add old-folder/ # для удалённых файлов
# git rm делает всё за один шаг:
git rm -r old-folder/
# = удаляет папку С диска И регистрирует удаление в индексе
Рекомендуется использовать git rm -r — меньше шагов и нет риска забыть.
Удалить папку из индекса, но оставить на диске #
Если папка случайно добавлена в репозиторий и её нужно исключить (например, node_modules, build, .env):
# Убрать из Git контроля, не удаляя с диска
git rm -r --cached node_modules/
# Добавить в .gitignore чтобы не добавлялась снова
echo "node_modules/" >> .gitignore
# Закоммитить
git add .gitignore
git commit -m "Remove node_modules from tracking, add to .gitignore"
git push origin main
После этого node_modules/ останется на диске локально, но не будет отслеживаться Git.
Способ 2: удаление через веб-интерфейс GitLab #
GitLab позволяет удалять папки через браузер:
1. Открыть репозиторий на GitLab
2. Перейти в нужную папку (нажать на неё в списке файлов)
3. Нажать кнопку с тремя точками (...) или иконку действий
рядом с названием папки
4. Выбрать "Delete directory"
5. В диалоге подтвердить:
- Commit message (например: "Remove old-folder")
- Target branch (ветка для коммита)
6. Нажать "Delete directory"
Если кнопка удаления не видна — убедитесь, что у вас есть права Developer или Maintainer в проекте.
Удаление через GitLab Web IDE #
Альтернативный способ через встроенный редактор:
1. Открыть репозиторий
2. Нажать кнопку "Web IDE" (или Edit → Web IDE)
3. В дереве файлов слева найти папку
4. Правый клик → Delete
5. Подтвердить удаление
6. В Source Control (иконка слева) написать сообщение коммита
7. Нажать "Commit to main"
Web IDE позволяет удалить несколько файлов/папок в одном коммите — это удобнее, чем стандартный веб-редактор.
Удаление папки из всей истории репозитория #
Если папка содержала секреты или конфиденциальные данные и её нужно удалить из всей истории:
# Инструмент BFG Repo-Cleaner
# Скачать: https://rtyley.github.io/bfg-repo-cleaner/
# Клонировать репозиторий как bare (зеркало)
git clone --mirror [email protected]:username/project.git
# Удалить папку из всей истории
java -jar bfg.jar --delete-folders old-folder project.git
# Очистить рефлоги
cd project.git
git reflog expire --expire=now --all
git gc --prune=now --aggressive
# Force push
git push --force
Важно: после force push все участники команды должны заново клонировать репозиторий — их локальные копии устарели.
Альтернатива BFG — git filter-repo:
# Установить git-filter-repo
pip install git-filter-repo
# Удалить папку из всей истории
git filter-repo --path old-folder/ --invert-paths
# Force push
git push origin --force --all
Восстановление удалённой папки #
Если ещё не закоммитили:
# Восстановить папку из последнего коммита
git restore old-folder/
Если уже создали коммит (но не push):
# Отменить последний коммит, сохранив изменения
git reset --soft HEAD~1
# Восстановить папку
git restore old-folder/
Если уже запушили на GitLab:
# Создать revert-коммит
git revert HEAD
git push origin main
Практические примеры #
# Удалить папку с логами
git rm -r logs/
git commit -m "Remove logs directory"
git push origin main
# Удалить папку и исключить из отслеживания
git rm -r --cached dist/
echo "dist/" >> .gitignore
git add .gitignore
git commit -m "Ignore dist folder"
# Удалить несколько папок одним коммитом
git rm -r old-feature/ deprecated-api/ temp/
git commit -m "Remove deprecated code directories"
git push origin main
# Сухой прогон для проверки
git rm -r --dry-run src/legacy/
# Удалить папки по маске
git rm -r **/__pycache__/
git commit -m "Remove Python cache directories"
Часто задаваемые вопросы #
Останется ли папка в истории коммитов после удаления? Да. git rm -r создаёт новый коммит с удалением. Папка доступна в старых коммитах через git show <hash>:path/to/folder. Для удаления из всей истории — BFG или git filter-repo.
Как удалить пустую папку? Git не отслеживает пустые папки. Если папка пустая — она не в репозитории. Обычно в пустых папках оставляют файл .gitkeep чтобы Git отслеживал папку.
Удалятся ли локальные файлы при git rm -r? Да, файлы удаляются с диска. Если нужно только убрать из Git — используйте git rm -r --cached.
Почему в веб-интерфейсе GitLab нет кнопки удаления папки? Минимально необходимая роль — Developer. Если вы Guest или Reporter — кнопки удаления нет. Также кнопка может быть скрыта, если ветка защищена.
Как удалить папку во всех ветках? git rm -r удаляет только в текущей ветке. Для каждой ветки нужно повторить операцию, или использовать BFG/git filter-repo для удаления из всей истории всех веток.
Заключение #
Удалить папку в GitLab репозитории: git rm -r folder/, затем git commit и git push. Через веб-интерфейс — перейти в папку, три точки, “Delete directory”. Для удаления только из отслеживания (сохранив файлы) — git rm -r --cached folder/. Для удаления из всей истории (секреты, пароли) — BFG Repo-Cleaner. Управление ролями для доступа к удалению — роли GitLab.