Git remote 'set-url' команда изменяет URL нескольких папок - PullRequest
0 голосов
/ 19 марта 2019

У меня есть папка с именем 'Py', где я храню все свои проекты Python.В начале все было хорошо, так как я создавал папки проектов и устанавливал их разные URL-адреса происхождения.Каждая папка внутри этой папки 'Py' была связана с собственным репозиторием Git.

Тогда я не знаю, что произошло, но я заметил, что, изменив URL в одной из подпапок, все URL-адресадругие подпапки в родительской папке также изменятся.Например, я иду в подпапку 'Py / folder1' и выполняю

git remote set-url origin 'some-url'

Затем я перехожу в подпапку Py / folder2, выполняю

git remote -v

и вижу, что эта подпапкаURL-адрес также изменился на «Some-URL».Я подозреваю, что каким-то образом я сделал всю папку Py похожей на один репозиторий, а не несколько из них, хранящихся в одной папке.Вопрос в том, как изменить это поведение.

1 Ответ

0 голосов
/ 19 марта 2019

Если у вас есть

.../
  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%, потому что слишком много неизвестно о том, что вы найдете в процессе повторного клонирования, и последующие шаги зависят от того, что вы найдете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...