У меня есть git-репо ~/.janus/
с кучей подмодулей в нем. Я хочу добавить субмодуль ~/.janus/snipmate-snippets/snippets/
, но при запуске git submodule add <git@github.com:...>
в snipmate-snippets
каталоге я получаю следующее сообщение об ошибке:
You need to run this command from the toplevel of the working tree.
Итак, вопрос: как мне добавить подмодуль в snipmate-snippets
каталог?
git
git-submodules
Роберт Ауди
источник
источник
git submodule add -b <branch> <url> <relative_path_4m_root>
Ответы:
Вы входите
~/.janus
и бежите:Если вам нужна дополнительная информация о подмодулях (или git в целом), ProGit довольно полезен.
источник
'subprojects' already exists in the index
(я использовал подпроекты в качестве имени каталога) . Вместо этого, что помогло, ответ VonC ниже, то есть делатьcd subprojects
, а затемgit submodule add <get@github …>
без пути.Обратите внимание, что начиная с git1.8.4 (июль 2013 г.), вам больше не нужно возвращаться в корневой каталог.
( Bouke Versteegh комментирует, что вы не должны использовать
/.
, как вsnippets/.
:snippets
достаточно)Смотрите коммит 091a6eb0feed820a43663ca63dc2bc0bb247bbae :
Зависит от коммита 12b9d32790b40bf3ea49134095619700191abf1f
источник
/.
не нужен, git создаст фрагменты каталогов без него.Relative path can only be used from the toplevel of the working tree
. Я делаюgit submodule add ../../../functest
Relative path can only be used from the toplevel of the working tree
") не является тем из исходного вопроса ("You need to run this command from the toplevel of the working tree
")У меня была похожая проблема, но я загнал себя в угол с помощью инструментов GUI.
У меня был подпроект с несколькими файлами в нем, который я до сих пор просто копировал вместо того, чтобы регистрироваться в их собственном git-репо. Я создал репо в подпапке, был в состоянии совершить, подтолкнуть и т. Д. Просто отлично. Но в родительском репо подпапка не рассматривалась как подмодуль, а ее файлы все еще отслеживались родительским репо - ничего хорошего.
Чтобы выйти из этого беспорядка, я должен был сказать Git прекратить отслеживать подпапку (без удаления файлов):
Затем я должен был сказать, что там был субмодуль (что вы не можете сделать, если что-то там отслеживается git):
Обновить
Идеальный способ справиться с этим - еще пара шагов. В идеале, существующее хранилище перемещается в собственный каталог, без каких-либо родительских модулей git, фиксируется и отправляется, а затем добавляется в виде подмодуля, например:
Это приведет к клонированию репозитория git в качестве подмодуля - который включает в себя стандартные шаги клонирования, а также несколько других более непонятных шагов конфигурации, которые git предпринимает от вашего имени, чтобы заставить этот подмодуль работать. Самое важное отличие состоит в том, что он помещает туда простой файл .git, а не каталог .git, который содержит ссылку на путь, по которому живет настоящий git dir - обычно в корневом каталоге родительского проекта .git / modules / jslib.
Если вы не сделаете так, они будут работать нормально для вас, но как только вы сделаете коммит и нажмете родителя, а другой разработчик потянет этого родителя, вы просто усложнили им жизнь. Им будет очень трудно воспроизвести структуру, имеющуюся на вашем компьютере, если у вас есть полный каталог .git в подпапке каталога, который содержит собственный каталог .git.
Итак, переместить, нажать, добавить подмодуль git, это самый чистый вариант.
источник
Для тех из вас, кто разделяет мою странную любовь к ручному редактированию файлов конфигурации, добавление (или изменение) следующего также поможет.
.git / config (личный конфиг)
.gitmodules (совершенная общая конфигурация)
Смотрите также это - разница между .gitmodules и указанием подмодулей в .git / config?
источник
однострочный сценарий bash, чтобы помочь Крису ответить выше, так как я нарисовал себя в углу, используя обновления Vundle для моих сценариев .vim.
DEST
путь к каталогу, содержащему ваши подмодули. Сделайте это после выполненияgit rm -r $DEST
ура
источник