2013-02-26 3 views
2

после создания GIT подмодуль, набравGit подмодуль: Перемещение подмодуль атмосферного репозиторий

git submodule add <repo> && git submodule init 

мой .git/конфигурации изменяется, а также новый .gitmodules файл создается. Кажется, что я смог бы пошевелить подмодуль в определенную папку внутри, так и вне хранилища:

$ cat gitmodules 

[submodule "sub_repo"] 
path = sub_repo 
url = <...> 

Но когда я пытаюсь переместить мой репозиторий в моей родительской папки и изменить мои .gitmodules

path = ../sub_repo 

, кажется, игнорирует этот модуль на 'git update' или 'git subodule foreach'.

Какая у меня ошибка в рассуждении здесь?

Большое спасибо!

ответ

2

Это просто не поддерживается, вот и все. Весь смысл подмодулей состоит в том, чтобы в основном иметь один репозиторий в другом.

Если вы не хотите этого делать, не используйте подмодули. Просто клонируйте этот другой репозиторий.

+1

Я не вижу в этом понятной причины. Я хочу, чтобы мои текущие проекты ссылались на состояние внешнего репо. Мне это не нужно в моем репозитории. В любом случае. Вероятно, он будет поддержан в будущем –

+0

@JohnRumpel: Наверное, нет. git записывает только в папку своего репозитория, поэтому он не сможет создать этот подмодуль на клоне. –

+1

Так что я должен написать свою собственную вилку. flexibleGit ;-) –

1

Перемещение субмодуля из родительского репо в автономный каталог просто включает в себя обновление некоторых метаданных. С Git 2.4, меры заключаются в следующем:

  1. Начиная с репо, предполагая, что подмодуль в my-submodule/:

    mv my-submodule ../ 
    
  2. Удалить файл указатель .git в субмодуля (заметим, что это ISN «т каталог):

    rm ../my-submodule/.git 
    
  3. Переместить реальные метаданные GIT для субмодуля в репозиторий подмодуля в:

    mv .git/modules/my-submodule/ ../my-submodule/.git 
    
  4. Отредактируйте .git/config файл, удалив worktree аргумент, который ранее указывал на относительный путь внутри репо.

Это все! На этом этапе ваше родительское репо покажет подмодуль как deleted, в то время как сам подмодуль будет работать как обычно (возможно с отсоединенной головкой, которую вы можете сбросить на мастер).

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

Если кто-то еще знает более быстрый способ сделать это (например, настоящую команду git), я буду все уши.

+0

Спасибо, это сработало просто отлично! Я позже последовал за ответом Джона Дутата (http://stackoverflow.com/questions/1260748/how-do-imove-a-submodule), чтобы удалить подмодуль из исходного репо. – pedrovgp

Смежные вопросы