Есть ли способ "извлечь" заметки? - PullRequest
2 голосов
/ 07 августа 2020

Контекст:

Мы используем gerrit, и я пропустил добавление topi c для нескольких наборов изменений gerrit.

Один человек предложил сделать git fetch origin "refs/notes/*:refs/notes/*", затем «отредактируйте» примечания к обзору и sh верните результат этого. Оказывается: наши разрешения настроены так, что я могу получать заметки, но не их sh. Но человек, имеющий право вносить sh такие изменения, исправил записи, которые требовали исправления, так что я в порядке с этим аспектом.

Из любопытства я сделал git fetch origin "refs/notes/*:refs/notes/*" снова сегодня, и я get

remote: Counting objects: 333792, done
...
Resolving deltas: 100% (103/103), completed with 44 local objects.
From ssh://whatever....
 ! [rejected]                refs/notes/review -> refs/notes/review  (non-fast-forward)

Это похоже на первый раз, когда я получил «заметки», и я думаю: мне действительно не нужна эта информация локально.

Таким образом:

  • Есть ли способ «удалить» полученный контент?
  • Если нет, как я могу заставить мой локальный репозиторий забыть об изменениях, которые я сделал локально в «заметках»?

1 Ответ

5 голосов
/ 07 августа 2020

Вы можете:

  • полностью удалить свою refs/notes/review ссылку;
  • оставить как есть (вероятно, нет причин для этого); или
  • принудительно обновите свои собственные refs/notes/review с их refs/notes/review, чтобы всегда были самые свежие.

Удаление ваших заметок

Первое из это достигает вашей первой точки маркера. Для этого просто запустите:

git update-ref -d refs/notes/review

Обновление заметок

Последний достигает вашего второго пункта маркера. Чтобы сделать это один раз, запустите:

git fetch origin +refs/notes/review:refs/notes/review

или:

git fetch --force origin refs/notes/review:refs/notes/review

, что вы сделали в первый раз, за ​​исключением установленного флага «force», сообщающего вашему собственному Git, чтобы обновить ваш собственный, даже если это приведет к потере работы, которую вы выполняли локально.

Чтобы сделать это каждые git fetch origin, вы можете сделать одно из нескольких. Я предпочитаю открыть .git/config в моем редакторе (git config --edit сделает это). В этом конфигурационном файле вы найдете несколько строк такой формы:

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*

(также будет настройка url.)

Эта строка fetch сообщает Git: Каждый раз, когда я подключаюсь к origin, по умолчанию я хочу, чтобы вы, мой Git, брали все их имена refs/heads/* - все имена их веток - и использовали их для принудительного обновления моих собственные refs/remotes/origin/* имена. Вот как работают ваши имена удаленного отслеживания.

Добавление секунд fetch = строки:

        fetch = +refs/notes/review:refs/notes/review

сообщает вашему Git: Затем, обновив мой refs/remotes/origin/* с их refs/heads/*, также принудительно обновите мой refs/notes/review с их refs/notes/review.

У вас может быть столько fetch строк как угодно. Вы можете использовать их для реализации причудливых трюков, таких как, например, перенос других заметок и их переименование.

...