Git refspec для извлечения всего с удаленного, но с сохранением локальных коммитов (LibGit2Sharp)
Я управляю git-репозиториями с помощью LibGit2Sharp. У меня есть пустой git-репозиторий, клонированный с удаленного A. Теперь я хотел бы получить все изменения (т.е. все заголовки и теги) с удаленного B и сделать так:
repository.Network.Fetch("git-url", new[] { "+refs/*:refs/*" })
Или эквивалент (если я не ошибаюсь) в командной строке git:
git fetch "git-url" +refs/*:refs/*
Однако, как это бывает, удаленный B идентичен A, за исключением двух новых коммитов, которые отсутствуют (которые находятся на двух ветвях веток). Это приводит к тому, что операция извлечения удаляет эти два коммита в клоне, в основном, давая то же самое, если бы я клонировал с удаленного B.
Каков правильный refspec (или иначе правильный метод) выполнения выборки, которая сохранит локальные фиксации без изменений, позволяя получать новые фиксации с удаленного B? Я тоже пробовал +refs/*:+refs/*
но это добавит метки веток к более старым коммитам, пока refs/*:refs/*
новые изменения тоже не принесут.
1 ответ
Обычно ссылки из удаленного репозитория идут на refs/remotes/<remote_name>/...
Таким образом, вы можете разделять ссылки, извлеченные из разных пультов и / или созданные локально.
Вот почему типичная карта выборки выглядит так: +refs/heads/*:refs/remotes/origin/*
Когда вы решаете отобразить ссылки напрямую, один к одному, вы по существу создаете полное зеркало данного удаленного репо.