У меня был проект в папке «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.
Спасибо, но я смущен, почему это внезапно изменилось, когда я только что переместил папку, это странно. Я думаю, что Git был изменен в какой-то момент, чтобы заставить использовать подмодули или поддеревья. Мне нравится сохранять файлы подпроектов автономными в моем родительском проекте, поэтому, я думаю, мне просто нужно будет использовать подмодули сейчас. Мне не нужно было изучать новые команды, но если мне нужно ... –
Это потому, что вы не игнорировали эти пути в корневом '.gitignore'. Поэтому, когда они не игнорируются, Git должен каким-то образом отслеживать эти пути. Поскольку он видит папку '.git', она сохраняет свою историю отдельной. Каково определение подмодулей Git. –
Ааа, ты прибил его! Папки подпроектов должны были отслеживаться в суперпроекте в то время, когда вложенной папки .git не было, а затем они продолжали отслеживаться даже после появления папки .git после клонирования. Это привело к поведению, которое было похоже на поддеревья, без хлопот называть что-то вроде '$ git merge -squash -s поддерево ProjectX'. Спасибо, теперь все ясно. –