Как удалить каталог из репозитория git?

У меня есть 2 каталога в моем репозитории GitHub. Я хотел бы удалить один из них. Как я могу сделать это без удаления и повторного создания всего хранилища?

Ответ 1

Удалить каталог из git и локального

Вы можете проверить "мастер" с обоими каталогами;

git rm -r one-of-the-directories
git commit -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)

Удалить каталог из git, но не локальный

Как уже упоминалось в комментариях, вы обычно хотите удалить этот каталог из git, но не полностью удалить его из файловой системы (локальной)

В этом случае используйте:

git rm -r --cached myFolder

Ответ 2

Чтобы удалить папку/каталог только из репозитория git, а не из локальной, попробуйте 3 простых команды.


Шаги по удалению каталога

git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master

Шаги, чтобы игнорировать эту папку в следующих коммандах

Чтобы игнорировать эту папку из следующих коммитов, создайте один файл в корневом каталоге с именем .gitignoreи вставьте это имя папок в него. Вы можете разместить столько, сколько хотите

.gitignore файл будет выглядеть следующим образом

/FolderName

remove directory

Ответ 3

Если по какой-то причине сказанное karmakaze не работает, вы можете попробовать удалить каталог, который вы хотите использовать, или с помощью браузера файловой системы (например, в Windows File Explorer). После удаления каталога, введите команду:
git add -A
а потом
git commit -m 'deleting directory'
а потом
git push origin master.

Ответ 4

Вы можете попробовать следующее: git rm -rf <directory_name>

Это приведет к удалению каталога.

Ответ 5

Если вы удалите файлы в каталоге (с git rm, как объясняют другие ответы), каталог больше не существует до git. Вы не можете передать пустой каталог и не можете удалить его.

Это не похоже на subversion, где вы должны явно svn rm emptyfolder/, и, кстати, почему страница man для git описывает себя как "глупый трекер контента"

Ответ на Как добавить пустой каталог в репозиторий git к Вопросы и ответы по этому вопросу:

В настоящее время дизайн индекса git(промежуточная область) разрешает только файлы быть перечислены, и никто не достаточно компетентен чтобы сделать изменение пустым в каталогах достаточно эта ситуация для его исправления.

Каталоги добавляются автоматически при добавлении в них файлов. Что, каталоги никогда не должны быть добавлены к репозиторию и не отслеживаются самостоятельно.

Вы можете сказать "git add <dir>", и это добавит туда файлы.

Если вам действительно нужен каталог для в выписках вы должны создать файл в нем. .gitignore хорошо работает для эта цель; вы можете оставить его пустым, или введите имена файлов, которые вы Ожидается, что они появятся в каталоге.

Ответ 6

Перейдите в каталог git, затем введите следующую команду: rm -rf < Справочное имя >

После удаления каталога зафиксируйте изменения: git commit -m "Ваше обязательное сообщение"

Затем просто нажмите изменения в удаленном каталоге git: git push origin < Название филиалa >

Ответ 7

Вы можете удалить папку локально, а затем нажать, как показано ниже:

git rm -r folder_name
git commit -m "your commit"
git push origin master

Ответ 8

Обычно я использую git add --all для удаления файлов/папок из удаленных репозиториев

rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master

master может быть заменен любой другой ветвью репозитория.

Ответ 9

для удаления пустых папок

я хотел удалить пустой каталог (папку), который я создал, git не может удалить его, после некоторого исследования я узнал, что Git не отслеживает пустые каталоги. Если у вас есть пустой каталог в вашем рабочем дереве, вы должны просто удалить его с помощью

rm -r folderName

Нет необходимости привлекать Git.

Ответ 10

Вы можете использовать Attlasian Source Tree (Windows) (https://www.atlassian.com/software/sourcetree/overview). Просто выберите файлы из дерева и нажмите "Удалить" вверху. Файлы будут удалены из локального репозитория и локальной базы данных git. Затем Commit, затем нажмите.

Ответ 11

Один из моих коллег предложил BFG Repo-Cleaner, который я считаю могущественным. Это не только удаление нежелательных данных, но и очистка вашего репозитория от любой связанной с ним информации о фиксации.

Ответ 12

Сначала команда git должна знать, кто вы, прежде чем удалять что-либо

  • git init
  • git config user.name "кто-то"
  • git config user.email "[email protected]"
  • git rm -r
  • git commit -m "удаление dir"
  • git push origin master

Ответ 13

Чтобы добавить новый каталог:

mkdir <YOUR-DIRECTORY>

Но теперь Git не знает об этом новом каталоге, потому что Git отслеживает файлы, а не каталоги DIRECTORY

git status

Git не будет знать о внесенном нами изменении, поэтому мы добавим скрытый файл .keep чтобы Git узнал об этом новом изменении.

touch /YOUR-directory/.keep

Теперь, если вы нажмете на git status Git будет знать об изменениях.

И если вы хотите удалить каталог, вы должны использовать эту команду.

rm -r <YOUR-DIRECTORY>

И если вы проверили, используя git status, вы увидите, что каталог был удален.

Ответ 14

В вашем локальном репо просто удалите каталог

rm -rf directory_name

теперь нажмите изменения:

git add .
git commit -m "Delete a repository"
git push

Ответ 15

Я уже зафиксировал папку и хочу удалить каталог в истории.

Я сделал следующее:

Добавить папку в .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, но не была удалена с локального диска.