278

作成された各コミットまたはタグにGitが常に署名するようにする簡単な方法はありますか?

私はそれを次のようなもので試しました:

エイリアスcommit=commit -S

しかし、それはうまくいきませんでした。

これを実現するために別のプログラムをインストールしたくありません。簡単にできますか?

ちょっとした質問ですが、Homebrewなどのプロジェクトに単一のコミットを送信するため、コミットに署名するのではなく、タグのみを作成する必要があります。

4

6 に答える 6

345

-S注:コミットが署名されていることを確認するために常に追加したくない場合は、追加する提案があります(pu今のところ、ブランチ''、2013年12月なので、gitリリースに到達する保証はありません)。あなたのためにそのオプションの世話をするconfig。
2014年5月の更新:Git 2.0に含まれています(このパッチシリーズで再送された後)

Nicolas Vigier(boklm)によるcommit2af2ef3を参照してください。

commit.gpgsignすべてのコミットに署名するオプションを追加します

すべてのコミットにGPG署名する場合は、-S常にオプションを追加する必要があります。
configオプションを使用すると、commit.gpgsignすべてのコミットに自動的に署名できます。

commit.gpgsign

すべてのコミットをGPG署名する必要があるかどうかを指定するブール値。
リベースなどの操作を行うときにこのオプションを使用すると、多数のコミットが署名される可能性があります。エージェントを使用して、GPGパスフレーズを数回入力しないようにすると便利な場合があります。


その構成は通常、リポジトリごとに設定されます(プライベートな実験的なローカルリポジトリに署名する必要はありません)。

cd /path/to/repo/needing/gpg/signature
git config commit.gpgsign true

これをグローバル設定として使用することと組み合わせることができuser.signingKeyます(コミットに署名するすべてのリポジトリに使用される一意のキー)

git config --global user.signingkey F2C7AB29!
                                           ^^^

ubombiがコメントで示唆しているように(そして「ユーザーIDを指定する方法」に基づいて「 GPGハードウェアキーとGit署名」で説明します)

gpgを使用する場合、感嘆符(!)を追加して、指定された1次キーまたは2次キーを強制的に使用し、使用する1次キーまたは2次キーを計算しないようにすることができます。


user.signingKeygit 1.5.0(2007年1月)でcommitd67778eを使用して導入されました。

gitリポジトリとgpgキーで同じ形式の名前を使用する必要はありません。
さらに、キーリングに複数のキーがあり、コミットメッセージで使用するアドレスと一致しないキーを使用したい場合があります。

このパッチは、構成エントリ ""を追加しますuser.signingKey。これは、存在する場合、gpgの "-u"スイッチに渡され、タグ署名キーをオーバーライドできるようにします。

これは、commit aba9119(git 1.5.3.2)を使用して実施され、ユーザーがキーリングの構成を誤っているか、キーリングに秘密キーがない場合にuser.signingKey対応.git/configします。

ノート:

于 2013-12-17T07:40:05.073 に答える
243
git config --global user.signingKey 9E08524833CB3038FDE385C54C0AFCCFED5CDE14
git config --global commit.gpgSign true

9E08524833CB3038FDE385C54C0AFCCFED5CDE14をキーIDに置き換えます。注意:短いIDを使用することは決して良い考えではありません

更新:新しいgit edictごとに、すべての構成キーはキャメルケースに含まれている必要があります。

于 2015-05-26T20:01:06.500 に答える
49

編集:Gitバージョン1.7.9以降、Gitコミットに署名すること可能git commit -Sです( )。これを反映するために答えを少し更新します。

質問のタイトルは次のとおりです。

GitでGPGキーを使用してコミットを「自動署名」する方法はありますか?

簡単な答え:はい、しかしそれをしないでください。

質問のタイプミスに対処する:git commit -sコミットに署名しません。むしろ、man git-commitページから:

-s、--signoff
コミットログメッセージの最後にコミッターによるSigned-off-by行を追加します。

これにより、次のようなログ出力が得られます。


± $ git log                                                                                 [0:43:31]
commit 155deeaef1896c63519320c7cbaf4691355143f5
Author: User Name 
Date:   Mon Apr 16 00:43:27 2012 +0200

    Added .gitignore

    Signed-off-by: User Name 

「Signed-off-by:...」ビットに注意してください。-sこれは、のフラグによって生成されましたgit-commit

リリースアナウンスメールの引用:

  • 「gitcommit」は「-S」をGPGに学習しました-コミットに署名します。これは、「gitlog」の「--show-signature」オプションで表示できます。

そうです、コミットに署名することができます。ただし、私は個人的にこのオプションに注意することをお勧めします。コミットに自動的に署名することは無意味です。以下を参照してください。

ちょっとした質問ですが、コミットに署名するべきではなく、単一のコミットを送信するため、タグのみを作成する必要があります。

そのとおりです。コミットは署名されていません。タグはです。この理由は、Linus Torvaldsによるこのメッセージに記載されており、その最後の段落には次のように書かれています。

各コミットに署名することは完全に愚かです。それは単にそれを自動化し、署名の価値を下げることを意味します。また、SHA1のgit DAGチェーンが機能する方法であるため、実際の値を追加することはありません。その 署名から到達可能なすべてのコミットをその署名で効果的にカバーするために必要な署名は1つだけです。したがって、各コミットに署名することは、単に要点を失っています。

リンクされたメッセージを参照することをお勧めします。これにより、コミットに自動的に署名することが、私よりもはるかに優れた方法で適切ではない理由が明らかになります。

ただし、タグに自動的に署名する場合はgit-tag -[s|u]、をエイリアスでラップすることで署名できます。これを行う場合は、キーID~/.gitconfigまたはプロジェクト固有の.git/configファイルを設定することをお勧めします。そのプロセスの詳細については、gitコミュニティブックを参照してください。タグに署名することは、コミットするたびに署名するよりもはるかに便利です。

于 2012-04-15T22:59:29.300 に答える
13

自動署名をgitバージョン2.0より前に機能させるには、コミット用のgitエイリアスを追加する必要があります。

# git config --global alias.commit commit -S
[alias]
    commit = commit -S
于 2016-10-19T11:01:04.083 に答える
3

最初に、すべてのコミット、タグ、およびプッシュに署名するために使用する公開鍵を設定します。公開鍵を取得するには、次のコマンドを使用します

% gpg --list-keys --keyid-format=short
/home/blueray/.gnupg/pubring.kbx
-------------------------------
pub   rsa3072/F6EED39A 2021-12-25 [SC] [expires: 2023-12-25]

この場合、公開鍵はF6EED39Aです。次に、次のコマンドを実行します。

git config --global user.signingkey F6EED39A
git config --global commit.gpgSign true // sign all commits
git config --global tag.gpgSign true // sign all tags
git config --global push.gpgSign true // sign all push

これで、すべてのコミット、タグ、およびプッシュは、指定された公開鍵によって自動的に署名されます。

これらの設定を上書きする必要がある場合があります。

コミットには、git commit --no-gpg-sign -m "Unsigned commit"

タグには、git tag --no-sign <tag-name>

プッシュには、git push --no-signed

于 2021-12-26T07:25:36.703 に答える
0

コミットまたはタグに署名する場合、履歴全体を承認することを意味するものではないことを明確にする必要があります。コミットの場合は、手元の変更に署名するだけです。タグの場合は、それが何を意味するのかを定義する必要があります。あなたはそれがあなたからのものであると主張するがそうではなかった変更を引っ張ったかもしれません(他の誰かがあなたのリモコンにそれを押したため)。または、それはあなたが入りたくない変更ですが、あなたはタグに署名しただけです。

通常のOSSプロジェクトでは、これはあまり一般的ではないかもしれませんが、時々コードに触れるだけで、履歴全体を読まないエンタープライズシナリオでは、見過ごされる可能性があります。

コミットに署名することは、他の親にリベースされたり、厳選されたりする場合に問題になります。しかし、変更されたコミットが実際に検証される「元の」コミットを指すことができれば、それは良いことです。

于 2013-04-19T01:17:41.273 に答える