Git'i Windows sistemim için yedek olarak kullanıyorum ve inanılmaz derecede faydalı oldu. Gönderinin altında, Windows sisteminde yapılandırmak için kullandığım komut dosyalarını gösteririm. Git'i herhangi bir sistem için yedekleme olarak kullanmak 2 büyük avantaj sağlar:
- Ticari çözümlerin çoğu zaman kendi tescilli formatlarını kullanmasından farklı olarak, yedeklemeniz yaygın olarak desteklenen ve çok iyi belgelenmiş bir açık kaynak biçimindedir. Bu, verilerinizi tam olarak kontrol etmenizi sağlar. Hangi dosyaların ne zaman değiştiğini görmek çok kolaydır. Tarihinizi kısaltmak istiyorsanız, bunu da yapabilirsiniz. Tarihinizden bir şey silmek mi istiyorsunuz? Sorun değil. Dosyanızın bir sürümünü geri almak, herhangi bir git komutu kadar basittir.
- İstediğiniz kadar çok veya az ayna, ve hepsinin özelleştirilmiş yedekleme süreleri olabilir. Yavaş İnternet trafiğinden etkilenmeyen yerel yansımayı elde edersiniz ve böylece (1) gün boyunca daha sık yedekleme yapma imkanı sunar ve (2) hızlı bir restorasyon süresi sağlar. (Sık yedeklemeler çok büyük bir artıdır, çünkü bir belgeyi en çok kaybettiğim zamanı kullanıcı hatalarına göre buluyorum. Örneğin, çocuğunuz yanlışlıkla son 5 saattir üzerinde çalıştığı bir belgenin üzerine yazar.) Yerel bir felaket veya hırsızlık durumunda veri korumanın avantajını sağlayan uzak ayna. Ve uzaktaki aynanızın İnternet bant genişliğinden tasarruf etmek için özelleştirilmiş bir zamanda yedeklenmesini istediğinizi varsayalım. Sorun değil.
Alt satır: Git yedekleme, yedekleme işleminizin nasıl yapıldığını kontrol etme konusunda size inanılmaz miktarda güç sağlar.
Bunu Windows sistemimde yapılandırdım. İlk adım, tüm yerel verilerinizi taahhüt edeceğiniz yerel git repoyu oluşturmaktır. Yerel ikinci bir sabit sürücü kullanmanızı öneririm, ancak aynı sabit sürücüyü kullanmak işe yarayacaktır (ancak bunu sabit bir yere itmeniz ya da sabit sürücü ölürse başka bir şekilde vidalanmanız beklenir).
Öncelikle cygwin'i (rsync ile) kurmanız ve ayrıca Windows için git'i yüklemeniz gerekir: http://git-scm.com/download/win
Ardından, yerel git deponuzu oluşturun (yalnızca bir kez çalıştırın):
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%
Sonra, düzenli olarak Windows Zamanlayıcı tarafından çağrılacak olan yedekleme komut dosyası sarmalayıcımız var:
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
Daha sonra, sarmalayıcının çağırdığı yedekleme komut dosyasının kendisi var:
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%
Bütün dosyaları yoksaymaya koyduğumuz exclude-from.txt dosyasına sahibiz:
dışlamak-from.txt:
target/
logs/
AppData/
Downloads/
trash/
temp/
.idea/
.m2/
.IntelliJIdea14/
OLD/
Searches/
Videos/
NTUSER.DAT*
ntuser.dat*
Herhangi bir uzak depoya gitmeniz ve üzerinde 'git init --bare' yapmanız gerekecek. Komut dosyasını yedekleme komut dosyasını çalıştırarak test edebilirsiniz. Her şeyin işe yaradığını varsayarak, Windows Zamanlayıcı'ya gidin ve vbs dosyasına doğru saatlik bir yedekleme yapın. Bundan sonra, her saat başı bilgisayarınızın gitme geçmişine sahip olacaksınız. Son derece kullanışlıdır - her yanlışlıkla bir metin bölümünü silip kaçırır mı? Git deponuzu kontrol edin.