Saya menggunakan git sebagai cadangan untuk sistem Windows saya, dan ini sangat berguna. Di bagian bawah posting, saya menunjukkan skrip yang saya gunakan untuk mengkonfigurasi pada sistem Windows. Menggunakan git sebagai cadangan untuk sistem apa pun memberikan 2 keuntungan besar:
- Tidak seperti solusi komersial yang sering menggunakan format milik mereka sendiri, cadangan Anda dalam format open source yang didukung secara luas dan didokumentasikan dengan sangat baik. Ini memberi Anda kendali penuh atas data Anda. Sangat mudah untuk melihat file mana yang berubah dan kapan. Jika Anda ingin memotong riwayat Anda, Anda dapat melakukannya juga. Ingin menghapus sesuatu dari riwayat Anda? Tidak masalah. Mendapatkan versi file Anda kembali sesederhana perintah git.
- Sebanyak atau sesedikit cermin yang Anda inginkan, dan semua dapat memiliki waktu pencadangan khusus. Anda akan mendapatkan mirror lokal Anda, yang tidak terbebani oleh lalu lintas Internet yang lambat, dan dengan demikian memberi Anda (1) kemampuan untuk melakukan backup lebih sering sepanjang hari dan (2) waktu pemulihan yang cepat. (Pencadangan yang sering merupakan nilai tambah yang besar, karena saya menemukan waktu paling banyak saya kehilangan dokumen adalah karena kesalahan pengguna. Misalnya, anak Anda secara tidak sengaja menimpa dokumen yang sedang dikerjakannya selama 5 jam terakhir.) Tetapi Anda akan mendapatkan remote mirror, yang memberikan keuntungan perlindungan data jika terjadi bencana atau pencurian lokal. Dan misalkan Anda ingin membuat mirror jarak jauh Anda pada waktu yang disesuaikan untuk menghemat bandwidth internet Anda? Tidak masalah.
Intinya: Cadangan git memberi Anda kekuatan luar biasa dalam mengendalikan bagaimana cadangan Anda terjadi.
Saya mengkonfigurasi ini pada sistem Windows saya. Langkah pertama adalah membuat repo git lokal tempat Anda akan mengkomit semua data lokal Anda. Saya sarankan menggunakan hard drive lokal kedua, tetapi menggunakan harddrive yang sama akan bekerja untuk (tetapi diharapkan Anda akan mendorong ini di suatu tempat yang jauh, atau jika Anda gagal jika harddrive mati.)
Pertama-tama Anda harus menginstal cygwin (dengan rsync), dan juga menginstal git untuk Windows: http://git-scm.com/download/win
Selanjutnya, buat repo git lokal Anda (hanya berjalan sekali):
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%
Selanjutnya, kami memiliki pembungkus skrip cadangan kami, yang akan dipanggil secara teratur oleh Penjadwal Windows:
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
Selanjutnya, kami memiliki skrip cadangan sendiri yang dipanggil oleh bungkus:
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%
Kami memiliki file exclude-from.txt, tempat kami meletakkan semua file untuk diabaikan:
kecualikan-dari.txt:
target/
logs/
AppData/
Downloads/
trash/
temp/
.idea/
.m2/
.IntelliJIdea14/
OLD/
Searches/
Videos/
NTUSER.DAT*
ntuser.dat*
Anda harus pergi ke repo jarak jauh dan melakukan 'git init --bare' pada mereka. Anda dapat menguji skrip dengan menjalankan skrip cadangan. Dengan asumsi semuanya berfungsi, buka Penjadwal Windows dan arahkan cadangan per jam ke file vbs. Setelah itu, Anda akan memiliki riwayat git komputer Anda setiap jam. Ini sangat nyaman - setiap bagian teks terhapus secara tidak sengaja dan ketinggalan? Cukup periksa repositori git Anda.