Как мне полностью очистить рабочий каталог git? - PullRequest
3 голосов
/ 14 января 2011

В Mercurial я привык делать hg up 00 для полной очистки рабочего каталога.

Это приводит к тому, что рабочий каталог возвращается в его состояние сразу после выполнения hg init. * 1005.*

Есть ли эквивалент в git?

Обратите внимание, что hg up 00 - это не то же самое, что hg up 0, который обновляется до первой зафиксированной ревизии, вместо этого он эквивалентен hg up null,просто пара символов короче, чтобы напечатать.* 8 ')

Также обратите внимание, что я не хочу просто делать rm -rf * в корне рабочего каталога git, так как тогда git status покажет все файлы как удаленные.Я просто хочу обновить репозиторий до его состояния перед первым коммитом.Увы, мои поиски в Интернете и руководства по git не предоставили мне информацию, которая мне нужна, чтобы понять, как это сделать в git.

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

Ответы [ 3 ]

2 голосов
/ 14 января 2011

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

В отличие от hg, нет простого способа переключения между пустым и не пустым хранилищем. Кроме того, вам не следует загружать в не-пустой репозиторий, так как push-уведомление изменит индекс git, но не обновит рабочее дерево. Подробнее см. Работа с git с 2-х ноутбуков без репо .

2 голосов
/ 14 января 2011

Кажется, что это необычно: ветки git начинаются с начального коммита, который обычно не пуст. Вы не можете «оформить» или «сбросить» до этой первоначальной фиксации с помощью обычных команд git.

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

git updated-ref -d "$(git symbolic-ref HEAD)"

Удаляет текущую извлеченную ветку.

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

git rm -r --cached .

Вам может потребоваться переключатель -f, если у вас есть неустановленные изменения.

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

git clean -fd # WARNING, dangerous
1 голос
/ 14 января 2011

Это решения, которые приходят мне в голову:

1- Вы можете удалить каталог .git из вашего рабочего каталога, и в вашем рабочем каталоге не будет хранилища git.

2 - Вы можете сбросить исходную фиксацию (первоначальная фиксация останется), введя:

git reset --hard `git rev-list HEAD | tail -n 1`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...