Вопрос

У меня есть репозиторий @ github.Я немного поработал дома и отправил его на github.Это включало удаление некоторых файлов и каталогов.Сейчас я нахожусь на своем рабочем ящике, в котором была копия кода перед удалением файлов и каталогов.

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

git remote update
git checkout HEAD
git pull origin HEAD

Он удалил все файлы, которые должны были иметь, но не каталоги, в которых находились файлы.

Два вопроса:

  1. Почему не удалил каталоги?
  2. Есть ли команда git, которую я могу ввести в текущем состоянии, чтобы удалить их?
Это было полезно?

Решение

Git не отслеживает каталоги, поэтому не удаляет каталоги, ставшие пустыми в результате слияния или других изменений.Однако вы можете использовать git clean -fd удалить неотслеживаемые каталоги (параметр -fd флаг означает жпринудительное удаление неотслеживаемых файлов и ддиректории).

Другие советы

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

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

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

Решение (после того, как вы вытащили/перемотали вперед/объединили):

git stash --include-untracked
git clean -fd
git stash pop

Если вы этого не сделаете stash до clean, вы потеряете все неотслеживаемые файлы (безвозвратно).

Примечание:поскольку при этом также очищаются все игнорируемые файлы, вам может потребоваться снова запустить некоторые сценарии сборки, чтобы воссоздать метаданные проекта (например: ./gradlew eclipse).При этом также удаляются пустые каталоги, которые никогда не были частью путей к файлам git.

Git в настоящее время не отслеживает каталоги (см. мерзавец вики), то есть вы не можете ни добавлять пустые каталоги, ни git удалять каталоги, которые в конечном итоге оказываются пустыми. (РЕДАКТИРОВАТЬ: Спасибо, Манни, я ошибался!Ты не можешь добавлять пустые каталоги, но git будет удалять каталоги, которые стали пустыми, поскольку их отслеживаемый контент был удален.)

Что касается команды удаления пустых каталогов:это зависит от вашей операционной системы.

Для Linux вы можете использовать, например,

find -depth -type d -empty -exec rmdir {} \;

Однако это удалит все пустые каталоги!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top