4

いくつかの Git および Mercurial オープン ソース プロジェクトに存在するクロス クロス マージの数を調査目的のみで特定したいと思います。これを達成する方法について何か提案はありますか?

交差マージは、マージに 2 つの異なる共通の祖先がある場合に判断できます。コンセンサス マージと呼ばれる Mercurial への新しいマージ戦略が開発されています。この戦略では、最大の共通祖先をすべて返すように、ancestor.ancestor() コードが拡張されます。この新しいコードはまだ見つかりませんでしたが、大いに役立ちます。

Git についてはよくわかりませんが、確かに似たようなものがあります。

4

1 に答える 1

1

2 つのブランチが交差マージされた回数ではなく、リポジトリ内の任意のブランチ間の交差マージの数を取得したいと考えています。その場合、Git に対して次のシェル スクリプトを実行する必要があります。

#!/bin/sh

# Get the list of branches and convert it to an array.
branches=$(git for-each-ref --format='%(refname:short)' refs/heads/)
branches=( $branches )
N=${#branches[*]}

cc_merges=0

# Loop over all combinations of two branches.
for ((i=0; i<N-1; ++i)); do
    for ((k=i+1; k<N; ++k)); do
        a=${branches[$i]}
        b=${branches[$k]}
        bases=$(git merge-base --all $a $b | wc -l)
        if [ $bases -gt 1 ]; then
            let "cc_merges += 1"
        fi
    done
done

echo "Number of criss-cross merges in repository: $cc_merges"

Mercurial の場合、残念ながら、ancestor()revset とdebugancestorコマンドの両方が、すべての祖先のリストではなく、最大の共通の祖先のみをリストしているため、ここで解決策を提案することはできません。

于 2012-11-25T21:54:27.447 に答える