Как я могу повторно инициализировать головы из веток отслеживания в конфигурации git? - PullRequest
0 голосов
/ 08 января 2020

Если я бегу,

$ git branch -t 86 upstream/86
Branch '86' set up to track remote branch '86' from 'upstream'.

Я вижу, что происходят две вещи

  • запись добавляется в .git/config

    [branch "86"]
        remote = upstream
        merge = refs/heads/86
    
  • для соответствующей ветви создается файл ref, ./.git/refs/heads/86

Если я удаляю этот файл, ./.git/refs/heads/86 - это оставшаяся запись в .git/config какого-либо использования? Есть ли какая-либо команда, которую я могу запустить, чтобы воссоздать все главы (файлы в каталоге)? Или я должен повторно выполнить все команды, которые я первоначально выполнил, чтобы создать их?

1 Ответ

2 голосов
/ 08 января 2020

Если вы получили эту ветку, git reset --soft origin/86 сделает (--soft только обновляет HEAD, сброс по умолчанию, --mixed, также перезагружает записи индекса; --hard дополнительно сбрасывает рабочее дерево).

Если вы этого не сделаете (или в любом случае, действительно, это работает независимо), это время команды ядра: git update-ref refs/heads/86 origin/86.

edit: сделать это в В пакетном режиме вы можете создавать команды обновления из записей конфигурации, git update-ref имеет аргумент --stdin и небольшой интерпретатор команд для выполнения массовых обновлений.

Я использую ansible для предоставления git Конфигурационные файлы с информацией об удаленном отслеживании, и это единственный случай, когда помещения материала в конфигурационный файл недостаточно из-за проблемы синхронизации между конфигурацией git и удаленными ссылками. Поэтому я хочу воссоздать удаленные ссылки из .gitconfig.

Это должен был быть ваш главный абзац.

Разумно предположить, что вы используете стандартные refspecs, +refs/heads/*:refs/remotes/$remote/* немного менее разумно предположить, что все идет от origin, но я оставлю обобщение этого для нескольких пультов или пользовательских refspecs в качестве упражнения для читателя:

git config --get-regexp ^branch\..*\..merge \
| awk -F'[. /]' '{print "update refs/heads/"$2" origin/"$NF}' \
| git update-ref --stdin

На самом деле создать удаленный refs, вам нужно запустить git fetch, пройдя через git ls-remote и создание ссылок вручную не поможет, если у вас нет объектов.

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