'в 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 4

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 решения :

  1. снова клонировать
  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 .

Так как вы хотите клонировать существующий репозиторий и не создавать его заново.