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/*

Когда вы решаете отобразить ссылки напрямую, один к одному, вы по существу создаете полное зеркало данного удаленного репо.

Другие вопросы по тегам