2

この質問の面白さの1 つは、タスクとは何か、それが git 履歴にどのように記録されるかを定義することです。

git flow 分岐モデルを使用すると、開発された各機能が独自の分岐を取得します。次に、 https://stackoverflow.com/a/6191836/172690から取得した次のスクリプトを使用します。

#!/bin/sh
# From https://stackoverflow.com/a/6191836/172690

NAME1="$1"
if [[ -z $NAME1 ]]; then
    echo "Usage:
    git-show-merge-ancestry.sh COMMIT_ID
        This will display the ancestry of the merged in branch.
        To list only merge commits, use 'git log --merges'."
else
    git show $1 | grep Merge: > /dev/null
    if [[ 0 == $? ]]; then
        echo "Displaying ancestry of merged commit $1"
        git show $1
        git log $(git merge-base --octopus $(git log -1 --merges --pretty=format:%P ${NAME1}))..$(git log -1 --merges --pretty=format:%H ${NAME1}) --boundary --graph --pretty=oneline --abbrev-commit
    else
        echo "The commit $1 doesn't seem to be a merge commit"
    fi
fi

マージ コミットを簡単に調べて、マージされたブランチ/機能に関連するコミットの有益な情報をすべて抽出できます。ただし、たわごとが発生し、実際には単一のタスク/機能に関連するコミットが実際には複数のブランチに分散していることがあります。実際、機能にパッチを適用するためにホットフィックスを使用することがあります。

このような状況では、各コミットにRefs #xxxマーカーを追加してバックアップします。この種のマーカーは github や同様のチケット システムに表示され、タスクに関連する変更を追跡するための私の決定的な手動の方法です。次に、タスクに関連する変更は、特定の番号のログ コミットを grep するようなコマンドで抽出できます。git log --grep=#39

問題は、両方の情報を 1 つのビューに混在させるにはどうすればよいかということです。私が望むのは、Refs #xxxマーカーまたはコミット ハッシュのいずれかを受け入れ、git 履歴にどれほど散らばっていても、すべての関連情報を表示するコマンドです。入力がタスクの場合、最初に個々のコミットを grep し、次にそれらがどのブランチから来たかを見つけます。入力がコミット ハッシュの場合、Refs #xxxマーカーの祖先ログを解析し、履歴内の他のどのコミットがそれらのタスクを参照しているかを調べる必要があります。

これはより複雑な機能なので、git グラフィカル ブラウザのいずれかに実装されているのでしょうか?

4

0 に答える 0