Если нужно удалить Git tracking (версионирование), правильно ли просто удалить папку .git/ ?
- 34,094
- 1,480
3 Answers
В этом ответе:
- Какие файлы и директории относятся к Git
- Как удалить версионирование Git
- Unix, Windows + git bash
- Windows, cmd.exe
- Windows, проводник
- Как получить новую копию проекта без версионирования
1. Какие файлы и директории относятся к Git
Git хранит историю и настройки в папках .git и файлах .git.... Обязательно существует только папка .git, находящаяся в корне вашего проекта. Если в нём есть субмодули, то в наличии есть также файл .gitmodules в корне и файлы .git где-то во вложенных папках.
project/
- .git/
- .gitmodules
- .gitignore
- .gitattributes
- пустая-папка/
- .gitkeep
- ещё-папка/и-ещё/внутри/
- .git
- .gitignore
- тут-файлы-и-папки-субмодуля
2. Как удалить версионирование Git
Unix-совместимые системы, Windows c git bash или cygwin:
Убедитесь, что вы находитесь в корне проекта!
cd path/to/project
find . -name ".git*" | xargs rm -ri
С ключом -i эта команда будет работать в интерактивном режиме и запросит подтверждение на удаление каждого файла. Спасибо KoVadim за улучшенный вариант первоначальной команды.
Windows, cmd.exe
(взято c en.SO )
cd path\to\project
del /F /S /Q /A .git
rmdir .git
Windows, через проводник
- Включите отображение скрытых файлов и папок
Откройте папку своего проекта, найдите поле поиска:
Введите там
filename:.git, дождитесь окончания поиска:Заметьте, что другие виды поиска работают хуже:
name:.gitвключает файлы наподобиеsource.git.cs,ext:.gitне включает каталог.git, просто.gitвключает медленный и ненужный поиск по содержимому файловТеперь вы можете выбрать файлы, относящиеся к git, и удалить (скорее всего, это будут все найденные файлы). Перепроверить, однако, не помешает никогда.
3. Как получить новую копию проекта без версионирования
Возможно, вам нужно просто получить копию проекта, в которой нет версионирования. Для этого отлично подходит git-archive:
git archive master --format zip --output path/to/archive.zip
Полученный archive.zip можно передать и где-то распаковать, получив новый проект без версионирования.
Субмодули таким образом не упакуются.
- 34,094
-
можно конечно, но мне не понятно, почему поиск не написать так
find . -name ".git* | xargs rm -rfi. Данная команда мало того, что будет работать быстрее, так ещё и переспросит на каждое удаление. – KoVadim Jul 04 '16 at 10:57 -
@KoVadim, NickVolynkin опции
-iи-fпрограммы rm логически как бы взаимоисключающи (см. третий абзац). в код не заглядывал, поэтому допускаю, что при наличии/отсутствии опции-f(и присутствии опции-i) набор выполняемых на каждой итерации инструкций может чуть отличаться, но с точки зрения пользователя поведение самой программы — идентично. т.е. опция-fв данном случае излишня. – aleksandr barakin Jun 23 '17 at 06:25 -
Git хранит всю историю и настройки отслеживания проекта в папке с именем .git, находящейся в корне проекта. Поэтому для прекращения отслеживания достаточно удалить эту папку.
Но, возможно, в корне проекта присутствуют и другие файлы, относящиеся к Git. Например, это может быть файл .gitignore, в котором хранятся имена неотслеживаемых объектов.
-
тогда нужно видимо сказать так - скорее всего нужно удалить все файлы и папки по маске
.git*. – KoVadim Jul 04 '16 at 10:10
Если в файловом менеджере не видна папка /.git, то в консоль можно установить Midnight Commander. И находясь в папке, куда инициализировался проект, выполнить команду mc, в консоли откроется файловый менеджер, в котором будет доступна папка /.git. Ctrl+F8 удалит папку. И все.
Просто у меня не сработала интерактивность в команде из решения (find . -name ".git*" | xargs rm -ri). Хотя я работаю в юникс-подобной операционке (Finder зло).


.gitignoreв корне проекта. – Jul 04 '16 at 09:47.gitattributes– aleksandr barakin Jul 04 '16 at 10:09