2016-05-12 5 views
0

CIビルドの一環として、プロジェクトの最新バージョンをデプロイするスクリプトがあり、前回のコミットからの件名と対応するPRにコメントを残し、配備最新のプッシュからすべてのコミットの科目を取得

ただし、開発者が複数のコミットを同時にPRにプッシュすると、これらのビルドに複数のコミットの変更が含まれることがあります。リンクを含むメッセージにこれらの新しいコミットの件名が含まれるようにスクリプトを修正したいと思います。

COMMIT_MESSAGE=$(git --no-pager log --pretty=format:"%s" -1) 

すべてのコミットのメッセージを取得するために、私はgitのと対話することができますいくつかの類似の方法があります:のみ、最新のコミットを取得することを

現在の実装では、このようなコードの行を持っています上記の最新のコミットと同じプッシュから来たものですか?

答えて

0

あなたが前にプル要求にコミットを追跡する必要がありますが、あなたはそれがハッシュをコミット得ることができる場合、あなたはこの更新されたのgit logコマンドを使用できます。

git --no-pager log --pretty=format:"%s" <git_hash>..HEAD 

たとえば、ここに私のです私のレポの1からの出力:

> git --no-pager log --pretty=format:"%s" d8ede574fd33cac4d78bda1bce08049962c7a405..HEAD 
Update .coffee file as well 
Update for RN 0.25 
Uodat license to 2016 
2.10.0 
Merge pull request #66 from Hilzu/master% 

あなたがPRの前にGitのハッシュへのアクセス権を持っているかどうかを知るために十分なコンテキストを提供していませんでしたが、そうでない場合、私はこれは次のようになります想像することはできませんそれなしで可能です。

CIサーバーのgitフックに繋げることができれば理想的ですが、できない場合は、プルするためにフローを変更すると、プルされている間にコミットを見ることができます。 this answerを参照してください。フェッチすると、原点と現在のマスタを比較し、現在行っているコミットハッシュを保存し、プルをマージし、そのgitハッシュを使用して2つのコミット間のすべてのメッセージを表示できます。

+0

"PRの前にgitハッシュにアクセスできる場合は..."残念ながらそうではありません。私はgitフックの統合のいくつかの並べ替えが必要なものかもしれないと思う... – JKillian

+0

あなたはおそらく正しいです。 CIサーバーでクライアント側の '' post-merge'フック(https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)を使用することができます。 – Adam

1

おそらく、あなたのチームgitサーバーにupdate gitフックを設定する必要があります。

フックは3つのコマンドライン引数を受け取ります。プッシュインされるリファレンスの名前、前の状態のSHA-1、新しい状態のSHA-1です。したがってフック内のgit log --pretty=format:"%s" $2..$3はあなたに必要なログを与えます。

あなたは、具体的ブランチの作成と削除のケースを処理する必要があり、対応するSHA-1は、この場合にはゼロになります。詳細は

refname="$1" 
oldrev="$2" 
newrev="$3" 

if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then 
    echo "usage: $0 <ref> <oldrev> <newrev>" >&2 
    exit 1 
fi 

echo "Updating \"$refname\" from \"$oldrev\" to \"$newrev\"" >&2 

if [ "$oldrev" = "0000000000000000000000000000000000000000" ]; then 
    echo "\"$refname\" was created with rev \"$newrev\"" >&2 
    # do whatever you need for a new branch or _tag_ 
    # you may do as described in http://stackoverflow.com/a/5720575/3159253 
    # to list only commits specific for a newly created branch/tag, 
    # with the only exception: the reference isn't yet created in the target repo, 
    # so you don't need to filter it out 
    LOG=$(git log --no-merges --pretty=oneline $newrev --not $(git for-each-ref --format="%(refname)") --) -- 
    echo -e "New reference log\n$LOG\n===" >&2 
    exit 0 
fi 

if [ "$newrev" = "0000000000000000000000000000000000000000" ]; then 
    echo "\"$refname\" was deleted (last rev was \"$oldrev\"" >&2 
    # do whatever you need when a deleted branch or _tag_ 
    exit 0 
fi 

LOG=$(git log --pretty=oneline $oldrev..$newrev) 
echo -e "Changed reference log\n$LOG\n===" >&2 

チェックGit Hooks docs

フックは、ブランチとタグの両方に対して実行されることに注意してください。ブランチ名 はrefs/headsで始まります。タグの場合はrefs/tagsですので、必要に応じて接頭辞で区別することができます。

関連する問題