Если у вас есть
.../
parent/
project1/
project2/
и все они имеют конфигурацию remote
, тогда наиболее вероятная ситуация -
(1) Существует каталог .../parent/.git
, который отображает parent
и все его подпапки как рабочее дерево одного репо
(2) Не существует каталогов .../parent/project1/.git
или .../parent/project2.git
, которые бы сопоставляли каждую папку проекта с собственным git repo
Если раньше они вели себя как независимые репозитории, но не больше, то похоже, что каким-то образом каталог parent/.git
был создан (возможно, через git init
), и каким-то образом другие каталоги .git
были удалены.
Быстрый отказ от ответственности: очень маловероятно, что папки .git
проектов были случайно удалены. В приведенном ниже совете принимается ситуация, представленная на первый взгляд, и поэтому она недействительна, если замечания, изложенные в этом вопросе, являются неточными или если некоторые «мелкие детали» были опущены.
Тем не менее ... если вышеупомянутое действительно каким-то образом произошло, то удаление каталогов .git
является значительной потерей данных (по крайней мере, локально). К счастью, пульты Git можно рассматривать как своего рода «резервную копию» большинства локальных данных, поэтому, если вы недавно синхронизировались с пультом каждого проекта, вы сможете восстановить без особых хлопот.
Итак, первое, что я бы сделал, оставив пока parent
в покое, создайте новый родительский каталог (например, .../parent2
). В этом каталоге создайте новые клоны каждого репозитория проекта с удаленного компьютера.
Далее вы сравниваете то, что находится в каждом каталоге проекта в parent2
с тем, что находится в соответствующем каталоге в parent
. (Вы можете использовать git diff
или какой-либо другой инструмент для массовых различий, например, Beyond Compare.) То, что вы будете делать, зависит от того, что вы найдете.
Если все проекты идентичны, значит, вам повезло; Вы можете просто стереть старую папку parent
и переместить проекты из новой папки parent
обратно в их исходные местоположения, и продолжить с нее.
Если есть различия, вам, возможно, придется посмотреть, есть ли у вас локальные изменения не на пульте, есть ли на пульте изменения, которых у вас не было локально, или и то и другое. Локальные изменения, не относящиеся к удаленному, могут быть зафиксированы в рамках коммитов (очевидно, случайного) монорэпо, которое у вас сейчас есть на parent
- в этом случае они могут быть извлечены с использованием git filter-branch
с --parent-filter
и затем перенесены в отдельный проект репо должны быть объединены любым способом, который имеет смысл. Либо отдельные изменения могут быть потеряны, и вам, возможно, придется просто обновить состояния отдельных репозиториев, чтобы отразить ваши последние изменения.
И одно особое соображение - может быть, что одна (или более) из вновь клонированных копий содержат всю структуру parent
. Это может произойти, если в какой-то момент вы задали URL репо parent
, как если бы это был URL для конкретного проекта. История поиска может выявить момент, когда это произошло.
Ни одна из этих процедур очистки не прописана на 100%, потому что слишком много неизвестно о том, что вы найдете в процессе повторного клонирования, и последующие шаги зависят от того, что вы найдете.