Как определить, безопасен ли удаленный репозиторий git? - PullRequest
2 голосов
/ 21 апреля 2011

Можно ли определить, что я могу безопасно извлекать данные из нового удаленного репозитория, т. Е. Два репозитория имеют общую родословную? Я пишу программу, которая автоматизирует клонирование и обновление большого количества репозиториев git, hg и т. Д., И я хотел бы беспрепятственно обрабатывать случай, когда удаленный репозиторий перемещается на новый URL. Похоже, что git позволит мне извлекать из любой пульт дистанционного управления, потенциально создавая серьезные конфликты. У Svn есть хранилище uuid, чтобы определить, можете ли вы перейти на новый URL. Я понимаю, что git распространяется и должен быть легко разбираемым, так что uuid на самом деле не имеет смысла, но есть ли какая-то сопоставимая функция / функция в git?

Ответы [ 3 ]

3 голосов
/ 21 апреля 2011

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

git remote add test-remote foo@bar:/path/to/repo.git
git remote update
git merge-base test-remote/master master || echo "No common ancestors!"
1 голос
/ 21 апреля 2011

Я понимаю, что git распространяется и должен быть легко разбираемым, поэтому uuid на самом деле не имеет смысла, но есть ли в git какая-то сопоставимая функция / функция?

Напротив, часть того, что делает git настолько полезным, как распределенная система контроля версий, состоит в том, что каждый коммит имеет идентификатор, который однозначно определяет как этот коммит, так и его полную историю. (Это хеши, которые вы видите связанные с коммитами в git, которые правильно называются «именами объектов».) Неважно, из какого репозитория был извлечен коммит или из которого он был передан, он все равно представляет точно такое же состояние дерева и точно такая же история, включая авторство и т.д ..

Из вашего вопроса мне не совсем ясно, является ли то, что вы хотите знать, (а) существует ли вообще какая-либо общая родословная или (б) содержит ли история ветви А полностью историю ветви В (т.е. объединение А в В было бы «быстрой перемоткой вперед»).

Если вы после (а), то ответ Брайана Кэмпбелла - это то, что вы хотите, т. Е. По существу проверка, успешно ли возвращается git merge-base test-remote/master master.

С другой стороны, если вы после (b), вам следует проверить, совпадает ли вывод git merge-base test-remote/master master с git rev-parse --verify master.

0 голосов
/ 21 апреля 2011

«pull» в git - это просто «fetch», за которым следует «merge» в текущую ветку. Когда вы делаете git «fetch» ​​на удаленном компьютере, который не имеет общего происхождения, вы получаете это предупреждение:

предупреждение: нет общих коммитов

Вы должны быть в состоянии сделать выборку из URL, а затем обнаружить это сообщение по выходным данным этой операции.

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