2014-01-31 2 views
2

У меня был проект в папке «www».Git автоматически объявляет подпроекты как подмодули?

В «www/vendor» я клонировал другие проекты от GitHub. Я просто клонировал их, никогда не делал ничего, чтобы сделать их подмодулями или поддеревьями.

Довольно часто я работал над этими подпроектами, внесенными вверх по течению и т. Д. Мне просто нужно было указать cd в каталог типа «www/vendor/projectX» и использовать Git commit, и это было так, как если бы они были независимыми проектами. Затем я мог бы вернуться к «www» и сделать фиксацию там, которая будет признавать изменения в подпроектах в моем основном проекте. Все очень просто.

Затем я перевел «www/vendor» в «www/php/vendor». Я сделал git add php и совершил изменение, и теперь все мои папки «www/php/vendor/*» полностью пусты на удаленном сервере. На моей машине файлы все еще здесь, но git status говорит, что ничего не зафиксировать.

Я не знаю, но, похоже, все подпроекты автоматически объявлялись подмодулями, когда я их перемещал. Однако я не вижу никаких следов: нет .gitmodule, ничего в папке модулей. И это то, что я получаю, когда я git rm:

$ git rm php/vendor/projectX 
error: the following submodule (or one of its nested submodules) uses a .git directory: 
php/vendor/projectX 

Am я что-то отсутствует, или это ошибка Git? Я хотел бы вернуться к тому, как я работал раньше, не удаляя папки .git подпроектов или использование подмодулей.

Я использовал Git 1.8.4 и 1.8.5.2 в Windows.

ответ

1

Это поведение Git по умолчанию. Он не знает, что делать с этими репозиториями, кроме объявления их подмодулей.

Вы можете игнорировать пути, по которым вы держите другие репозитории Git. Особенно если вы обновите их с помощью менеджера пакетов/зависимостей и сохраните файл блокировки в корневом репо.

+0

Спасибо, но я смущен, почему это внезапно изменилось, когда я только что переместил папку, это странно. Я думаю, что Git был изменен в какой-то момент, чтобы заставить использовать подмодули или поддеревья. Мне нравится сохранять файлы подпроектов автономными в моем родительском проекте, поэтому, я думаю, мне просто нужно будет использовать подмодули сейчас. Мне не нужно было изучать новые команды, но если мне нужно ... –

+0

Это потому, что вы не игнорировали эти пути в корневом '.gitignore'. Поэтому, когда они не игнорируются, Git должен каким-то образом отслеживать эти пути. Поскольку он видит папку '.git', она сохраняет свою историю отдельной. Каково определение подмодулей Git. –

+1

Ааа, ты прибил его! Папки подпроектов должны были отслеживаться в суперпроекте в то время, когда вложенной папки .git не было, а затем они продолжали отслеживаться даже после появления папки .git после клонирования. Это привело к поведению, которое было похоже на поддеревья, без хлопот называть что-то вроде '$ git merge -squash -s поддерево ProjectX'. Спасибо, теперь все ясно. –

Смежные вопросы