Git отмечает детали

Я читал это и это, но все еще вижу их как неясные. Насколько понял:

  • создание (git notes add -m "a note")
  • заметки в пространстве имен

Вопросы:

  1. кажется, что заметки не создают коммит, так как push ( пример) им можно? что за механизм под ним? Что такое добавление ноты концептуально, если не коммит?
  2. где я могу увидеть мой pushзаметки на Github UI?
  3. Есть ли какая-то связь между комментариями коммитов Github и функциональностью заметок?
  4. если комментарии Github являются заметками, как я могу получить их и посмотреть на них на моем локальном компе через git log?
  5. если комментарии Github не являются заметками, то каковы они и возможно ли их получить?
  6. являются ли заметки объединяемыми? как?
  7. Существуют ли какие-либо предостережения по разрешению конфликтов для отредактированных заметок?
  8. Есть ли другие проблемы / трудности с заметками?

Спасибо

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:

https://git.eclipse.org/r/

Вы видите, что данные обзора соответствуют данным элемента notes.

Что касается того, объединяются ли они чисто - поскольку каждая заметка соответствует каждой фиксации, и каждая фиксация является неизменной после изменения, и фиксация заметки происходит для каждого каталога / файла, вы можете легко иметь несколько заметок для разных коммитов, перекрывающихся, не опасаясь конфликт слияния. Однако, если две программы / процессы обновляют одну и ту же заметку о фиксации, у вас могут возникнуть проблемы слияния, которые необходимо решить так же, как и при любом другом слиянии DVCS.

Вообще говоря, программы, которые должны хранить ортогональную информацию, должны использовать свое собственное пространство для заметок, как это делает Геррит для refs/notes/review, Так что если у вас есть refs/notes/program1 а также refs/notes/program2 вы никогда не получите столкновение.

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