Git - проверять, находится ли ветка git notes за удаленной - PullRequest
0 голосов
/ 07 мая 2020

Я разрабатываю git -хук, который работает на pre-pu sh. Его цель - не дать вам нажать ветку, если есть неотталкиваемые git заметки. Чтобы достичь этого, мне нужно иметь возможность запускать некоторые logi c во время хука pre-pu sh, который может определять, есть ли неотталкиваемые refs/notes/commits.

К сожалению, я ужасно умею git.

Я пробовал этот подход здесь: Проверить, находится ли локальное git репо впереди / позади удаленного Однако, когда я это делаю, git merge-base refs/notes/commits origin/refs/notes/commits git просто говорит мне:

fatal: Not a valid object name origin/refs/notes/commits

Вот мой refspe c:

[remote "origin"]
    url = https://github.com/dazinator/GitHookExperiment.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    fetch = +refs/notes/*:refs/notes/*

Я добавил несколько заметок локально с помощью git notes add, поэтому мое локальное репо - я знаю, что у него есть заметки, которые не были отправлены . Я просто не знаю, какие команды git нужно запустить, чтобы обнаружить этот факт, пока я нахожусь в другой ветке (ветка, которая в настоящее время отправляется).

Я ищу несколько git команд, которые я могу запустить вывести результат, который я могу проанализировать, чтобы дать мне окончательное Да или Нет, находится ли ветвь заметок позади или нет ..

1 Ответ

0 голосов
/ 07 мая 2020

Эта строка:

fetch = +refs/notes/*:refs/notes/*

сообщает вашим Git: Возьмите их refs/notes/* имена и скопируйте их в мои refs/notes/* имена. Вы никогда не делаете никаких origin/refs/notes/commits name вообще, вы просто копируете ha sh ID в их refs/notes/commits в свой refs/notes/commits.

Это означает, что если вы добавляете свои собственные примечания к фиксации, следующие git fetch стирает их, потому что требуется их последние заметки, выбрасывая (принудительно обновляя) ваши собственные refs/notes/commits.

Если вы хотите сохранить свои собственные заметки, вы ' Вам нужно будет поместить свои заметки в другое место или сохранить свои заметки в другом месте (в любом из них). Система git notes не очень хороша - здесь она совсем не удобна для пользователя.

Я бы посоветовал хранить свои заметки под своим именем и использовать стандартное имя для их заметок. . Я думаю, вы можете сделать это, например:

git config core.notesRef refs/notes/mynotes

. Убедитесь, что вы не перезаписываете эту примечания ref, используя:

fetch = +refs/notes/commits:refs/notes/commits

, чтобы вы перезаписывали только свои refs/notes/commits из их refs/notes/commits.

Вы Теперь можно определить, совпадают ли ваши заметки и их заметки, используя:

git rev-parse refs/notes/commits
git rev-parse refs/notes/mynotes

Эти две команды сгенерируют два идентификатора ha sh. Если идентификаторы ha sh не совпадают, у вас разные коммиты, так как самые последние заметки.

(Обратите внимание, что, как показано в документации, вы можете временно переопределить имя заметки несколькими способами, независимо от того, не вы переопределили имя по умолчанию refs/notes/commits, используя core.notesRef, как указано выше. Термин "default-default" здесь означает, что refs/notes/commits является значением по умолчанию, если core.notesRef установлено не . Параметр core.notesRef устанавливает новое значение по умолчанию.)

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