Git проверить содержимое файла через ветви - PullRequest
0 голосов
/ 08 мая 2018

В настоящее время я использую следующие две функции bash для чанкования нашего репозитория git, чтобы определить, какой номер последней версии есть в каждой ветви. Поскольку у нас есть несколько git-хуков, включая пост-извлечение, функция gitTrackAll может занять некоторое время. Есть ли способ сделать то, что я делаю, не проверяя каждую ветку, не вытягивая ее и не запуская git show?

Чтобы уточнить, я сейчас проверяю каждую ветку и получаю содержимое файла VERSION. По сути, это говорит мне, что является последней версией, которая была объединена с этой веткой. Иногда у нас возникают ветки, в то время как разработчик работает над ними. Этот список дает нам быстрый способ узнать, что за этим стоит.

gitTrackAll && gitBranchVersions

function gitTrackAll(){
        remote='origin';
        for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD| awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do
            git checkout "$brname"
            git branch --set-upstream-to $remote/$brname $brname;
            git pull
        done
        git checkout master
}

function gitBranchVersions(){
        line='--------------------------------------------------------------------------------'
        line="$line$line"
        for branch in $(git for-each-ref --format='%(refname)' refs/heads/); do
                VER=$(git show "$branch":VERSION);
                printf "%s %s $VER\n" $branch "${line:${#branch}}"
        done
}

Результирующий вывод выглядит примерно так (имена ветвей изменены)

refs/heads/1954-branch-a ---------------------------------------------------------------------------------------------------------------------------------------- 2.9.27
refs/heads/1955-branch-b ---------------------------------------------------------------------------------------------------------------------------------------- 2.9.43
refs/heads/1965-branch-c ---------------------------------------------------------------------------------------------------------------------------------------- 2.9.32
refs/heads/1968-branch-d ---------------------------------------------------------------------------------------------------------------------------------------- 2.9.101
refs/heads/1969-branch-e ---------------------------------------------------------------------------------------------------------------------------------------- 2.9.114
refs/heads/master ----------------------------------------------------------------------------------------------------------------------------------------------- 2.9.115

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Похоже, я могу читать файлы прямо с пульта. Используя части из обеих функций, я придумал следующее, которое отлично работает для нужного мне приложения.

function gitBranchVersions(){
    line='--------------------------------------------------------------------------------'
    line="$line$line"
    remote='origin' ;

    git fetch --all --prune
    for brname in `git branch -r | grep $remote | grep -v HEAD| awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do
        VER=$(git show "$remote/$brname":VERSION);
        printf "%s %s $VER\n" $brname "${line:${#brname}}"
    done
}
0 голосов
/ 08 мая 2018

Я бы переписал gitTrackAll следующим образом без какой-либо проверки:

function gitTrackAll(){
        remote='origin';
        for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD| awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do
            git branch --set-upstream-to $remote/$brname $brname;
            # git fetch cannot update the current branch - use git pull
            git fetch $remote $brname:$brname || git pull $remote $brname
        done
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...