Вложенные репозитории git без подмодулей?

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

Ответ 1

1/Вы можете переопределить это через:

  • либо git config: установите переменную окружения $GIT_DIR
    вы определяете свой каталог .git вложенного рабочего дерева Git как внешний .git (внешний как для вложенного репо, так и для основного репо)
  • или установив вложенное репо 'N' снаружи основное репо, но проверьте, что репо 'N' внутри основного репо:
core.worktree

Задайте путь к корню дерева работ. Это может быть переопределено переменной среды GIT_WORK_TREE и параметром командной строки --work-tree

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

2/С подмодулями вложенный репозиторий Git не включен в родительское репо.
A специальная запись выполняется в родительском дереве для записи внешнего Git SHA1.

new file mode 160000
index 0000000..4c4c5a2

См. также "природа Git подмодулей" (третья часть ответа)

Ответ 2

Я нашел другой метод, который, кажется, работает для меня

Если вы git add somefolder/ & lt; - убедитесь, что у вас есть / в конце, тогда он добавит все файлы вместо того, чтобы рассматривать его как подмодуль.

Больше упомянуто здесь: http://debuggable.com/posts/git-fake-submodules:4b563ee4-f3cc-4061-967e-0e48cbdd56cb

Ответ 3

См. также Являются ли git подмодулирует единственный безопасный способ иметь рабочие копии в рабочих копиях?.

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

Ответ 4

Это не самое элегантное решение, но стоит упомянуть.

Если вы закроете папку, содержащую репозиторий, вы можете проверить ее во внешнем репозитории.

Это может быть полезно, потому что у вас будет полное полное состояние, включая git reflog.

Ответ 5

Одна из самых простых (и грязных) вещей, которую вы можете сделать, это переименовать папку .git

У меня была такая структура папок:

|- .git
|- folders
|- second-repo
     |- .git
     |- folders

Я просто использовал эту команду bash из корневой папки:

mv /.git /.not_git

Теперь вы можете зайти в second-repo и использовать его собственный git для команд, и таким образом вы можете переходить туда-сюда для использования обоих репозиториев git.

PS: Git subomodules - правильный способ справиться с этим, но в моем случае я не мог пойти за ними