Підмодуль Git додає: проблема "git-каталог знайдено локально"


193

Я насправді намагаюся навчитися використовувати git, включаючи git submoduleпідкоманди. Я вже налаштував сервер, на якому можу розміщувати, натискати та витягувати сховища git за допомогою SSH. Я створив на цьому сервері основне сховище git "Travail", в якому я хотів би розмістити всі свої проекти як підмодулі.

У моєму сховищі Travail я вже додав мій проект як підмодуль за адресою tools/libft: я в змозі розробити цей підмодуль, підштовхнути і витягнути його.

Але коли я намагаюся додати ще один підмодуль (на ім’я fdf, від fdf.git на моєму сервері), я отримую такий випуск:

git submodule add ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git projets/fdf

Каталог git для 'projets / fdf' знаходиться локально за допомогою віддалених (-ів): origin ssh: //git@XXX.XXX.XXX.XXX: XXXXX / opt / git / fdf.git Якщо ви хочете повторно використовувати цей локальний git каталог замість клонування знову з ssh: //XXX.XXX.XXX.XXX: XXXXX / opt / git / fdf.git використовуйте опцію '--force'. Якщо локальний каталог git не є правильним репо, або ви не впевнені, що це означає, виберіть інше ім'я за допомогою параметра "- ім'я".

Фактично немає підкаталогу в projets/

Я читав на іншій темі, що я повинен використовувати git submodule syncабо редагувати файл .gitmodules, в якому URL-адреса в сховищі мого підмодуля могла змінитися.

Але мій файл .gitmodules містить лише інформацію про мій перший підмодуль (інструменти / libft), а не про проекти / fdf:

[submodule "tools/libft"]
    path = tools/libft
    url = ssh://git@XXX.XXX.XXX.XXX:XXXXX/opt/git/libft.git

Як французький студент, я міг щось пропустити в англійській документації, яку я маю, але я шукав, і я дійсно не розумію, чому мені це питання.

Я був би радий, якби я знайшов рішення, але просто пояснення було б також корисним.


Невелика корекція: це "сховище", а не "сховище". Насправді не відповідь, але якщо проекти незалежні один від одного, краще для кожного проекту буде власне репо замість підмодулів.
jcm

Дякую, я виправився. Я знаю, але я хотів би зібрати всю свою роботу в одному репо, але як окремі проекти. Це вибір постійно оновлювати всю свою роботу, коли я йду з дому до школи і навпаки (і навчитися користуватися цими інструментами мені цікаво;))
vmonteco

Що ж, цікавість - це завжди вагома причина! :) Це дивно. Ви впевнені, що раніше не додавали підмодуль?
jcm

Не в Travail /, і в мене немає проблем клонувати fdf.git в ~ /. У Travail / я не знаходжу слідів fdf. просто ліфтинг: /
vmonteco

5
О зачекайте, я заглянув /Travail/.git/modules/projets/і знайшов fdfдовідник. Здається, це не в робочому дереві, а в старих програмах. Чи може це породжувати проблему?
vmonteco

Відповіді:


443

Я прийшов до цієї публікації SO, намагаючись додати підмодуль тим самим шляхом, що і підмодуль, який я нещодавно видалив.

Це в кінцевому підсумку для мене спрацювало ( ця стаття дуже допомогла ):

Якщо ви ще не виконали git rm --cached path_to_submodule(ще немає косої риски) rm -rf path_to_submodule, зробіть це!

Тоді:

  1. Видаліть із .gitmodulesфайлу відповідні рядки . наприклад, видаліть ці:

    [submodule "path_to_submodule"] path = path_to_submodule url = https://github.com/path_to_submodule

  2. Видаліть відповідний розділ із .git / config. наприклад, видаліть ці:

    [submodule "path_to_submodule"] url = https://github.com/path_to_submodule

  3. rm -rf .git/modules/path_to_submodule

Тоді ви можете нарешті:

git submodule add https://github.com/path_to_submodule


47
Це було дуже корисно, оскільки я не міг знайти нічого іншого, що працювало. Ключова відмінність від інших пропозицій - ваш крок №3. Дякую!
AndroidDev

8
Кроки 2 і 3 були потрібні мені.
U007D

8
Крок 3 був потрібний мені, але чому саме там існує і підмодуль?
Crt

1
Для мене я пропустив кроки 1 і 2 (які вже в ній були встановлені правильні налаштування) і крок 3 зафіксував це для мене. (Я вже зробив початковий крок git rmі rm -rfкроки.)
Рок Лі

2
Навіть крок 3 не працював для мене. У мене був лише один підмодуль, тому я видалив весь, .git/modulesі це закінчилось.
ач

47

Я спробував рішення jbmilgrom, конкретно, я спробував, git rm --cacheі це не спрацювало для мене, оскільки каталог / підмодуль там не був. Що для мене працювало:

  1. rm -rf .git/modules/blah
  2. git submodule add git://path.to.new

Я зробив це після спробу --forceв git submoduleкомандах та rmвсіх інших каталогах, натисканнях на обробку тощо ..., каталог не існував і не було причини кешу. Виявляється, .git/modulesсаме там і лежала ця помилка.


15

Можливо, ви видалили свій 'projets/fdf'диск, але у вашому сховищі Git все ще є. Використовуйте, git rm -rf projets/fdfщоб видалити його з Git, а потім введіть зміни. Після цього ви зможете додати цю папку як підмодуль.


Це спрацювало :) Дякую. Я думаю, що я фактично зробив цю помилку.
vmonteco

21
Мені кажуть, що цей каталог не існує, коли я це роблю. Здається, це і є, і немає: /
Натан Хорнбі

41
@ tom-mcfarlin Зрештою, вручну видалено рядки з .gitmodule та папки з .git / модулів, тоді я дозволив мені додати новий підмодуль. Можливо, є кращий спосіб зробити це, але мені не вистачало часу. Якщо ви підете цим шляхом, я рекомендую вам зробити гарне резервне копіювання, і, будь ласка, не звинувачуйте мене, якщо це піде не так для вас. Удачі.
іскріло

5
Дякую, я знайшов в іншому дописі, щоб видалити папку з .git / модулів, і це працювало для мене. Має сенс, оскільки саме ця помилка сказала, що це конфлікт ... Я просто не знав про цю папку
Том Макфарлін

10
@NathanHornby @Sparklos @TomMcFarlin - В останніх версіях git ви побачите, що git-підмодуль додає каталог у папку .git. Наприклад, якщо ви знаходитесь в каталозі /tmp/repo, а потім запустіть git submodule add ../otherrepo.git, ви побачите, що /tmp/repo/.git/modules/otherrepoпапка існує. Ось в чому ця проблема була для мене. Я вручну видалив цю папку з .git, і все працювало.
Олександр Птах

13

Якщо ви вже видалили каталог підмодулів, як я, дотримуйтесь решти інструкцій jbmilgrom. Ключовим моментом є, rm -rf .git/modules/path_to_submoduleале спершу створіть резервну копію всього батьківського репо-каталогу .

Якщо у вас був лише один підмодуль, просто видаліть .gitmodules


2

Ці дві команди працюють для мене.

rm path/to/submodule -rf
rm .git/modules/path/to/module -rf

Це. Здається, є два способи створення субмодулів. В одному з них підпапка матиме лише один .git-файл, який просто вказує на каталог у надпроекті, починаючи з .git/modules/. У папці зберігається сховище для підмодуля. Видалення цього сховища вирішило проблему для мене, а прийнята відповідь - не.
Вільям Рандокун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.