Windows 시스템의 백업으로 git을 사용하는데 매우 유용했습니다. 게시물 맨 아래에는 Windows 시스템에서 구성하는 데 사용하는 스크립트가 표시됩니다. 모든 시스템의 백업으로 git을 사용하면 두 가지 큰 장점이 있습니다.
- 상용 솔루션은 종종 자체 소유 형식을 사용하는 것과 달리 백업은 널리 지원되며 문서화가 잘 된 오픈 소스 형식입니다. 이를 통해 데이터를 완벽하게 제어 할 수 있습니다. 어떤 파일이 언제 변경되었는지 쉽게 알 수 있습니다. 당신의 역사를 자르고 싶다면 그렇게 할 수도 있습니다. 당신의 역사에서 무언가를 없애고 싶습니까? 문제 없어요. 파일 버전을 되 돌리는 것은 git 명령만큼 간단합니다.
- 원하는만큼의 미러 수만큼 미러를 구성 할 수 있으며 모두 백업 시간을 사용자 지정할 수 있습니다. 인터넷 트래픽이 느려지면 로컬 미러가 생겨서 (1) 하루 종일 더 자주 백업 할 수있는 능력과 (2) 빠른 복원 시간을 제공합니다. (문서를 잃어버린 시간이 사용자 오류에 의한 것임을 알기 때문에 빈번한 백업은 큰 장점입니다. 예를 들어, 자녀가 실수로 지난 5 시간 동안 작업했던 문서를 덮어 씁니다.) 원격 미러 : 로컬 재난 또는 도난시 데이터 보호의 이점을 제공합니다. 인터넷 대역폭을 절약하기 위해 사용자 정의 된 시간에 원격 미러 백업을 원한다고 가정 해보십시오. 문제 없어요.
결론 : git 백업은 백업 수행 방식을 제어하는 데 엄청난 양의 파워를 제공합니다.
내 Windows 시스템에서 이것을 구성했습니다. 첫 번째 단계는 모든 로컬 데이터를 커밋 할 로컬 git repo를 만드는 것입니다. 로컬 보조 하드 드라이브를 사용하는 것이 좋지만 동일한 하드 드라이브를 사용하면 효과가 있습니다 (그러나 원격 드라이브를 어딘가에 밀어 넣거나 하드 드라이브가 죽으면 나사를 조일 것으로 예상됩니다).
먼저 cygwin (rsync 포함)을 설치하고 Windows 용 git도 설치해야합니다. http://git-scm.com/download/win
다음으로 로컬 git repo를 작성하십시오 (한 번만 실행).
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%
다음으로 백업 스케줄러가 정기적으로 호출하는 백업 스크립트 래퍼가 있습니다.
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
다음으로 래퍼가 호출하는 백업 스크립트 자체가 있습니다.
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%
exclude-from.txt 파일이 있습니다. 여기서 모든 파일을 무시합니다.
exclude-from.txt :
target/
logs/
AppData/
Downloads/
trash/
temp/
.idea/
.m2/
.IntelliJIdea14/
OLD/
Searches/
Videos/
NTUSER.DAT*
ntuser.dat*
원격 저장소로 가서 'git init --bare'를 수행해야합니다. 백업 스크립트를 실행하여 스크립트를 테스트 할 수 있습니다. 모든 것이 작동한다고 가정하면 Windows 스케줄러로 이동하여 시간별 백업을 vbs 파일로 지정하십시오. 그 후, 당신은 매 시간마다 컴퓨터의 자식 역사를 갖게됩니다. 매우 편리합니다. 우연히 텍스트 섹션을 삭제하고 놓치나요? git 저장소를 확인하십시오.