Git – Skrypt Bash do tworzenia patch z użyciem rsync

Łukasz Piotrowski Komentarzy 0

    Witajcie

    Dziś postanowiłem opublikować mały acz niezwykle przydatny skrypt Bash dzięki któremu tworzenie patchy do kopiowania jest niezwykle proste i przyjemne.


    Skrypt

    #!/bin/bash
    
    current_branch=$(git br --no-color | grep '\*' | sed 's/* //')
    echo -e "$(tput setaf 2)[II] == Aktualna gałąź: $(tput setaf 3)$current_branch$(tput sgr 0)";
    
    if [ ! -n "$3" ];
    then
       echo -e "$(tput setaf 2)[II] == Przełączam na gałąź: $(tput setaf 3)master$(tput sgr 0)";
     
        echo -e "$(tput setaf 4)"
     git co master
       echo -e "$(tput sgr 0)"
    fi;
    
    # Get 2 last tags if no $1 or $2 parameter
    OLD_IFS=$IFS
    IFS=$'\n'
        last_tags=( $(git tag | sort -V | tail -2) )
    IFS=$OLD_IFS
    
    
    tag_from=${last_tags[0]}
    if [ -n "$1" ];
    then
       tag_from="$1"
    fi;
    
    tag_to=${last_tags[1]}
    if [ -n "$2" ];
    then
       tag_to="$2"
    fi;
    
    echo -e "$(tput setaf 2)[II] == Wybrany przedział: $(tput setaf 3)$tag_from - $tag_to$(tput sgr 0)";
    
    echo -e "$(tput setaf 4)"
    git diff --name-only "$tag_from..$tag_to" | xargs -I {} rsync -R {} "path-$tag_to/"
    echo -e "$(tput sgr 0)"
    
    echo -e "$(tput setaf 2)[II] == Utowżono folder: $(tput setaf 3)path-$tag_to/$(tput sgr 0)";
    
    
    echo -e "$(tput setaf 2)[II] == Powrót do gałęzi: $(tput setaf 3)$current_branch$(tput sgr 0)";
    
    echo -e "$(tput setaf 4)"
    git co "$current_branch"
    echo -e "$(tput sgr 0)"

    Opis

    Skrypt wywołujemy z maksymalnie 3 parametrami:
    make_path.sh 1.0 1.2 1 gdzie:
    1.0 – Tag lub hash źródłowy
    1.2 – Tag lub hash docelowy
    1 – generowanie patch w obecnym branchu (domyślnie w master)

    Skrypt wywołany bez parametrów tworzy patch z 2 ostatnich tagów na gałęzi master.
    Jako wyjście skryptu generowany jest katalog o nazwie patch-tag z plikami zmodyfikowanymi pomiędzy wybranymi wersjami.

    Można pomijać parametry od końca (nie można pominąć np. tylko pierwszego)

    Przykładowe wywołanie

     $  u_path.sh 1.0.25 1.0.30
    
    [II] == Aktualna gałąź: dev
    [II] == Przełączam na gałąź: master
    
    Switched to branch 'master'
    Your branch is up-to-date with 'origin/master'.
    
    [II] == Wybrany przedział: 1.0.25 - 1.0.30
    [II] == Utowżono folder: path-1.0.30/
    [II] == Powrót do gałęzi: dev
    
    Switched to branch 'dev'
    Your branch is up-to-date with 'origin/dev'.
     $  u_path.sh
    
    [II] == Aktualna gałąź: dev
    [II] == Przełączam na gałąź: master
    
    Switched to branch 'master'
    Your branch is up-to-date with 'origin/master'.
    
    [II] == Wybrany przedział: 1.0.29 - 1.0.30
    [II] == Utowżono folder: path-1.0.30/
    [II] == Powrót do gałęzi: dev
    
    Switched to branch 'dev'
    Your branch is up-to-date with 'origin/dev'.
    Top