Як видалити каталог із сховища git?


1232

У моєму сховищі GitHub у мене є 2 каталоги. Я хотів би видалити одну з них. Як я можу це зробити, не видаляючи і не створюючи ціле сховище?


1
Чи є файли в каталогах?
Фред Фоо

3
@Iarsmans: Так, 6 файлів. Обидва каталоги однакові, за винятком того, що один є великим, інший - малі.
Сахат Ялкабов

Відповіді:


2322

Видаліть каталог із git та local

Ви можете замовити "майстер" з обох каталогів;

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

8
У мене була така ж точна ситуація. Коли я спробував git rm -r myFolderце, він працював, але також видалив усе з каталогу "MyFolder". Довелося повернути все в каталог "MyFolder", а потім виконати.
Джастін

240
@Justin Щоб видалити лише з git та залишити файлову систему такою, якою є, використовуйтеgit rm -r --cached myFolder
karmakaze

32
Повідомлення про помилку, яке я отримую: fatal: pathspec 'каталог' не відповідає жодним файлам.
користувач2441441

3
@ user2441441 У мене виникла помилка, коли я намагався видалити папку / файл, який взагалі не додавали до репо
lukeatdesignworks

3
git rm -r --cached directory/видаляється лише з відслідковується git, але структура сховища залишається.
Нестор

287

Щоб видалити папку / каталог тільки з сховища git, а не з локального спробуйте 3 прості команди.


Кроки для видалення каталогу

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

Крок ігнорувати цю папку в наступних вчинках

Щоб ігнорувати цю папку з наступних комісій, зробіть один файл у корені з іменем .gitignore та вставте ім'я цієї папки в нього. Ви можете покласти скільки завгодно

Файл .gitignore буде виглядати приблизно так

/FolderName

видалити каталог


1
Вам також потрібно буде виконати git rm -r --cached FolderName git commit -m "Видалену папку з сховища" на іншому комп'ютері, а потім зробити тягнення, щоб зберегти її синхронізовано.
Саймон

1
Чи видалить цей каталог з того моменту, як він був доданий до сховища? Або просто видалити каталог і передати його в .git repo?
alpha_989

1
Чудово! Працюючи!
BeingCoders

2
Добре пояснено, приємна відповідь
Ракшит Шах

1
молодець. На моїй машині третій крок не працює. Але це працює, якщо його змінити на $ git push
Гонг

82

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


4
Це працювало для мене. Чи можете ви пояснити аргумент -A?
Арун

2
@Arun -A - це короткий термін --all і додайте зміни з усіх відслідковуваних і не відстежених файлів
Joachim Rohde

Це працювало для мене.
УВМ

20

Ви можете спробувати це: git rm -rf <directory_name>

Це змусить видалити каталог.


3
це також буде видалено з локального каталогу
abdul rehman kk

18

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

Це на відміну від підривної роботи, де потрібно явно svn rm emptyfolder/, і це, до речі, тому, що manсторінка для git описує себе як "дурний трекер вмісту"

Відповідь на тему "Як додати порожній каталог до сховища git" посилається на FAQ на цю тему :

Наразі дизайн індексу git (область постановки) дозволяє лише перелічити файли, і ніхто не достатньо компетентний вносити зміни, щоб пусті каталоги не піклувалися про цю ситуацію, щоб виправити її.

Каталоги додаються автоматично, додаючи файли всередині них. Тобто каталоги ніколи не повинні додаватися до сховища та не відслідковуються самостійно.

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

Якщо вам дійсно потрібен каталог для існування в касах, ви повинні створити в ньому файл. .gitignore добре працює для цієї мети; ви можете залишити його порожнім або заповнити імена файлів, які ви очікуєте відобразити в каталозі.


8

Я вже вчинив папку раніше і хочу також видалити каталог в історії.

Я зробив наступне:

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


7

для видалення порожніх папок

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

rm -r folderName

Не потрібно залучати Гіт.


1
Дякую! Це саме те, що мені було потрібно.
SpyrosKo

6

Перейдіть у свій каталог git та введіть таку команду: rm -rf < Ім'я каталогу >

Після видалення каталогу виконайте зміни: git commit -m "Ваше повідомлення про виконання"

Потім просто натисніть зміни на віддалений каталог GIT: походження git push < Назва гілки >


4

Ви можете видалити папку локально, а потім натиснути наступним чином:

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

4

Зазвичай я використовую git add --allдля видалення файлів / папок із віддалених сховищ

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

master може бути замінена будь-якою іншою гілкою сховища.


2

Ви можете використовувати джерело дерева Attlasian (Windows) ( https://www.atlassian.com/software/sourcetree/overview ). Просто виберіть файли з дерева та натисніть кнопку "Видалити" вгорі. Файли будуть видалені з локального сховища та локальної бази даних git. Потім вчинити, потім натиснути.


Це я і роблю. Це зробило його дуже просто, хоча вивчити команди git - це добре знати.
Міхей Монтоя,

1

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


1

Щоб додати новий каталог:

mkdir <YOUR-DIRECTORY>

Але тепер Git не знає цього нового каталогу, тому що Git відслідковує файли, а не каталоги DIRECTORY

git status

Git не буде обізнаний із внесеними нами змінами, тому ми додамо прихований .keepфайл, щоб дізнатись про Git завдяки цій новій зміні.

touch /YOUR-directory/.keep

Тепер, якщо ви натиснете git statusGit, будете в курсі змін.

І якщо ви хочете видалити каталог, вам слід скористатися цією командою.

rm -r <YOUR-DIRECTORY>

І якщо ви перевірили за допомогою git status, ви побачите, що каталог було видалено.


0

Першою командою git потрібно знати, хто ви є, перш ніж щось видаляти

  1. git init
  2. git config user.name "хтось"
  3. git config user.email "who@someplace.com"
  4. git rm -r
  5. git commit -m "видалення dir"
  6. git push master master

0

Комбінація двох відповідей працювала на мене

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.