2013年6月3日月曜日

git send-email

git には send-email というメールを送信するコマンドがあります。
ただし、普通のメールを送信するのに使うというより、パッチを送る用途に使います。

パッチを自分のメーラーに貼りつけて送信してもいいのですが、
メーラーによっては、長い行を勝手に改行してくれたりして、パッチが破壊される可能性もあります。

リポジトリ管理に git を使っているプロジェクトだと、
git format-pach でパッチ生成 ⇒ git send-email で送信
とするのが手順的にも楽です。
オープンソースの開発にコントリビュートするのに必須ですね。

セットアップについてメモ。

git-core を入れただけでは、 git send-email コマンドはまだ入っていないかもしれません。

Ubuntu の場合は

# apt-get install git-email

でインストールできます。
(他のディストリビューション未確認)


まずは練習のために、自分宛に、何か送ってみましょう。

なんでもいいので、git リポジトリでパッチを生成します。
$ git format-patch HEAD^
0001-blabla-blablabla.patch
今生成したパッチを送信してみます。
$ git send-email 0001-blabla-blablabla.patch
0001-blabla-blablabla.patch
Who should the emails appear to be from? [Masahiro Yamada <abc@xyz.com>]
Emails will be sent from: Masahiro Yamada <abc@xyz.com>
Who should the emails be sent to? abc@xyz.com
Message-ID to be used as In-Reply-To for the first email?
みたいな感じになります。

Who should the emails appear to be from?
というのは、メールの送信元 (From: フィールド) のことです。
基本的にコミットログからとってくれるので、それでよければそのまま [Return] を押します。

Who should the emails be sent to?
は送り先です。
今は練習なので、自分のメールアドレスを入れます。

Message-ID to be used as In-Reply-To for the first email?
は、今から送るメールが、何か別のメールに対する返信であるときに、引用元の Message-ID を入れておくと、メーラーなどがスレッドの分類などに使ってくれます。
今は、新規メールですので、そのまま [Return] でよいです。

最後に

Send this email? ([y]es|[n]o|[q]uit|[a]ll): y

と聞いてきますので、 間違いがないか確認して、 y[Return]
とします。

ローカルで sendmail 系のサービスが動いていれば、これで送信できちゃいます。
自分は postfix を入れています。postfix の設定は以前、git push でメールをとばす で簡単にまとめた。

postfix など入れてないケースが多いでしょうが、その場合は SMTPサーバーを指定しないといけません。

$ git config --global sendemail.smtpserver server_address
で設定します。必要であれば
$ git config --global smtpserverport port_number
でポート番号を設定します。

プロジェクトごとに別の SMTP サーバーを使う必要は普通はないので、--global オプションを付けます。すると、この設定は ~/.gitconfig に書き込まれます。


特に Gmail を使って送信する方法もメモっておきます。
GitTips に書いてありました。

~/.gitconfig/に以下を追加
[sendemail]
        smtpencryption = tls
        smtpserver = smtp.gmail.com
        smtpuser = your_account@gmail.com
        smtpserverport = 587
を追加して、 git send-email を実行すると Password を聞いてくるので、Gmail のパスワードを入力すると送信できる。

この場合の注意点は、git send-email での表示と無関係に、メールの From フィールドを
smtpuser = your_account@gmail.com で指定したアドレスに強制的に置き換えてしまうことです。

1 件のコメント:

  1. 貴重な記事ありがとうございます。
    おかげで私もパッチを送ることが出来ました。

    Gmailだとアドレスが強制的に置き換えられてしまうとのことですが、いろいろ試してみたところ成功しました。
    要点としては次の2つです。
    1.予めGmailのWebから設定にて利用するアドレス(エイリアス)を設定しておく
    2.git-send-email のfromオプションで1で指定したアドレスをセットする

    詳細は私のブログで記事にしましたので参照していただければと思います。
    http://nekomatu.blogspot.jp/2014/05/howto-send-alias-email-address-from-gmail.html

    返信削除