Подмодуль Git добавляет: «Git каталог найден локально» проблема

194

Я на самом деле пытаюсь научиться использовать 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 не правильный, или вы не уверены, что это значит, выберите другое имя с параметром --name.

На самом деле нет подкаталога в projets/

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

Но мой файл .gitmodules содержит только информацию о моем первом подмодуле (tools / libft), а не о projets / fdf:

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

Будучи французским студентом, я мог что-то пропустить в английской документации, которую я нашел, но я искал, и я действительно не понимаю, почему я получил эту проблему.

Я был бы рад, если бы я нашел решение, но просто объяснение было бы также полезно.

vmonteco
источник
Небольшое исправление: это «хранилище», а не «хранилище». На самом деле это не ответ, но если проекты независимы друг от друга, для каждого проекта было бы лучше иметь собственное репо, а не подмодули.
14:30
Спасибо, я исправил. Я знаю, но я хотел бы собрать все свои работы в одном репо, но в виде отдельных проектов. Это выбор - постоянно обновлять всю мою работу, когда я иду из дома в школу и наоборот (и мне интересно, как использовать эти инструменты;))
vmonteco
Что ж, любопытство - это всегда веская причина! :) Это странно. Вы уверены, что не добавляли субмодуль раньше?
хт
Не в Travail /, и у меня нет проблем клонировать fdf.git в ~ /. В Travail / я не нахожу никаких следов fdf. просто либфт: /
vmonteco
5
Ой, подождите, я заглянул /Travail/.git/modules/projets/и нашел fdfкаталог. Похоже, что это не в рабочем дереве, а в старых коммитах. Может ли это вызвать проблему?
vmonteco

Ответы:

445

Я пришел к этому посту, пытаясь добавить субмодуль с тем же путем, что и субмодуль, который я недавно удалил.

Это то, что в конечном итоге сработало для меня ( эта статья очень помогла ):

Если вы еще не пробежали 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

jbmilgrom
источник
47
Это было действительно полезно, так как я не мог найти ничего другого, что сработало. Ключевым отличием от других предложений был ваш шаг № 3. Спасибо!
AndroidDev
8
Шаги 2 и 3 были необходимы для меня.
U007D
8
Шаг 3 был необходим для меня, но, почему субмодуль там тоже существует?
Crt
1
Для меня я пропустил шаги 1 и 2 (в которых уже были правильные настройки), а шаг 3 исправил это для меня. (Я уже сделал начальный шаг git rmи rm -rfшаги.)
Рок Ли
2
Даже шаг 3 не работал для меня. У меня был только один подмодуль, поэтому я удалил весь, .git/modulesи это сработало.
ACH
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том, где лежала эта ошибка.

pjammer
источник
15

Возможно, вы удалили свой 'projets/fdf'диск, но в вашем Git-хранилище он все еще есть. Используйте, git rm -rf projets/fdfчтобы удалить его из Git, затем зафиксируйте изменения. После этого вы сможете добавить эту папку как субмодуль.

Бредихин
источник
Это сработало :) Спасибо. Я думаю, что на самом деле сделал эту ошибку.
vmonteco
21
Мне сказали, что каталог не существует, когда я делаю это. Кажется, он существует и не существует: /
Натан Хорнби
41
@ tom-mcfarlin В конце я вручную удалил строки из .gitmodule и папку из .git / modules, а затем позволил мне добавить новый подмодуль. Может быть, есть лучший способ сделать это, но у меня не хватило времени. Если вы пойдете этим путем, я рекомендую вам сделать хорошую резервную копию и, пожалуйста, не вините меня, если это пойдет не так для вас. Удачи.
Спарклос
5
Спасибо, я нашел в другом посте, чтобы удалить папку из .git / modules, и это сработало для меня. Имеет смысл, поскольку именно это и говорит ошибка: конфликт ... Я просто не знал об этой папке
Том Макфарлин
10
@NathanHornby @Sparklos @TomMcFarlin - в более свежих версиях git вы обнаружите, что git-submodule добавляет каталог в папку .git. Например, если вы находитесь в каталоге /tmp/repo, затем запустите git submodule add ../otherrepo.git, и вы увидите, что эта /tmp/repo/.git/modules/otherrepoпапка существует. Это то, что проблема была для меня. Я вручную удалил эту папку из .git, и все заработало.
Александр Берд
13

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

Если у вас был только один субмодуль, просто удалите .gitmodules

Дмитрий R117
источник
2

Эти две команды работают для меня.

rm path/to/submodule -rf
rm .git/modules/path/to/module -rf
W.Perrin
источник
Это. Кажется, есть два способа создания подмодулей. В одной из них подпапка будет иметь только один файл .git, который просто указывает на каталог в суперпроекте, начиная с .git/modules/. Там есть папка, в которой хранится хранилище для субмодуля. Удаление этого хранилища устранило проблему для меня, а принятый ответ - нет.
Уильям Рэндокун,