У меня есть 2 каталога в моем репозитории GitHub. Я хочу удалить одно из них. Как я мог сделать это, не удаляя и не создавая заново весь репозиторий?
Как удалить каталог из репозитория git?
Ответы (16)
Удалить каталог из git и локального
Вы можете проверить "master" с обоими каталогами;
git rm -r one-of-the-directories // This deletes from filesystem
git commit . -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)
Удалить каталог из git, но НЕ локальный
Как упоминалось в комментариях, вы обычно хотите удалить этот каталог из git, но не удалять его полностью из файловой системы (локально)
В этом случае используйте:
git rm -r --cached myFolder
git rm -r myFolder
, он работал, но также удалил все из каталога MyFolder. Пришлось вернуть все в каталоге MyFolder, а затем зафиксировать.
- person Justin; 25.10.2012
git rm -r --cached myFolder
- person karmakaze; 16.11.2012
git rm -r myFolder
и нажмите
- person karmakaze; 05.04.2016
git rm -r --cached *
, чтобы удалить все
- person H A; 11.06.2016
git rm -r --cached myFolder
произведет удаление в текущей ветке, которую затем все еще нужно зафиксировать и нажать.
- person karmakaze; 22.06.2016
git rm -r --cached to_be_excluded_dir
. Все снова добавлено.
- person codezombie; 04.02.2018
git rm -r --cached directory/
only удаляется из git tracked, но структура репозитория остается.
- person Néstor; 29.08.2018
fatal: pathspec 'web/assets/2d40d8f2/' did not match any files
будет брошен, когда вы используете git rm --cached web/assets/2d40d8f2/
- person Muhammad Omer Aslam; 30.03.2020
.
в git commit . -m "Remove duplicated directory"
?
- person vineeshvs; 20.04.2020
.
(также известный как точка / точка) обозначает текущий каталог. Я считаю, что это работает на всех платформах (но я менее уверен в версиях Windows).
- person karmakaze; 23.04.2020
Чтобы удалить папку / каталог только из репозитория git, а не из локального, попробуйте 3 простые команды.
Действия по удалению каталога
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
Действия по игнорированию этой папки при следующих фиксациях
Чтобы игнорировать эту папку из следующих коммитов, создайте один файл в корневой папке (основной каталог проекта, в котором инициализирован git) с именем .gitignore и поместите в него имя этой папки. Вы можете игнорировать столько файлов / папок, сколько хотите
Файл .gitignore будет выглядеть так
/FolderName
rm -rf FolderName; git add -A; git commit -m 'removed FolderName
?
- person alpha_989; 21.01.2018
Если по какой-то причине то, что сказал кармаказе, не работает, вы можете попробовать удалить каталог, который хотите использовать, или с помощью браузера файловой системы (например, в проводнике Windows). После удаления каталога введите команду: git add -A
, затем git commit -m 'deleting directory'
, а затем git push origin master
.
Вы можете попробовать следующее: git rm -rf <directory_name>
Это принудительно удалит каталог.
Если вы удалите файлы в каталоге (с git rm
, как объясняют другие ответы), тогда каталог больше не существует, что касается git. Вы не можете зафиксировать пустой каталог или удалить его.
Это не похоже на Subversion, где вы должны явно svn rm emptyfolder/
, и, кстати, именно поэтому страница man
для git описывает себя как «тупой трекер контента»
Ответ на "Как добавить пустой каталог в репозиторий git " ссылки на часто задаваемые вопросы по этой теме:
В настоящее время конструкция индекса git (промежуточная область) позволяет перечислять только файлы, и никто, достаточно компетентный, чтобы внести изменения, разрешающие пустые каталоги, не позаботился об этой ситуации, чтобы исправить ее.
Каталоги добавляются автоматически при добавлении в них файлов. То есть каталоги никогда не нужно добавлять в репозиторий, и они не отслеживаются сами по себе.
Вы можете сказать "
git add <dir>
", и он добавит туда файлы.Если вам действительно нужен каталог для оформления заказа, вы должны создать в нем файл. .gitignore хорошо подходит для этой цели; вы можете оставить его пустым или ввести имена файлов, которые должны появиться в каталоге.
Я уже зафиксировал папку раньше и хочу удалить каталог из истории.
Я сделал следующее:
Добавить папку в .gitignore
:
echo Folder_Name/ >> .gitignore
Удалить из всех коммитов:
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all
удалите ссылки из старых коммитов:
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
Убедитесь, что все старые ссылки полностью удалены
rm -Rf .git/logs .git/refs/original
Выполните сборку мусора
git gc --prune=all --aggressive
отправьте вам изменения в онлайн-репозиторий:
git push
Вы здесь закончили.
Но вы можете выполнить следующие действия, чтобы отправить все изменения во все ветки: Но будьте осторожны с этой командой!
git push origin --all --force
git push origin --tags --force
После этого папка была удалена из git, но не удалена с локального диска.
Перейдите в каталог git и введите следующую команду: rm -rf ‹Имя каталога>
После удаления каталога зафиксируйте изменения: git commit -m "Ваше сообщение о фиксации".
Затем просто нажмите изменения в удаленном каталоге GIT: git push origin ‹Имя ветки>
для удаления пустых папок
Я хотел удалить созданный мной пустой каталог (папку), git не может его удалить, после некоторого исследования я узнал, что Git не отслеживает пустые каталоги. Если у вас есть пустой каталог в вашем рабочем дереве, вы должны просто удалить его с помощью
rm -r folderName
Нет необходимости задействовать Git.
Вы можете удалить папку локально, а затем нажать, как показано ниже:
git rm -r folder_name
git commit -m "your commit"
git push origin master
Обычно я использую git add --all
для удаления файлов / папок из удаленных репозиториев
rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master
master
можно заменить любой другой веткой репозитория.
Вы можете использовать Attlasian Source Tree (Windows) (https://www.atlassian.com/software/sourcetree/overview). Просто выберите файлы из дерева и нажмите кнопку «Удалить» вверху. Файлы будут удалены из локального репозитория и локальной базы данных git. Затем зафиксируйте, затем нажмите.
Один из моих коллег предложил BFG Repo-Cleaner, который я считаю мощным. Это не только удаление ненужных данных, но и очистка вашего репозитория от любой связанной с ним информации о фиксации.
Первая команда git должна знать, кто вы, прежде чем что-либо удалять
- git init
- git config user.name "кто-то"
- git config user.email "кто-то@someplace.com"
- git rm -r
- git commit -m "удаление каталога"
- git push origin master
Чтобы добавить новый каталог:
mkdir <YOUR-DIRECTORY>
Но теперь Git не знает об этом новом каталоге, потому что Git отслеживает файлы, а не каталоги DIRECTORY
git status
Git не узнает о внесенных нами изменениях, поэтому мы добавляем скрытый .keep
файл, чтобы Git узнал об этом новом изменении.
touch /YOUR-directory/.keep
Теперь, если вы нажмете git status
, Git узнает об изменениях.
И если вы хотите удалить каталог, вы должны использовать эту команду.
rm -r <YOUR-DIRECTORY>
И если вы отметили с помощью git status
, вы увидите, что каталог был удален.
Комбинация двух ответов сработала для меня
git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push
если по-прежнему отображается какое-то предупреждение, удалите файлы вручную
git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push
попробуйте rm -r -f <folder name>
или rm -r --force <folder name>
- принудительно удалить папку
git rm -r --cached folder_name
- person Vadim   schedule 31.08.2020