Git отмечает детали
Я читал это и это, но все еще вижу их как неясные. Насколько понял:
- создание (
git notes add -m "a note"
) - заметки в пространстве имен
Вопросы:
- кажется, что заметки не создают коммит, так как
push
( пример) им можно? что за механизм под ним? Что такое добавление ноты концептуально, если не коммит? - где я могу увидеть мой
push
заметки на Github UI? - Есть ли какая-то связь между комментариями коммитов Github и функциональностью заметок?
- если комментарии Github являются заметками, как я могу получить их и посмотреть на них на моем локальном компе через
git log
? - если комментарии Github не являются заметками, то каковы они и возможно ли их получить?
- являются ли заметки объединяемыми? как?
- Существуют ли какие-либо предостережения по разрешению конфликтов для отредактированных заметок?
- Есть ли другие проблемы / трудности с заметками?
Спасибо
1 ответ
Я написал о них больше здесь, как часть моего git tip серии Week.
http://alblue.bandlem.com/2011/11/git-tip-of-week-git-notes.html
Сами заметки являются блобами, которые хранятся в отдельном файле ссылок (refs/notes/commits
) и организованы коммитом, на который они указывают (так git ls-tree refs/notes/commits
) дает объект дерева (например: каталог и содержимое), где каждое имя каталога - это то, на что они указывают, а каждое значение - это большой двоичный объект, содержащий само сообщение с примечаниями.
Вы можете увидеть, как Геррит использует примечания к обзору в дереве обзора JGit (которое использует refs/notes/review
вместо refs/notes/commit
но по сути точно такой же принцип) в GitHub зайдя сюда:
https://github.com/eclipse/jgit/tree/refs/notes/review
Так как это также ссылка, а дельта к содержимому файла хранится с коммитами, вы можете увидеть изменение отдельных заметок, например:
https://github.com/eclipse/jgit/commit/de70108c883afe563a48352c05cdd440c25f58cc
Обратите внимание, что имя файла отображается как путь к объекту; в приведенном выше случае, de70...
это коммит, который добавил сообщение, но содержимое коммита меняет файл 3a/bf...
что соответствует этому коммиту:
https://github.com/eclipse/jgit/commit/3abf35bc0fc7a1c130e8fec42083ffd21c342129
И если вы будете искать ссылку на рецензию там на оригинальный источник Gerrit:
Вы видите, что данные обзора соответствуют данным элемента notes.
Что касается того, объединяются ли они чисто - поскольку каждая заметка соответствует каждой фиксации, и каждая фиксация является неизменной после изменения, и фиксация заметки происходит для каждого каталога / файла, вы можете легко иметь несколько заметок для разных коммитов, перекрывающихся, не опасаясь конфликт слияния. Однако, если две программы / процессы обновляют одну и ту же заметку о фиксации, у вас могут возникнуть проблемы слияния, которые необходимо решить так же, как и при любом другом слиянии DVCS.
Вообще говоря, программы, которые должны хранить ортогональную информацию, должны использовать свое собственное пространство для заметок, как это делает Геррит для refs/notes/review
, Так что если у вас есть refs/notes/program1
а также refs/notes/program2
вы никогда не получите столкновение.