Смотрите ниже сплошную линию для моего оригинального вопроса.
У меня есть папка в моем локальном каталоге, которая не отслеживается. Когда я бегу git status
, я получаю:
Changed but not updated:
modified: vendor/plugins/open_flash_chart_2 (modified content, untracked content)
Когда я печатаю, git add vendor/plugins/open_flash_chart_2
то попробуйте еще git status
раз, он все еще говорит, что нет. В чем дело?
Вот простое резюме моего последнего получаса:
Обнаружено, что мой репозиторий Github не отслеживает мой
vendor/plugins/open_flash_chart_2
плагин. В частности, нет контента, и он показывает зеленую стрелку на значке папки.Пытался
git submodule init
No submodule mapping found in .gitmodules for path 'vendor/plugins/open_flash_chart_2'
Пытался
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
vendor/plugins/open_flash_chart_2 already exists in the index
git status
modified: vendor/plugins/open_flash_chart_2 (untracked content)
Охотился на любой файл, указанный
.gitmodules
в моем репозитории / локальном каталоге, но не смог его найти.
Что мне нужно сделать, чтобы мои подмодули работали так, чтобы git мог правильно начать отслеживать?
Это может быть не связано (я включаю его на случай, если это поможет), но каждый раз, когда я печатаю, git commit -a
а не как обычно git commit -m "my comments"
, выдает ошибку:
E325: ATTENTION
Found a swap file by the name ".git\.COMMIT-EDITMSG.swp"
dated: Thu Nov 11 19:45:05 2010
file name: c:/san/project/.git/COMMIT_EDITMSG
modified: YES
user name: San host name: San-PC
process ID: 4268
While opening file ".git\COMMIT_EDITMSG"
dated: Thu Nov 11 20:56:09 2010
NEWER than swap file!
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
Я новичок в Github и, несмотря на попытки просмотреть документацию, я немного озадачен этими проблемами. Спасибо.
источник
git submodule add
,git submodule update --init
.tracking
тег, похоже, используется для тем «отслеживания посетителей сайта», поэтому он также не будет применяться.Ответы:
Вы добавили
vendor/plugins/open_flash_chart_2
запись «gitlink», но никогда не определяли ее как подмодуль. Фактически вы используете внутреннюю функцию, которую использует подмодуль git (записи gitlink), но вы не используете саму функцию подмодуля.Вы, вероятно, сделали что-то вроде этого:
Эта последняя команда является проблемой. Каталог
vendor/plugins/open_flash_chart_2
начинается как независимый репозиторий Git. Обычно такие вложенные репозитории игнорируются, но если вы укажете git add явно добавить его, то он создаст запись gitlink, которая указывает на коммит HEAD под-репозитория вместо добавления содержимого каталога. Было бы неплохо, если бы git add отказался создавать такие «полу-подмодули».Нормальные каталоги представлены в Git как древовидные объекты; Объекты дерева дают имена и разрешения для объектов, которые они содержат (обычно это другие объекты дерева и BLOB-объектов - каталоги и файлы соответственно). Подмодули представлены в виде записей «gitlink»; Записи gitlink содержат только имя объекта (хеш) фиксации HEAD подмодуля. «Исходный репозиторий» для коммита gitlink указывается в
.gitmodules
файле (и в.git/config
файле после инициализации подмодуля).У вас есть запись, которая указывает на конкретный коммит, без записи исходного репозитория для этого коммита. Вы можете исправить это, либо превратив свою ссылку в правильный подмодуль, либо удалив ссылку и заменив ее «обычным» содержимым (обычные файлы и каталоги).
Превратите это в правильный субмодуль
Единственный бит, который вам не хватает для правильного определения
vendor/plugins/open_flash_chart_2
подмодуля, - это.gitmodules
файл. Обычно (если вы еще не добавили его как пустую запись gitlink), вы просто используетеgit submodule add
:Как вы обнаружили, это не будет работать, если путь уже существует в индексе. Решение состоит в том, чтобы временно удалить запись gitlink из индекса и затем добавить подмодуль:
Это будет использовать ваш существующий вложенный репозиторий (т.е. он не будет повторно клонировать исходный репозиторий) и подготовит
.gitmodules
файл, который выглядит следующим образом:Он также сделает аналогичную запись в вашем главном хранилище
.git/config
(безpath
настройки).Передайте это, и у вас будет правильный подмодуль. Когда вы клонируете репозиторий (или отправляете на GitHub и клонируете оттуда), вы сможете повторно инициализировать субмодуль через
git submodule update --init
.Замените его простым содержимым
На следующем шаге предполагается, что в вашем подчиненном репозитории
vendor/plugins/open_flash_chart_2
нет локальной истории, которую вы хотите сохранить (т. Е. Все, что вас волнует, - это текущее рабочее дерево вложенного репозитория, а не история).Если у вас есть локальная история в под-репозитории, которая вас интересует, то вам следует сделать резервную копию
.git
каталога под-репозитория, прежде чем удалять его во второй команде ниже. (Также рассмотрите приведенный ниже пример поддерева git, который сохраняет историю заголовка под-хранилища).На этот раз при добавлении каталога он не является вложенным хранилищем, поэтому файлы будут добавлены в обычном режиме. К сожалению, так как мы удалили
.git
каталог, нет супер-простого способа поддерживать актуальность с исходным хранилищем.Вы можете рассмотреть возможность использования слияния поддерево . Это позволит вам легко извлекать изменения из исходного хранилища, сохраняя файлы «плоскими» в вашем хранилище (без подмодулей). Третьей стороной мерзавец поддерево команда хорошая обертка вокруг функциональности поддерево слияния.
Потом:
В поддереве git также есть
--squash
опция, которая позволяет вам не включать историю исходного репозитория в вашу историю, но, тем не менее, позволяет вносить изменения в исходный код.источник
rm -rf vendor/plugins/open_flash_chart_2/.git
и там написано, что rm не распознан. Затем я попытался,git rm -rf vendor/plugins/open_flash_chart_2/.git
и он сказалfatal: pathspec 'vendor/plugins/open_flash_chart_2/.git' did not match any files
(но я могу добраться до Windows Explorer!)..git
и повторно добавить файлы «категорически» (первая опция «Простой контент»).subtree
не следует путать с объединением поддеревьев. Это не обертка. Автор так говорит: Pgit readtree --prefix=path
поддеревьев:git merge
с-s subtree
или-Xsubtree=path
). Он имеет хорошие статистов «сверху», тоже:--squash
режим,split
команду, иpush
иpull
помощников.У меня просто была такая же проблема. Причина была в том, что была подпапка с папкой «.git». Удаление этого сделало мерзавца счастливым.
источник
.git
папкуURL ссылки https://danielmiessler.com/blog/git-modified-untracked/#gs.W0C7X6U
источник
Чтобы указать, что я должен был выкопать из чата Криса Йохансена с OP (ссылка с ответа на ответ):
git add vendor/plugins/open_flash_chart_2
# добавит gitlink, контент не будет отслеживатьсяgit add vendor/plugins/open_flash_chart_2/
# Обратите внимание на слэш !!!!Вторая форма будет добавлять его без GitLink, и содержимое отслеживается. .Git dir удобно и автоматически игнорируется. Спасибо Крис!
источник
Я все время использую трюк, предложенный Питером Ладой и называемый «поддельными подмодулями»:
http://debuggable.com/posts/git-fake-submodules:4b563ee4-f3cc-4061-967e-0e48cbdd56cb
Это очень полезно в нескольких сценариях (но я использую его для хранения всей моей конфигурации Emacs в репозитории, включая текущий HEAD всех репозиториев git в каталогах пакетов elpa / el-get, поэтому я мог легко откатиться назад / переместиться к известному рабочая версия, когда какое-то обновление что-то ломает).
источник
http://progit.org/book/ch6-6.html
Я думаю, что вы должны прочитать это, чтобы узнать немного о субмодуле. Он хорошо написан, и его чтение не займет много времени.
источник
У меня была такая же проблема с большим проектом со многими подмодулями. Основываясь на ответах Криса Джонсена здесь и VonC здесь, я создаю короткий сценарий bash, который перебирает все существующие записи gitlink и добавляет их как надлежащие подмодули.
Это исправило это для меня, я надеюсь, что это поможет.
источник
Это сработало просто отлично для меня:
git update-index --skip-worktree
Если это не работает с путем, попробуйте имя файла. Дайте мне знать, если это сработало и для вас.
До свидания!
источник
Была такая же проблема, но она не была решена в этой дискуссии.
Я также столкнулся с проблемой субмодуля, как описано в открытии темы.
Глядя на различия, я узнал, что к хешу добавлен грязный текст: чтение документов снова решило проблему для меня. http://web.mit.edu/jhawk/mnt/spo/git/git-doc/user-manual.html Посмотрите раздел «Подводные камни с подмодулями»
Причина заключалась в том, что в подмодуле произошли изменения или отслеживание контента. Сначала мне нужно было попасть в каталог подмодулей, выполнить «git add» + «git commit», чтобы весь контент отслеживался в подмодуле.
Теперь этот новый HEAD из субмодуля может быть передан в мастер-модуль.
источник
Недавно я столкнулся с этой проблемой, работая над контрактным проектом (считается секретным). Система, в которой мне приходилось запускать код, не имела доступа в Интернет, конечно, в целях безопасности, и поэтому установка зависимостей, используя composer и npm, становилась огромной болью.
После долгих размышлений с моим коллегой, мы решили просто сделать это и скопировать и вставить наши зависимости, а не делать установку композитора или установку npm.
Это привело нас к НЕ добавлять поставщиков и npm_modules в gitignore. Это когда я столкнулся с этой проблемой.
Я немного погуглил и нашел эту полезную ветку на SO. Не будучи большим профессионалом в Git и немного опьяненный во время работы над ним, я просто искал все подмодули в папке vendors
Это дало мне около 4-5 зависимостей, которые были для них мерзавцами. Я удалил все эти папки .git и вуаля, все заработало. Я знаю, что это взлом, и в любом случае не очень вызывающий. О Боги ТАК, пожалуйста, прости меня! В следующий раз я обещаю читать по ссылкам и повиноваться, о могущественный Линус Товалдс.
источник
На этот вопрос уже был дан ответ, но я решил добавить к тому, что узнал, когда получил эти сообщения.
У меня есть репо,
playground
который содержит несколько приложений-песочниц. Я добавил два новых приложения из учебника вplayground
каталог путем клонирования репозитория учебника. Результатом было то, что git-материал новых приложений указывал на репозиторий учебника, а не на мой репозиторий. Решение состояло в том, чтобы удалить.git
каталог из каждого из каталогов этих приложений, каталогиmv
приложений внеplayground
каталога, а затемmv
снова запустить и запустить ихgit add .
. После этого это сработало.источник
Я решил эту проблему, удалив файл .git из моей подпапки.
источник
Сначала перейдите в каталог : vendor / plugins / open_flash_chart_2 и DELETE
ЗАТЕМ :
ВЫВОД
источник