Ich verwende git als Backup für mein Windows-System und es war unglaublich nützlich. Am Ende des Beitrags zeige ich die Skripts an, die ich zum Konfigurieren auf einem Windows-System verwende. Die Verwendung von Git als Backup für jedes System bietet zwei große Vorteile:
- Im Gegensatz zu kommerziellen Lösungen, die häufig ein eigenes proprietäres Format verwenden, liegt Ihr Backup in einem Open-Source-Format vor, das umfassend unterstützt und sehr gut dokumentiert wird. So haben Sie die volle Kontrolle über Ihre Daten. Es ist sehr einfach zu sehen, welche Dateien wann geändert wurden. Wenn Sie Ihren Verlauf abschneiden möchten, können Sie dies ebenfalls tun. Möchten Sie etwas aus Ihrer Geschichte auslöschen? Kein Problem. Das Abrufen einer Version Ihrer Datei ist so einfach wie jeder git-Befehl.
- So viele oder so wenige Spiegel, wie Sie möchten, und alle können angepasste Sicherungszeiten haben. Sie erhalten Ihren lokalen Spiegel, der nicht durch langsamen Internetverkehr belastet wird, und haben somit (1) die Möglichkeit, im Laufe des Tages häufiger Backups durchzuführen, und (2) eine schnelle Wiederherstellungszeit. (Häufige Backups sind ein großer Vorteil, da ich feststelle, dass ein Dokument meistens durch einen Benutzerfehler verloren geht. Ihr Kind überschreibt beispielsweise versehentlich ein Dokument, an dem es in den letzten 5 Stunden gearbeitet hat.) Remote Mirror, der den Vorteil des Datenschutzes im Falle einer lokalen Katastrophe oder eines Diebstahls bietet. Angenommen, Sie möchten, dass Ihre Remote-Spiegelung zu einem benutzerdefinierten Zeitpunkt gesichert wird, um Ihre Internetbandbreite zu schonen? Kein Problem.
Fazit: Ein Git-Backup gibt Ihnen unglaublich viel Kontrolle darüber, wie Ihre Backups ablaufen.
Ich habe dies auf meinem Windows-System konfiguriert. Der erste Schritt besteht darin, das lokale Git-Repo zu erstellen, auf das Sie alle Ihre lokalen Daten übertragen. Ich empfehle die Verwendung einer lokalen zweiten Festplatte, aber die Verwendung derselben Festplatte wird funktionieren (aber es wird erwartet, dass Sie diese an eine entfernte Stelle verschieben oder auf andere Weise verschrauben, wenn die Festplatte ausfällt.)
Sie müssen zunächst cygwin (mit rsync) und git für Windows installieren: http://git-scm.com/download/win
Als nächstes erstellen Sie Ihr lokales Git-Repo (nur einmal ausführen):
init-repo.bat:
@echo off
REM SCRIPT PURPOSE: CREATE YOUR LOCAL GIT-REPO (RUN ONLY ONCE)
REM Set where the git repository will be stored
SET GBKUP_LOCAL_MIRROR_HOME=E:\backup\mirror
REM Create the backup git repo.
SET GIT_PARAMS=--git-dir=%GBKUP_LOCAL_MIRROR_HOME%\.git --work-tree=%GBKUP_LOCAL_MIRROR_HOME%
mkdir %GBKUP_LOCAL_MIRROR_HOME%
git %GIT_PARAMS% init
git %GIT_PARAMS% config core.autocrlf false
git %GIT_PARAMS% config core.ignorecase false
git %GIT_PARAMS% config core.fileMode false
git %GIT_PARAMS% config user.email backup@yourComputerName
git %GIT_PARAMS% config user.name backup
REM add a remote to the git repo. Make sure you have set myRemoteServer in ~/.ssh/config
REM The path on the remote server will vary. Our remote server is a Windows machine running cygwin+ssh.
REM For better security, you could install gitolite on the remote server, and forbid any non-fast-forward merges, and thus stop a malicious user from overwriting your backups.
git %GIT_PARAMS% remote add origin myRemoteServer:/cygdrive/c/backup/yourComputerName.git
REM treat all files as binary; so you don't have to worry about autocrlf changing your line endings
SET ATTRIBUTES_FILE=%GBKUP_LOCAL_MIRROR_HOME%\.git\info\attributes
echo.>> %ATTRIBUTES_FILE%
echo *.gbkuptest text>> %ATTRIBUTES_FILE%
echo * binary>> %ATTRIBUTES_FILE%
REM compression is often a waste of time with binary files
echo * -delta>> %ATTRIBUTES_FILE%
REM You may need to get rid of windows new lines. We use cygwin's tool
C:\cygwin64\bin\dos2unix %ATTRIBUTES_FILE%
Als nächstes haben wir unseren Backup-Script-Wrapper, der regelmäßig von Windows Scheduler aufgerufen wird:
gbackup.vbs:
' A simple vbs wrapper to run your bat file in the background
Set oShell = CreateObject ("Wscript.Shell")
Dim strArgs
strArgs = "cmd /c C:\opt\gbackup\gbackup.bat"
oShell.Run strArgs, 0, false
Als nächstes haben wir das Backup-Skript selbst, das der Wrapper aufruft:
gbackup.bat:
@echo off
REM Set where the git repository will be stored
SET GBKUP_LOCAL_MIRROR_HOME=E:\backup\mirror
REM the user which runs the scheduler
SET GBKUP_RUN_AS_USER=yourWindowsUserName
REM exclude file
SET GBKUP_EXCLUDE_FILE=/cygdrive/c/opt/gbackup/exclude-from.txt
SET GBKUP_TMP_GIT_DIR_NAME=git-renamed
for /f "delims=" %%i in ('C:\cygwin64\bin\cygpath %GBKUP_LOCAL_MIRROR_HOME%') do set GBKUP_LOCAL_MIRROR_CYGWIN=%%i
REM rename any .git directories as they were (see below command)
for /r %GBKUP_LOCAL_MIRROR_HOME% %%i in (%GBKUP_TMP_GIT_DIR_NAME%) do ren "%%i" ".git" 2> nul
SET RSYNC_CMD_BASE=C:\cygwin64\bin\rsync -ahv --progress --delete --exclude-from %GBKUP_EXCLUDE_FILE%
REM rsync all needed directories to local mirror
%RSYNC_CMD_BASE% /cygdrive/c/dev %GBKUP_LOCAL_MIRROR_CYGWIN%
%RSYNC_CMD_BASE% /cygdrive/c/Users/asmith %GBKUP_LOCAL_MIRROR_CYGWIN%
%RSYNC_CMD_BASE% /cygdrive/c/Users/bsmith %GBKUP_LOCAL_MIRROR_CYGWIN%
cacls %GBKUP_LOCAL_MIRROR_HOME% /t /e /p %GBKUP_RUN_AS_USER%:f
REM rename any .git directories as git will ignore the entire directory, except the main one
for /r %GBKUP_LOCAL_MIRROR_HOME% %%i in (.git) do ren "%%i" "%GBKUP_TMP_GIT_DIR_NAME%" 2> nul
ren %GBKUP_LOCAL_MIRROR_HOME%\%GBKUP_TMP_GIT_DIR_NAME% .git
REM finally commit to git
SET GIT_PARAMS=--git-dir=%GBKUP_LOCAL_MIRROR_HOME%\.git --work-tree=%GBKUP_LOCAL_MIRROR_HOME%
SET BKUP_LOG_FILE=%TMP%\git-backup.log
SET TO_LOG=1^>^> %BKUP_LOG_FILE% 2^>^&1
echo ===========================BACKUP START=========================== %TO_LOG%
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a%%b)
echo %mydate%_%mytime% %TO_LOG%
echo updating git index, committing, and then pushing to remote %TO_LOG%
REM Caution: The --ignore-errors directive tells git to continue even if it can't access a file.
git %GIT_PARAMS% add -Av --ignore-errors %TO_LOG%
git %GIT_PARAMS% commit -m "backup" %TO_LOG%
git %GIT_PARAMS% push -vv --progress origin master %TO_LOG%
echo ===========================BACKUP END=========================== %TO_LOG%
Wir haben die Datei exclude-from.txt, in der wir alle zu ignorierenden Dateien ablegen:
exclude-from.txt:
target/
logs/
AppData/
Downloads/
trash/
temp/
.idea/
.m2/
.IntelliJIdea14/
OLD/
Searches/
Videos/
NTUSER.DAT*
ntuser.dat*
Sie müssen zu einem beliebigen Remote-Repository gehen und einen Initialisierungsschritt für dieses Repository ausführen. Sie können das Skript testen, indem Sie das Sicherungsskript ausführen. Wenn alles funktioniert, rufen Sie Windows Scheduler auf und richten Sie eine stündliche Sicherung auf die vbs-Datei. Danach haben Sie für jede Stunde einen Git-Verlauf Ihres Computers. Es ist äußerst praktisch - jeder löscht versehentlich einen Textabschnitt und vermisst ihn? Überprüfe einfach dein Git-Repository.