Для чого функція виходу з програми Git?


Відповіді:


536

Вихід - це необхідність отримання патчів у ядро ​​Linux та кількох інших проектів, але більшість проектів насправді не використовують його.

Він був внесений після позову до ШОС (та інших звинувачень у порушенні авторських прав з боку ШОС , більшість з яких вони ніколи насправді не брали до суду), як свідоцтво про походження розробників . Зазвичай говорять, що ви підтверджуєте, що ви створили відповідний патч, або що ви засвідчуєте, що, наскільки вам відомо, він був створений за відповідною ліцензією з відкритим кодом або що він вам був наданий кимось інше за цими умовами. Це може допомогти створити ланцюжок людей, які беруть на себе відповідальність за статус авторського права відповідного коду, щоб гарантувати, що код, захищений авторським правом, не випущений відповідною ліцензією на вільне програмне забезпечення (відкритий код), не буде включений до ядра.


91
Слід зазначити, що описане значення - це значення, яке присвоєно Signed-off-by:рядкам повідомлень фіксації проектом ядра Linux (та самим проектом Git). Однак для інших проектів такі рядки є безглуздими, якщо проект не призначає їм значення (наприклад, описуючи їх в документації проекту; наприклад, Linux SubmittingPatches або Git's SubmittingPatches ).
Кріс Джонсен

39
То чому це потрібно було зробити в повідомленні про фіксацію? Я думав, що до комітетів доданий автор, і вони були частиною хешу SHA1?
Лейф Андерсен

34
@Leif Mere Інформація про авторство недостатня. Я, можливо, написав патч, але якби я базував його на якомусь коді від Unix, я не мав би дозволу випускати його під GPL (принаймні, без реєстрації від когось вище). Або, виправлення може зробити його між декількома різними обслуговуючими пристроями перед тим, як завершити в дереві ядра; випис вказує на ланцюг опіки. Прочитайте сертифікат походження, з яким я пов’язаний; ось що це означає, коли ви додаєте рядок виходу. Заголовок "Автор" може бути неточним, і не обов'язково передбачає згоду з усім, що міститься в сертифікаті про походження.
Брайан Кемпбелл

68
Без ключа PGP, як можна встановити, що вихід є справжнім?
HRJ

7
@HRJ Справді підписаний фактично залежить від вас (комітента). Ні на автора, ні на самого підписаного. Якщо пізніше хтось (переважно підписаний) оскаржує свою недійсність, вам краще мати з собою електронну пошту чи щось, що підтверджує, що він погодився на це. Комітет може сказати, що він не вчинив такої краплі, якщо ббл не був підписаний GPG (ІМХО слабкий захист, але ...). У цьому випадку фіксатор може використовувати -S для закриття кола. Тепер з -S і -s у вас є ланцюжок зберігання, заснований на слові виконавця, що код, написаний яким-небудь автором, має право використовувати деякі підписані вище.
Д-р Беко

70

Вихід - це рядок в кінці повідомлення про фіксацію, який засвідчує, хто є автором комітету. Основна його мета - покращити відстеження того, хто що робив, особливо з патчами.

Приклад фіксації:

Add tests for the payment processor.

Signed-off-by: Humpty Dumpty <humpty.dumpty@example.com>

Він повинен містити справжнє ім'я користувача, якщо воно використовується для проекту з відкритим кодом.

Якщо для технічного обслуговування гілок потрібно трохи змінити патчі, щоб злити їх, він може попросити відправника переадресувати, але це буде контрпродуктивно. Він може відкоригувати код і поставити свій підпис в кінці, щоб оригінальний автор все-таки отримав кредит на виправлення.

Add tests for the payment processor.

Signed-off-by: Humpty Dumpty <humpty.dumpty@example.com>

[Project Maintainer: Renamed test methods according to naming convention.]
Signed-off-by: Project Maintainer <project.maintainer@example.com>

Джерело: http://gerrit.googlecode.com/svn/documentation/2.0/user-signedoffby.html


38
Хіба це не є зайвим у authorполі git комітету? Я завжди думав, що тому є окреме authorі committerполе. Автор - автор-патч, а комітер - той хлопець, який застосував та натиснув патч.
Leif Gruenwoldt

10
Чи дійсно це засвідчує, хто автор зобов’язання? Я маю на увазі, як і -S (--gpg-знак) робить, тому що я не думаю. Я думаю, що хтось міг би додати рядок "Підписаний вихід" з будь-яким ім'ям та електронною поштою, тоді як підпис GPG набагато надійніший, але, можливо, я помиляюся.
hdl

1
"Вихід - це рядок в кінці повідомлення про фіксацію, який засвідчує, хто є автором зобов'язання. Його головна мета - покращити відстеження того, хто що робив, особливо з патчами ». - Це майже напевно неправильно (конкретно, перше речення). Як зустрічний приклад, див., Наприклад, b2c150d3aa (пов'язаний з відповіддю VonC) , який має два підписані заголовки; один автором , а один - супроводжувачем. Це звичайна практика у проектах Git та Linux.
Гільденстерн

(Продовження з попереднього коментаря.) Підписатися означає, що ви є автором комісії за певних умов або передаєте те, що було автором того, хто (намагався) виконати вищезазначену умову. Таким чином, це утворює щось на зразок ланцюгової сертифікації.
Гільденстерн

Оновлення вище сказаного: виявляється, я щось пропустив у своїй останній відповіді, і тому я недооцінив цю відповідь. Автор частково вірно вважає "коригування коду", але неправильно наголошує на трейлері "вихід". Документація говорить про те, що вам слід додати брекет-причіп (як у прикладі у відповіді), який повідомляє про це. Тож відхід у поєднанні з цим можна використовувати для додавання невеликих змін з боку таких людей, як інтегратор / підтримуючий персонал. Але вихід все ще служить в основному тим, що я описав.
Гільденстерн

30

git 2.7.1 (лютий 2016 р.) уточнює, що в команді b2c150d (05 січня 2016 р.) Девід А. Уілер ( david-a-wheeler) .
(Об'єднав Хуніо С Хамано - gitster- у комітеті 7aae9ba , 05 лютого 2016 р.)

git commitсторінка man тепер включає:

-s::
--signoff::

Додайте Signed-off-byрядок комітером у кінці повідомлення журналу фіксації.
Значення реєстрації залежить від проекту, але воно, як правило, засвідчує, що утримувач має право подати цю роботу під тією ж ліцензією та погоджується на сертифікат для походження розробника ( для отримання додаткової інформації див. Https://developercertificate.org ).


Розгорніть документацію, що описує --signoff

Змініть різні файли документа (чоловічої сторінки), щоб більш детально пояснити, що --signoffозначає.

На це надихнула " lwn article" Bottomley: скромна пропозиція щодо DCO " " (свідоцтво про розробник походження), де paulj зазначив:

Проблема у мене з ІКА є те , що додавання « -s» аргумент мерзотника зробити на самому ділі не означає , що ви навіть НЕ чули про ІКА ( сторінка людей не має жодної згадки про будь-якому місці DCO ), ніколи не заперечують на насправді бачив.git commit

Тож як присутність " signed-off-by" будь-якого способу може означати, що відправник погоджується та зобов'язується до DCO? У поєднанні з фактом я бачив відповіді у списках до патчів без SOB, які не говорять ні про що, як тільки "Повторити це, signed-off-byщоб я можу це зробити".

Розширення документації git полегшить стверджувати, що розробники розуміли, --signoffколи вони її використовують.


Зауважте, що цей випуск зараз доступний (для Git 2.15.x / 2.16, Q1 2018) git pull.

Див. Команду 3a4d2c7 (12 жовтня 2017 р.) У. Тревора Кінга ( wking) .
(Об’єднав Хуніо С Хамано - gitster- в комітеті fb4cd88 , 06 листопада 2017 р.)

pull: перехід --signoff/--no-signoffдо " git merge"

злиття може зайняти --signoff, але без тягнення, що проходить --signoffвниз, користуватися незручно; дозволити " pull" взяти варіант і передати його.


2
Навіть якщо документація git commit (нарешті) посилається на документ, прапор -s має намір вказати знання та згоду / згоду / ??? до, я вважаю, SOB юридично дуже слабкий. SOB був, принаймні, думаю, винайдений Лінусом для вирішення соціальної проблеми тим, що інші виступали за високу бюрократію. Лінус нічого не хотів, але придумав це, щоб закрити їх. Наскільки я можу сказати, юристи не радили б вам вкладати багато, якщо вони є, віри в це. (Я 'paulj' на LWN).
paulj

3
VonC, ти справжній куратор Git. Ви завжди маєте такі добре структуровані, інформативні та добре перекреслені відповіді на подібні питання - відстежуючи історію розвитку Git до можливих інструментів та документації, орієнтованих на користувачів. Тож дякую за це.
Гільденстерн

3
@Guildenstern Дякую за цей приємний коментар.
VonC

17

На це питання є кілька приємних відповідей. Я спробую додати більш широку відповідь, а саме про те, про які подібні лінії / заголовки / причепи йдеться в сучасній практиці. Зокрема, не стільки щодо заголовка виходу (це не єдиний).

Заголовки чи трейлери (↑ 1), такі як "вихід" (↑ 2), є в поточній практиці в таких проектах, як Git та Linux, ефективно структуровані метадані для комітету. Усі вони додаються до кінця повідомлення про фіксацію після "вільної форми" (неструктурованої) частини тексту повідомлення. Це пари -значення (або ключ-значення ) пари, як правило, розділені двокрапкою та пробілом ( :␣).

Як я вже згадував, "вихід" - не єдиний трейлер у сучасній практиці. Ознайомтеся, наприклад з цим зобов’язанням , яке стосується "Брудної корови":

 mm: remove gup_flags FOLL_WRITE games from __get_user_pages()
 This is an ancient bug that was actually attempted to be fixed once
 (badly) by me eleven years ago in commit 4ceb5db9757a ("Fix
 get_user_pages() race for write access") but that was then undone due to
 problems on s390 by commit f33ea7f404e5 ("fix get_user_pages bug").

 In the meantime, the s390 situation has long been fixed, and we can now
 fix it by checking the pte_dirty() bit properly (and do it better).  The
 s390 dirty bit was implemented in abf09bed3cce ("s390/mm: implement
 software dirty bits") which made it into v3.9.  Earlier kernels will
 have to look at the page state itself.

 Also, the VM has become more scalable, and what used a purely
 theoretical race back then has become easier to trigger.

 To fix it, we introduce a new internal FOLL_COW flag to mark the "yes,
 we already did a COW" rather than play racy games with FOLL_WRITE that
 is very fundamental, and then use the pte dirty flag to validate that
 the FOLL_COW flag is still valid.

 Reported-and-tested-by: Phil "not Paul" Oester <kernel@linuxace.com>
 Acked-by: Hugh Dickins <hughd@google.com>
 Reviewed-by: Michal Hocko <mhocko@suse.com>
 Cc: Andy Lutomirski <luto@kernel.org>
 Cc: Kees Cook <keescook@chromium.org>
 Cc: Oleg Nesterov <oleg@redhat.com>
 Cc: Willy Tarreau <w@1wt.eu>
 Cc: Nick Piggin <npiggin@gmail.com>
 Cc: Greg Thelen <gthelen@google.com>
 Cc: stable@vger.kernel.org
 Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

На додаток до трейлера "Виходу" у вищезазначеному, є:

  • "Cc" (повідомлено про виправлення)
  • "Acked-by" (визнається власником коду, "мені добре виглядає")
  • "Переглянуто" (переглянуто)
  • "Звіт про тестування та перевірку" (повідомлення про тестування та тестування (я припускаю))

Інші проекти, як, наприклад, Герріт, мають для них власні заголовки та пов'язане значення.

Дивіться: https://git.wiki.kernel.org/index.php/CommitMessageConventions

Мораль розповіді

Моє враження, що, хоча початковою мотивацією до конкретних метаданих були деякі юридичні питання (судячи з інших відповідей), практика таких метаданих вийшла за рамки просто розгляду справи щодо формування ланцюжка авторства.

[↑ 1]: man git-interpret-trailers
[↑ 2]: Це також іноді називають «рида» (ініціали), схоже.


2
Цікавий випадок використання. +1
VonC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.