git - як видалити порожню папку та натиснути на цю зміну?


75

Як я можу локально видалити порожню папку, а також зробити це для інших співавторів, які надають спільний пульт за допомогою push-push? Я знаю, що папки в цьому сенсі не відстежуються git, але питання залишається.

Наприклад, я перемістив файл в іншу папку та здійснив зміну (переміщення).

Але я не можу git rm nameпапки, оскільки я отримую "не збігається" git rmdir name, не існує.

Я можу зробити, git clean -f folderале як це підштовхується?

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


1
що ви маєте на увазі питання залишається?
manojlds

Відповіді:


121

Коротка відповідь: Ви не можете натискати зміни до каталогів (додавати, видаляти тощо), оскільки Git не відстежує каталоги самостійно .

Відповідно до поширених запитань :

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

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

Отже, що стосується Git, ваш порожній каталог вже не існує.

Я виявив, що звичка використовувати git clean -fdзнімає необхідність натискати на видалення каталогів. Однак ви git cleanможете видалити елементи, які ви, можливо, не хочете видаляти (включаючи будь-які нові файли, які ви ще не створили), тому я спочатку використовую, git clean -fdnщоб побачити, що буде видалено, якщо я застосую команду.

Схоже, вас можуть змусити поговорити зі своїми колегами-розробниками, щоб очистити цей каталог.


Mercurial має більш розумний підхід - каталог видаляється, якщо порожній: stackoverflow.com/a/3917322/913223 та superuser.com/questions/81204/…
Даніель Соколовський

1
Ця відповідь неповна. Він git svn fetchпідтримує порожні папки. Навіть git svn rebaseвідтворити порожні папки, якщо просто видалити одну.
Андрі,

@DanielSokolowski, полягає в тому, що той самий підхід у git, принаймні при клонуванні репо. Я виявив, що при клонуванні репо, що містить порожній каталог, git не створює порожній каталог. Це не велика проблема, тому що тепер я повинен перевірити, чи існує каталог для запису файлів?
alpha_989

7
git add --all
git clean -f -d
git commit -m "trying to remove folders"
git push

Чи є спосіб досягти цього без необхідності здійснювати та просувати зміни?
Бенджамін Джон

-1

Ви не можете натискати порожні папки. Але якщо ви хочете очистити порожні папки у вашому клонованому / локальному репо, внесіть останні зміни .. Тоді просто видаліть усі файли, крім папки .git у вашій локальній копії. Потім знову скиньте всі зміни, що повертає всі файли, але залишає порожні каталоги, які не відстежується.


1
Або просто скористайтесяgit clean -fd
Аароном Франке

-9

Трохи шалений спосіб обійти це створення підробленого файлу в каталозі, фіксація його, а потім видалення. Видаливши його, ви також видалите каталог. Тож створіть name / fake.txt

git add name/fake.txt
git commit -m "message"
git rm name/fake.txt
git commit -m "message2"

3
Цей підхід насправді працює, але на другому кроці ви хочете видалити папку, що містить файл, rm -rf nameа потім здійснити зміну, папка тепер не буде
igniteflow

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