Tôi sử dụng git như một bản sao lưu cho hệ thống Windows của mình và nó cực kỳ hữu ích. Ở dưới cùng của bài viết, tôi hiển thị các tập lệnh tôi sử dụng để cấu hình trên hệ thống Windows. Sử dụng git làm bản sao lưu cho bất kỳ hệ thống nào cũng cung cấp 2 lợi thế lớn:
- Không giống như các giải pháp thương mại thường sử dụng định dạng độc quyền của riêng họ, bản sao lưu của bạn ở định dạng nguồn mở được hỗ trợ rộng rãi và được ghi chép rất tốt. Điều này cho phép bạn kiểm soát hoàn toàn dữ liệu của bạn. Rất dễ dàng để xem tập tin nào đã thay đổi và khi nào. Nếu bạn muốn cắt ngắn lịch sử của mình, bạn cũng có thể làm điều đó. Bạn muốn xóa sạch một cái gì đó từ lịch sử của bạn? Không vấn đề gì. Lấy lại một phiên bản của tệp của bạn cũng đơn giản như bất kỳ lệnh git nào.
- Nhiều hoặc ít gương như bạn muốn, và tất cả đều có thể có thời gian sao lưu tùy chỉnh. Bạn sẽ có được tấm gương cục bộ, không bị gánh nặng bởi lưu lượng truy cập Internet chậm và do đó cung cấp cho bạn (1) khả năng sao lưu thường xuyên hơn trong suốt cả ngày và (2) thời gian phục hồi nhanh chóng. (Sao lưu thường xuyên là một điểm cộng rất lớn, bởi vì tôi thấy rằng tôi mất tài liệu nhiều nhất là do lỗi người dùng. Ví dụ: con bạn vô tình ghi đè lên một tài liệu mà nó đang làm việc trong 5 giờ qua.) Nhưng bạn sẽ nhận được gương từ xa, mang lại lợi thế bảo vệ dữ liệu trong trường hợp xảy ra thảm họa hoặc trộm cắp cục bộ. Và giả sử bạn muốn nhân bản từ xa sao lưu vào thời gian tùy chỉnh để tiết kiệm băng thông Internet của bạn? Không vấn đề gì.
Tóm lại: Một bản sao lưu git cung cấp cho bạn sức mạnh đáng kinh ngạc trong việc kiểm soát cách thức sao lưu của bạn xảy ra.
Tôi đã cấu hình cái này trên hệ thống Windows của tôi. Bước đầu tiên là tạo repo git cục bộ nơi bạn sẽ cam kết tất cả dữ liệu cục bộ của mình. Tôi khuyên bạn nên sử dụng ổ cứng thứ hai cục bộ, nhưng sử dụng cùng một ổ cứng sẽ hoạt động (nhưng dự kiến bạn sẽ đẩy cái này ở một nơi nào đó từ xa, hoặc nếu không thì bị hỏng nếu ổ cứng chết.)
Trước tiên, bạn cần cài đặt cygwin (với rsync) và cài đặt git cho Windows: http://git-scm.com/doad/win
Tiếp theo, tạo repo git cục bộ của bạn (chỉ chạy một lầ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%
Tiếp theo, chúng tôi có trình bao bọc kịch bản sao lưu, sẽ được Windows Lập lịch gọi thường xuyên:
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
Tiếp theo, chúng ta có tập lệnh sao lưu mà trình bao bọc gọi:
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%
Chúng tôi có tệp loại trừ-from.txt, nơi chúng tôi đặt tất cả các tệp để bỏ qua:
loại trừ-from.txt:
target/
logs/
AppData/
Downloads/
trash/
temp/
.idea/
.m2/
.IntelliJIdea14/
OLD/
Searches/
Videos/
NTUSER.DAT*
ntuser.dat*
Bạn sẽ cần phải đi đến bất kỳ repos từ xa nào và thực hiện một 'git init --bare' trên chúng. Bạn có thể kiểm tra tập lệnh bằng cách thực thi tập lệnh sao lưu. Giả sử mọi thứ hoạt động, hãy truy cập Windows Lập lịch và chỉ một bản sao lưu hàng giờ về phía tệp vbs. Sau đó, bạn sẽ có một lịch sử git của máy tính của bạn mỗi giờ. Nó cực kỳ tiện lợi - mỗi lần vô tình xóa một phần văn bản và bỏ lỡ nó? Chỉ cần kiểm tra kho git của bạn.