GIT to przeszłość…

… przyszłość to zzzver.sh. 🙂

#!/usr/bin/bash
# very basic version control system

# let's check current directory
PWD=$(pwd)

# check flags and do stuff
if [ "$1" = "init" ] ; then
  # initialize repository
  mkdir $PWD/stable
  mkdir $PWD/test
  mkdir $PWD/archive
  touch $PWD/zzzrepo
  echo "$(date): repository initialized" | tee -a $PWD/zzzrepo
  
elif [ "$1" = "diff" ] ; then
  if [ -z $2 ] ; then
    # diff test and stable directories
    diff -d -r $PWD/test/ $PWD/stable/
  else
    # diff test and stable directories with the content of specified archive
    mkdir $PWD/archive/difftemp
    tar -zxvf $PWD/$2 -C $PWD/archive/difftemp
    echo "------ Test ------"
    diff -d -r $PWD/test $PWD/archive/difftemp/test
    echo " "
    echo " ----- Stable ------"
    diff -d -r $PWD/stable $PWD/archive/difftemp/stable
    rm -fr $PWD/archive/difftemp
    echo " "
  fi

elif [ "$1" = "merge" ] ; then
  # overwrite stable with test
  rm -fr $PWD/stable/*
  cp --recursive $PWD/test/* $PWD/stable/
  echo "$(date): merged test into stable" | tee -a $PWD/zzzrepo

elif [ "$1" = "save" ] ; then
  # save test and stable as an archive under a name of date and time
  tar -zcf $PWD/archive/$(date +%F_%T).tar.gz test/ stable/
  echo "$(date): repository archived" | tee -a $PWD/zzzrepo

elif [ "$1" = "load" ] ; then
  if [ -z $3 ] ; then
    # overwrite test and stable with content of the specified archive
    rm -fr $PWD/test
    rm -fr $PWD/stable
    tar -zxf $2 -C $PWD
    echo "$(date): restored backup from $2 archive" | tee -a $PWD/zzzrepo
  elif [ "$3" = "test" ] ; then
    # overwite just test with content of specified archive
    rm -fr $PWD/test 
    tar -k -zxf $2 -C $PWD &> /dev/null
    echo "$(date): restored test repo backup from $2 archive" | tee -a $PWD/zzzrepo
  elif [ "$3" = "stable" ] ; then
    # overwrite just stable with content of specified archive
    rm -fr $PWD/stable
    tar -k -zxf $2 -C $PWD &> /dev/null
    echo "$(date): restored stable repo backup from $2 archive" | tee -a $PWD/zzzrepo
  fi

elif [ -z $1 ] ; then
  # echo some instructions
  echo " "
  echo -e "Please specify:\r
   'init' to create repository,\r
   'diff' to compare test and stable repo,\r
   'diff archive/name.tar.gz' to compare test and stable with specified archive,\r
   'merge' to copy test into stable,\r
   'save' to archive test and stable as date_time.tar.gz,\r
   'load archive/name.tar.gz' to replace test and stable with content of specified archive,\r
   'load archive/name.tar.gz test' to replace test with content of specified archive,\r
   'load archive/name.tar.gz stable' to replace stable with content of specified archive."
   echo " "

else
  echo "I give up, you wrote something wrong. :("
  echo " "

fi

W ramach standardowego bashowego klepania tylko mi potrzebnych rzeczy, napisałem sobie system kontroli wersji. Ja niby wiem, że wszyscy mają GITa (czytaj: Github i Bitbucket), ale chciałem czegoś prostszego. W skrócie, skrypt umie: rozróżniać pomiędzy STABLE i TESTING, archiwizować obydwa powyższe i każdy z osobna, diffować repozytoria oraz archiwa, odtwarzać repo z archiwum. To wszystko, czego potrzebuję. Sprawdza się tutaj stara prawda, że najlepszy program to ten, który sam sobie napiszesz.
Nie wiem do końca czemu zrobiłem go po angielsku. Przypuszczalnie zamierzałem stosować go na wirtualkach bez polskich znaków, ale tak do końca to już nie pamiętam.

Skrypt został troszkę zaktualizowany. Jedna z najlepszych rzeczy, jaką sam dla siebie zrobiłem.