git - 为什么要Sign Off?
某草草
某草草 2017-05-02 09:25:58
0
2
1632

为什么很多开源项目都要求Sign Off?Git里面已经配置用户名和邮箱了,再次署名的意义是什么?

另外,怎么进行Sign Off操作?是在提交描述最后加一行就行,还是在Pull Request的时候,还是需要用什么其他方法?

某草草
某草草

全員に返信(2)
大家讲道理

まず、サインオフと署名を区別します。 @nightfire が署名について説明しました。サインオフの意味を説明(翻訳)してみましょう。

「多くのオープンソース プロジェクトがサインオフを必要としている」のを見たことがありません。最も有名なのは Linux カーネルです。そのドキュメントには次のように書かれています:

11) 作品に署名します

誰が何をしたかの追跡を改善するため、特に複数の
メンテナ層を介してカーネル内の最終的な場所に浸透する可能性があるパッチの場合、
メールで送信されるパッチに「サインオフ」手順を導入しました。 .

Linux の開発プロセスでは、GitHub によって作成された「プル リクエスト」を使用せず、(配布された) 電子メールを介してパッチを送信するためです (そのため、git は電子メールをかなり適切にサポートしています)。パッチが送受信される場合は、それらを追跡する必要があります。そうしないと、BSD で経験したような悪影響が発生し、開発に影響を及ぼします。 「Signed-off-by」は実際には、送信するパッチが「Developer's Certificate of Origin 1.1」のポイントに準拠していることを保証する声明です。

StackOverflow の誰かが、これは少数のプロジェクトの要件にすぎず、ほとんどのプロジェクトはサインオフを使用しないと述べました。

追記: カーネルのコミットを見ると、サインオフの長いリストを含むコミットが見つかることがあります。この場合、コミッターと作成者が 1 人だけで十分なわけはありません。

いいねを押す +0
PHPzhong

簡単な答えは あなたがあなたであることを証明するためです!

一般に、送信するときは、作成者とコミッターの 2 つの情報があり、通常は 1 人 (プライベート プロジェクト、共有中央リポジトリ) になります。

Github が登場する前の時代 (たとえば、Linux Core の共同開発に初めて Git が使用されました)、現在誰もが慣れ親しんでいるプル リクエストは、それほど簡単に処理できるものではありませんでした。当時、パッチは分散開発によく使用されていました。たとえば、提出物 (この時点で作成者情報が生成されました) をプロジェクト マネージャ/メンテナに電子メールの添付ファイルとして送信し、プロジェクト マネージャ/メンテナがそれを中央ライブラリにマージしました。 (これは生成されたコミッター情報です)......

しかし、作成者もコミッターも、その「人」がその行為を行った本物であることを本質的に証明することはできません。開発者の名前と電子メールを知るのは簡単すぎるため、電子メールの添付ファイルとして送信されたパッチは、作成者があなたであることを証明できますか?電子メールを受信して​​マージする人は確実にコミッターである可能性がありますか? (プロジェクトに複数のマネージャー/メンテナーがいると仮定します)

したがって、これを重視する人は、安全な署名に GPG キーを使用します。これは、サインオフ です。実際、私も多くの電子署名を使用しています。これはデジタル署名用です。

できるだけシンプルかつ明確にしようとしましたが、実際には想像以上に詳細が記載されています。興味がある場合は、次の記事を参照してください: Git のホラー ストーリー: 署名されたコミットによるリポジトリの整合性。この記事では、Sign Off に関連するすべてについて話し終えていません。

もう一つの懸念点は、多くのプロジェクトにはライセンスが必要ですよね。ただし、プロジェクトでサードパーティのコードを使用する場合は、これらのコードのライセンス ポリシーが相互に排他的であるか、このプロジェクトのライセンスと競合する可能性があります。それが(あなたが質問したように)オープンソース プロジェクトであれば、この側面により多くの注意を払うでしょう(他の人から訴訟を起こされることを望みますか?)。 Git の Sign Off 行まで 正確であり、コードの真のソースの検証になります (信頼性には疑問がありますが、何もしないよりはマシです。 ..)。これについては詳しくは述べませんが、少し聞いただけです。

署名を使用したい場合は、最も簡単な 3 つの手順に従う必要があります (Mac に基づく):

  1. gunpg プログラムが必要です。Mac では homebrew を使用してインストールできます:

  2. GPG秘密鍵を生成する必要があります。生成後は次のようになります。
    #🎜 🎜##🎜🎜 #

  3. キー ID を Git に伝える必要があります (同時に複数のキーを持つことができるため):
  4. リーリー

    それでは、これから

    (大文字に注意してください)、送信時にあなたのデジタル署名が自動的に添付されます。あなたはあなた自身であり、偽造されることを拒否します。


@Evian のヒントによると、--sign-off--gpg-sign には違いがあります。興味がある場合は、次のことを確認してください。彼女の回答のコメントを参照してください。回答は以下の Google 検索から引用: --sign-off--gpg-sign 是有区别的,这个是有历史原因的,感兴趣的可以看看她答案里的评论。以下引用 Google 搜索的答案:

-s adds a "signed off by" field to the commit. -S actually GPG signs the commit, which was added in git 1.7.9. Also, this does not sign all commits, but only those which are made by the user directly using the git c command. In a rebase, when new commits are created, this will not sign off on (or PGP sign) the commits, unless you do an interactive rebase and manually commit every change.

-S 可以两个一起做了,这是前面答案里推荐使用此选项的原因。所以 --sign-off 只是署名,而 --gpg-sign 是使用 GPG 秘钥来署名。


OK,又错了…… -S

-s はコミットに「サインオフ」フィールドを追加します。 -S は実際にコミットに署名します。これは git 1.7.9 で追加されました。また、これはすべてのコミットに署名するのではなく、作成されたコミットにのみ署名します。 git c コマンドを使用してユーザーが直接実行します。リベースでは、新しいコミットが作成されると、対話型リベースを実行してすべての変更を手動でコミットしない限り、コミットはサインオフされません (または PGP 署名されません)。 > 🎜-S 両方を同時に実行できるため、前の回答ではこのオプションが推奨されています。したがって、--sign-off は署名するだけであり、--gpg-sign は GPG キーを使用して署名します。 🎜 🎜 🎜OK、また間違っています... -S を一緒に使用することはできません。署名と署名の両方が必要な場合は、両方を一緒に使用する必要があります。 🎜
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!