Страницы

Поиск по вопросам

суббота, 30 ноября 2019 г.

Как отменить git init в уже существующем репозитории?

#git #git_init


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

В git log последние коммиты остались. Как отменить действие команды git init?
    


Ответы

Ответ 1



Если просто случайно создали репозиторий, то нужно удалить папку .git в корне. Это полностью уничтожит репозиторий и, разумеется, отменит то, что сделал git init. Через *nix-консоль это делается так: rm -r .git Если же Вы сделали git init в уже существующем репозитории, то бояться нечего: Running git init in an existing repository is safe. It will not overwrite things that are already there. The primary reason for rerunning git init is to pick up newly added templates (or to move the repository to another place if --separate-git-dir is given).

Ответ 2



Судя по описанию, команда git init была выполнена не в корневой директории проекта, а в одной из вложенных. В таком случае всё, что внутри этой вложенной директории, изнутри нее считается новым репозиторием (а снаружи — старым). При выполнении любой команды Git в некоторой директории происходит рекурсивный поиск репозитория снизу вверх. Т.е. проверяется текущая директория, потом ее родитель, потом родитель родителя и т.д. Как только находится директория .git, дальнейший поиск прекращается. Предположим, у нас есть такая структура. В корневой директории проекта A инициализирован репозиторий Git. A |-.git |-A/B |-A/C |-A/C/X |-A/C/Y |-A/C/Z |-A/D Теперь мы инициализируем новый репозиторий в директории A/C: $ cd C $ git init A |-.git |-A/B |-A/C |-.git |-A/C/X |-A/C/Y |-A/C/Z |-A/D Теперь наблюдаем следующую картину: При выполнении любой команды Git из директорий A, A/B, A/D, обнаруживается репозиторий в директории A. При выполнении любой команды Git из директории A/C и вложенных, обнаруживается репозиторий в директории С. Поскольку он только что создан, все файлы отображаются как новые. Чтобы исправить ситуацию, достаточно удалить .git из директории A/C: $ rm -rf A/C/.git

Ответ 3



если у вас не bare-репозиторий, то он состоит из собственно репозитория, хранящегося в каталоге .git, и т.н. working tree, т.е. файлов и каталогов, историю изменений которых вы и отслеживаете с помощью git. каталог (или файл) .git, если не используются, например, подмодули (submodules), должен быть только один. поищите в глубинах working tree другие каталоги .git. если обнаружите такой(-ие) каталог(-и), попробуйте переместить (не удаляя) его (их) в какое-нибудь другое место за пределами working tree и проверьте, всё ли в порядке с git log и git status.

Комментариев нет:

Отправить комментарий