'в Git добавить.- не работает.
В настоящее время я пытаюсь настроить Git для проекта, над которым я уже некоторое время работаю. Я помню, что довольно давно создал Git, но никогда не использовал его по разным причинам. Теперь я хочу использовать его я получаю странную проблему, которая, как я считаю, связана со старой установкой.
Чтобы начать новый, я установил новую ОС Ubuntu, чтобы не было git install, и я скопировал проект (Grails). Затем я перешел к каталогу и выполнил следующее команды:
git init
git remote add origin https://USERNAME@bitbucket.org/USERNAME/APPNAME.git
Затем я побежал:
git add .
Вот где я получаю ошибку ниже:
fatal: Not a git repository: /home/user/workspace/App_V3/.git/modules/plugins/grails-spring-security-ui
Эта ошибка странная, так как она даже не соответствует каталогу, в котором я нахожусь, так как каталог ниже:
/home / user / Workspace / App_V7 /
Я думаю, что изначально я мог настроить Git в папке App_V3 на старой ОС, но не знаю, почему он все еще указывает на этот каталог, поскольку я запустил код ниже, чтобы повторно инициализировать его:
rm -rf .git
git init
Может ли кто-то пожалуйста, помогите мне с этим, так как это действительно расстраивает :S
Заранее спасибо
3 ответа:
Перемещение репозиториев с подмодулями проблематично
Я думаю, что изначально я мог настроить Git в папке App_V3 на старой ОС
Это и есть источник проблемы.
Что имеет значение, так это версия git, когда репозиторий (или, более конкретно, упомянутый подмодуль) был первоначально создан.
Рассмотрим репозиторий с одним подмодулем в
vendor/awesome
, как git вел себя при создании подмодуля вполне различный.Версия Git
Содержимое
vendor/awesome/.git
является папкой-так же, как и любой git checkout, поэтому, например, структура папок checkout будет:.gitmodules .git ... vendor/ awesome .git config HEAD index packed-refs ...
Нет никаких проблем с перемещением такого хранилища, поскольку нигде не хранятся пути.
Git версии 1.7.8 или 1.7.9
1.7.8 переместил расположение подмодуля .папка git
При заполнении нового каталога подмодулей "git подмодуль инициализации", метаинформации каталог $использование переменной git_dir для субмодулей создается внутри $GIT_DIR / modules / / каталог суперпроекта и ссылки на него через механизм gitfile. Это делается для того, чтобы можно было переключаться между коммитами в суперпроекте, который имеет и не имеет подмодуль в дереве без повторного клонирования.
Поэтому
vendor/awesome/.git
- это не папка, а файл со следующим содержимым:gitdir: /absolute/path/to/main/repo/.git/modules/vendor/awesome
И структура папок overal это:
.gitmodules .git ... modules vendor awesome config HEAD index packed-refs ... vendor/ awesome .git <- a file
Содержимое
.git/modules/vendor/awesome/config
указывает, где находится рабочее дерево:Это было довольно удивительное изменение - однако оно создало проблему, поскольку абсолютные пути использовались для ссылки на местоположения.[core] ... worktree = /absolute/path/to/main/repo/vendor/awesome
Версия Git >= 1.7.10
В версии 1.7.10 использование абсолютных путей в подмодулях было изменено
Весь каталог, в котором находится суперпроект верхнего уровня, управляемый "подмодуль git" можно переместить в другой место.
Теперь
vendor/awesome/.git
Если генерируется с этой или более поздней версией git будет содержать:gitdir: ../../.git/modules/vendor/awesome
Содержимое
.git/modules/vendor/awesome/config
указывает, где находится рабочее дерево:[core] ... worktree = ../../../../vendor/awesome
Еще раз, нет никаких проблем с перемещением такого типа репозитория, как пути a относительно основного репозитория.
Перемещение репозиториев
Со старой или новой версией git-Вы хороши.
Если вам не повезло работать с репозиторием, созданным в 1.7.8 или 1.7.9 (что из доказательств в вопросе, похоже, имеет место) и переместить хранилище-есть 2 решения :
- снова клонировать
- правильные пути в подмодуле .git-файлы и соответствующий параметр конфигурации worktree
Я переместил все файлы по одному в новую папку, а затем, казалось, работал нормально:)
Спасибо за помощь
Вместо
git init git remote add origin https://USERNAME@bitbucket.org/USERNAME/APPNAME.git
Вы должны использовать
git clone origin https://USERNAME@bitbucket.org/USERNAME/APPNAME.git .
Так как вы хотите клонировать существующий репозиторий и не создавать его заново.