Victor Giers 1 год назад
Сommit
75048fd635
3 измененных файлов: 71 добавлений и 0 удалений
  1. 39
    0
      README.md
  2. 2
    0
      backup_filelist.txt
  3. 30
    0
      backup_routine.sh

+ 39
- 0
README.md Просмотреть файл

@@ -0,0 +1,39 @@
This script checks if changes happened to a given list of files, and if so, it'll store them into a next version as back up.

## Setup
Install git.
Create a folder that should acts as your automatic archive.
Open that folder with your terminal and execute ```git init```
Create a file in the folder called ".gitignore" and put the following in it:
```
backup_routine.sh
backup_filelist.txt
log.txt
```
Create the files "backup_routine.sh" and "backup_filelist.txt" in this folder.
Copy the code from "backup_routine.sh" in this repository into yours.
Put the complete filepaths to the files you want to automatically be versioned into "backup_filelist.txt".
Now use ```git add *``` and ```git commit -m "initial commit"```
You're done setting up your automatic archive.

---
## Automation
Make it so that "sh backup_routine.sh" gets called automatically. I recommend setting up a cron job, for example by executing ```EDITOR=nano crontab -e``` and writing the following into crontab:
```
0,15,30,45 * * * * cd ~/Automatic\ Git\ Versioned\ Backups && sh backup_routine.sh
```
This will run the script every 15 minutes.

---
## Restoration
Use
```
git log -- filename.ext
```
to view all the past versions.
Copy the commit-id of the version you wish to restore.
To recreate a past version, use
```
git show commit-id:filename.ext > path/to/restoration/filename.restored.ext
```
For example: ```git show 8f1dc7362dd5f6781ccf9ccc5a9cfdccb57ed709:ToDo.xlsx >> ToDo.restored.xlsx```

+ 2
- 0
backup_filelist.txt Просмотреть файл

@@ -0,0 +1,2 @@
/Users/giers/Library/Mobile Documents/com~apple~CloudDocs/Electronic Art/Bestand.xlsx
/Users/giers/Library/Mobile Documents/com~apple~CloudDocs/Electronic Art/ToDo.xlsx

+ 30
- 0
backup_routine.sh Просмотреть файл

@@ -0,0 +1,30 @@
#!/bin/bash

IFS=$'\r\n' GLOBIGNORE='*' command eval 'FILES=($(cat backup_filelist.txt))'

for i in "${FILES[@]}"
do
FILENAME=$(basename "$i")
if [ -f "$FILENAME" ]; then
#echo "$FILENAME exists."
DIF=$(diff "$i" "$FILENAME")
if [ -z "$DIF" ]
then
#echo "$FILENAME has not changed, skipping."
else
#echo "$FILENAME has changed, copying..."
cp "$i" .
fi
else
#echo "$FILENAME does not exist, copying..."
cp "$i" .
fi
done

if [[ `git status --porcelain` ]]; then
#echo "Git reports changes. Perfoming next generic commit."
git add *
git commit -m "next commit"
else
#echo "Git doesn't report any changes. No new commit. Exiting."
fi

Загрузка…
Отмена
Сохранить