Безопасно ли делать git clone из одного репозитория и устанавливать источник в другой? - PullRequest
4 голосов
/ 11 ноября 2011

Таким образом, у меня есть тенденция к недавнему клону репо, который мне нужен для работы в «очень тесной» сети (часто на локальном диске). Существует также «официальный» сервер, который мой рабочий процесс действительно хочет быть источником, но он часто очень медленный (либо потому, что он перегружен, либо в удаленной сети, либо в обоих случаях).

(это локальное репо является клоном официального сервера, которое обычно устареет на неделю или две, но репо очень большое и имеет историю десятилетия, импортированную из более старых VCS, поэтому локальный клон плюс выборка с пульта намного быстрее)

Если я git clone -o local /path/to/repo, а затем git remote add -f origin URI-for-offical-repo получу ли я то же самое (*) git clone URI-for-offical-repo дал бы мне?

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

(*) то же самое плюс дополнительное удаленное имя «local» и все, что не было передано с локального на официальный сервер.

Ответы [ 2 ]

5 голосов
/ 11 ноября 2011

Краткий ответ: Да, наверное.

Длинный ответ: «происхождение» - это просто псевдоним для того места, куда вы обычно хотите нажать. Если новый пункт назначения связан с репозиторием, который вы извлекли (или с пустым репозиторием), и у вас есть доступ для записи в него, он должен быть безопасным.

ПРИМЕЧАНИЕ. Я действительно не думал, что ваш пример команды "псевдокод" является разумным. Но концепция клонирования с последующим изменением URL-адреса на «происхождение» является разумной концепцией. Я сделал это сам, когда адреса серверов были перемещены, или я решил изменить свое публичное местоположение репо и т. Д.

Однако, будьте осторожны, если новый источник НЕ является полностью пустым хранилищем или старым клоном вашего локального репо (без новых коммитов, чем в вашем локальном), используя

git push --mirror #e.g. implicitly to "origin"

может перезаписывать и удалять ветки на пульте, если у вас есть полный доступ к записи. (Это я также смог сделать сам, когда небрежно копировал и вставлял данные .git / config из одного репо в несвязанный репозиторий. [К счастью, у него было много современных клонов; но я потел на несколько секунд при удалении сообщения прокручивались по всему моему экрану;)])

3 голосов
/ 12 ноября 2011

То, что вы делаете, выглядит хорошо, но вы можете искать опцию --reference, которая была добавлена ​​в git clone некоторое время назад.Если есть локальная копия, это позволяет очень быстро создать новый клон, используя эталонные пакеты репозитория, а затем просто выполнить обновление из сети.Например: git clone --reference ./oldercopy $url newcopy

Для вашей текущей схемы - при условии, что дерево связано, нет проблем с переключением URL для удаленных.Если они не связаны, то появятся всевозможные неприятные сообщения об ошибках.

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