Проблема с добавлением общего кода в виде подмодуля git: «уже существует в индексе»

Я новичок в git и буду благодарен за помощь в добавлении подмодулей. Я'Мы получили два проекта с общим кодом. Общий код был просто скопирован в два проекта. Я создал отдельное git-репо для общего кода и удалил его из проектов, планируя добавить его как подмодуль git.

Я использовал параметр пути в git submodule add, чтобы указать папку:

git submodule add url_to_repo projectfolder

но потом получил ошибку:

'projectfolder' already exists in the index"

Это желаемая структура моего хранилища:

repo
|-- projectfolder
    |-- folder with common code

Подмодуль git можно добавить прямо в репозиторий или в новую папку, но не в папке проекта. Проблема в том, что он действительно должен быть в папке проекта. Что я могу с этим поделать, и что я неправильно понял в опции пути добавления git submodule?

 Vanja16 окт. 2012 г., 07:55
Я получаю список со всем контентом, начиная с 100644.
 Julio Marins20 мая 2016 г., 20:09
 Mark Longair15 окт. 2012 г., 17:14
Что вы получаете, если вы делаете?git ls-files --stage projectfolder
 rogerdpack20 сент. 2016 г., 21:54
для меня делаетgit rm в существующей папке помогло: | I '

Ответы на вопрос(9)

x под контролем git, вы хотите добавить субмодуль с тем же именем, вы должныудалить папкуx и передайте это первым.

Обновлено @ ujjwal-singh:

Фиксация не нужна, достаточно постановки .. /git addgit rm -r

 Ujjwal Singh23 мая 2017 г., 17:26
Фиксация не нужна, достаточно постановки .. /git addgir rm -r
 Qqwy05 апр. 2017 г., 20:25
Я совершил то, что упустил. Короткий ответ, но правильный!

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

Эта ошибка означает, чтоprojectfolder уже поставлено ("уже существует в индексе). Чтобы узнать, чтоздесь происходит, попробуйте перечислить все в индексе в этой папке с помощью:

git ls-files --stage projectfolder

Первый столбец этого вывода скажет вам, какой тип объекта находится в индексе вprojectfolder, (Они похожи на файловые режимы Unix, но имеют особое значение в git.)

Я подозреваю, что вы увидите что-то вроде:

160000 d00cf29f23627fc54eb992dde6a79112677cd86c 0   projectfolder

(то есть строка, начинающаяся с160000), в этом случае хранилище вprojectfolder уже был добавлен как "gitlink», Если это не такт появляются в выводеgit submoduleи вы хотите повторно добавить его как подмодуль, вы можете сделать:

git rm --cached projectfolder

... чтобы удалить его, а затем:

git submodule add url_to_repo projectfolder

... чтобы добавить хранилище как подмодуль.

Тем не менее, это 'Также возможно, что вы увидите много BLOB-объектов в списке (с файловыми режимами100644 а также100755), который подсказал бы мне, что ты ненеправильно удалить файлы вprojectfolder перед копированием нового хранилища на место. Если это'В этом случае вы можете выполнить следующие действия, чтобы удалить все эти файлы:

git rm -r --cached projectfolder

... а затем добавьте субмодуль с помощью:

git submodule add url_to_repo projectfolder
 abbood07 июн. 2013 г., 15:57
офигенный ответ +1 полностью
 mnis.p06 июл. 2018 г., 06:29
projectfolder не должен»Он не будет частью существующего родительского репо, он будет создан во время работы.git submodule add
 Vanja16 окт. 2012 г., 07:58
Спасибо Марку за подробный ответ. Я сделалgit rm -r - кэшированная папка проекта " и снова попытался установить субмодуль. Однако на этот раз я получаю сообщение об ошибке "'projectfolder» уже существует и не является действительным git-репо ".
 tterry08 авг. 2017 г., 21:17
Спасибо, это помогло мне, когда я пытался спешно добавить еще один репозиторий и сделал это неправильно (git clone внутри репозитория, а не git submodule add). На моем другом компьютере это был субмодуль, но файл .gitmodules никогда не создавался. Вышеуказанные шаги указывают мне путь к решению проблемы. Весьма признателен!
 iKode24 сент. 2017 г., 19:54
Огромное спасибо!!"
 vikramvi30 янв. 2017 г., 12:41
Это то, что я сделал, это трехэтапный процесс ШАГ 1: git rm -r --cached src / test / resources /, ШАГ 2: удалил каталог существующих ресурсов в другое место, ШАГ 3: подмодуль git add add url_to_repo src / тест / ресурсы
 Evan Moran08 мар. 2014 г., 00:31
Это мне очень помогло. Спасибо!
 Mark Longair16 окт. 2012 г., 13:42
@ Ваня: Это означает, чтоprojectfolder А не было»т содержит.git каталог. По твоему вопросу это звучало так, как будто тыЯ создал новый репозиторий дляprojectfolder в другом месте, и скопировал его на место, но ясно, чтот дело. Вы'нужно переместить существующийprojectfolder и скопируйте новый репозиторий (вместе с его.git каталог) на место перед добавлением в качестве субмодуля. Или, если выМы уже отправили его в хранилище, представленноеurl_to_repoВы могли бы просто двигатьсяprojectfolder и затем добавьте субмодуль из этого URL.

и это сработало для меня.

Предполагая, что вы находитесь в корневом каталоге проекта, и образец git-модуля называется "c3-про-КСН-рамка»

Удалить файлы, связанные с субмодулем

rm -rf .git/modules/c3-pro-ios-framework/

Удалите все ссылки на субмодуль в конфиге

vim .git/config

Удалить .gitmodules

rm -rf .gitmodules

Удалить его из кеша безмерзавец»

git rm --cached c3-pro-ios-framework

Добавить субмодуль

git submodule add https://github.com/chb/c3-pro-ios-framework.git
 gabn8821 февр. 2017 г., 21:46
Отличный пост, отлично работает. Здорово, что вы поделились этим, сэр. Действительно здорово.
 Sensei James01 нояб. 2018 г., 08:02
Я бы проголосовал за это 50 раз, если бы мог; ты только что спас мой день!
 mehmet07 сент. 2017 г., 19:46
Я пытался перечислить субмодули черезgit submodule после удаления и перед добавлением, и это дало мне ошибку, позаботился об этом.

то папка проекта) для пути к git.

rm -rf projectfolder

git rm -r projectfolder

а затем добавить субмодуль

git submodule add <git_submodule_repository> projectfolder
</git_submodule_repository>

полезно ли это, хотя у меня возникла та же проблема при попытке зафиксировать мои файлы из IntelliJ 15. В конце концов, я открыл SourceTree, и там я мог просто зафиксировать файл. Задача решена. Нет необходимости вводить какие-либо необычные команды git. Просто упомяну это на тот случай, если у кого-то возникнет такая же проблема.

что ошибка пытается сказать вам:

Вы не можете создать хранилище в этой папке, которое уже отслеживается в основном хранилище.

Например: у вас есть папка с темойAwesomeTheme тот'Вы пытаетесь сделать дамп прямо в ваш главный репозиторий, напримерgit submodule add sites/themes и вы получите это."AwesomeTheme" index already exists

Вам просто нужно убедиться, что нетт ужеsites/themes/AwesomeTheme в основном хранилищеs отслеживание версий, так что подмодуль может быть создан там.

Чтобы исправить, в вашем основном хранилище, если у вас есть пустойsites/theme/AwesomeTheme каталог, затем удалите его. Если вы уже совершили коммит сsites/theme/AwesomeTheme каталог в вашем главном репозитории, вам нужно очистить всю его историю с помощью команды, подобной этой:

git filter-branch --index-filter \
              'git rm -r --cached --ignore-unmatch sites/theme/AwesomeTheme'     HEAD

Теперь вы можете запуститьgit submodule add [email protected] sites/themes/AwesomeTheme

Поскольку главный репозиторий никогда ничего не видел (индекс a.k.a 'г) вsites/themes/AwesomeTheme раньше, теперь он может его создать.

Ошибка, которую я получал, была немного другой: already exists and is not a valid git repo (и добавлено здесь для ценности SEO)

Решение - НЕ создавать каталог, в котором будет размещаться субмодуль. Каталог будет создан как частьgit submodule add команда.

Также ожидается, что аргумент будет относиться к корню parent-repo, а не к вашему рабочему каталогу, так что следите за этим.

Решение для примера выше:

Это нормально, что ваш родительский репозиторий уже клонирован.Убедитесь, чтоcommon_code каталог делаетне существовать. (cd Repogit submodule add git://url_to_repo projectfolder/common_code/Обратите внимание на обязательную косую черту.)Здравомыслие восстановлено.

Я надеюсь, что это кому-то поможет, так как об этом очень мало информации.

 Shelton09 июл. 2013 г., 18:57
Исправлена опечатка. Я перепроверил это, и косая черта изменила меня. Я'м, используя Zsh, если это имеет какой-либо эффект.
 nullability21 мар. 2013 г., 17:41
Шаг 4 должен начатьсяgit submodule addи косая черта нет требуется.
 jackJoe21 окт. 2013 г., 20:15
Это решило мою проблему (создание каталога с добавлением подмодуля commnand), спасибо!

работая наоборот. Начиная с пустого репо, добавляя субмодуль в новую папку с именем "projectfolder / common_code», После этого можно было добавить код проекта в проектную папку. Детали показаны ниже.

В пустом репо введите:

git submodule add url_to_repo projectfolder/common_code

Это создаст желаемую структуру папок:

repo
|-- projectfolder
    |-- common_code

Теперь можно добавить больше подмодулей, а код проекта можно добавить в папку проекта.

Я могу'пока не скажу, почему так получилось, а не так.

в вашем git dir синхронизированы все изменения.

rm -rf .git 

rm -rf .gitmodules

Затем сделайте:

git init
git submodule add url_to_repo projectfolder
 redbandit28 нояб. 2018 г., 12:54
это удалит всю историю проекта!
 bersam17 дек. 2017 г., 07:50
дон»Если вы сделаете это, вы столкнетесь со многими нежелательными последствиями.

Ваш ответ на вопрос