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