2009-12-11 3 views
17

내게 쉽게 들러서, 나는 커맨드 라인 맨이 아닙니다 ... 우리는 Git를 windows 네트워크 (msysgit & GitExtensions 사용) 내에 설치했습니다. 우리는 각각 자신 만의 저장소를 가지고 있으며 우리 서버 중 하나에서 원격 저장소로 이동합니다. 문제 없다.백업용 외장 드라이브에 GIT 클론 복제

서버에서 예약 된 작업을 설정하려고합니다. C 드라이브에서 외부 드라이브 (F에 있음)에 저장소가 복제됩니다.이 작업을 수행하는 데 약간의 어려움이 있습니다. GIT bash에서이 작업을 비교적 쉽게 할 수는 있지만, 이것을 배치 파일에 저장하는 방법을 잘 모르겠습니다.

는 내가 지금까지 가지고 : 중 ... 나는 야

GIT CLONE C:\GIT\Repo1\ 

그러나이 작동하지 않습니다

rmdir F:\GitClone /s /q 
mkdir F:\GitClone 
mkdir F:\GitClone\Repo1 
CD /D F:\GitClone\Repo1\ 
GIT CLONE /c/GIT/Repo1/ 

나는 또한 마지막 줄에 대해 다음을 시도했습니다 약간의 어려움과 약간의 도움을 주실 것입니다. C 드라이브는 우리의 벌거 벗은 저장소를 포함하고, F 드라이브는 우리가 매일 스왑 우리의 외장 드라이브 ... 매우 유용했을 여기


여러 답변, 감사 서비스를 제공합니다. 내 결과는 아마 이들의 조합이므로 bash 스크립트를 실행하는 방법과 끌어 오기/푸시를 스크립팅하는 방법을 지적 할 수 있습니다.

다양한 드라이브를 스왑 할 때 (예 : 저장소가 외장 드라이브에 존재하지 않는 경우 리포지토리를 복제 한 다음 다른 방법으로 차이점 만 가져 오기) 행복 할 때 함께 사용해야합니다. 할 수있다. 모두에게 감사드립니다.

답변

26

그 자식 자체를 참고하는 것은 우수 필요한 변경 사항 만 복제 된 저장소에 복사합니다.

정기적으로 업데이트되는 사본을 보관하려면 다음을 수행하십시오. 백업 저장소로 베어 리지 저장소를 만든 다음 모든 새 변경 사항을 반복적으로 푸시합니다 (이전 백업을 삭제할 필요 없음).

좋아,의 그래서 당신의 repo

$ cd /tmp 
$ mkdir myrepo && cd myrepo 
$ touch hi && git add . && git commit -m "bla" 

를 작성하여 시작하자, 이것은 당신의 저장소입니다.

$ cd /tmp/myrepo 
$ git remote add backup /tmp/backup 
$ git config remote.backup.mirror true 

그런 다음 백업에 모든 것을 복사 ...의 정기적 인 백업에 대한 귀하의 repo을 설정할 수 있습니다, 지금

$ cd /tmp 
$ mkdir backup && cd backup 
$ git --bare init 
Initialized empty Git repository in /tmp/backup/ 

: 이제 우리는 클론을 만들

$ git push backup 
Counting objects: 3, done. 
Writing objects: 100% (3/3), 206 bytes, done. 
Total 3 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (3/3), done. 
To /tmp/backup 
* °new branch§  master -> master 

그리고 그것은 작동하는지 확인 :

$ cd /tmp/backup 
$ git log 
commit d027b125166ff3a5be2d7f7416893a012f218f82 
Author: Niko Schwarz <niko.schwarzàgmail.com> 
Date: Fri Dec 11 12:24:03 2009 +0100 

    hi 

tad 너 세트있어. 따라서 스크립트가 수행해야하는 작업은 git push backup입니다. 이전 백업을 반복적으로 버릴 필요가 없습니다.

대안은 당신이 rsync을 가질 수 있습니다 당신을 위해 모든 것을 할 :

rsync -av rsync://rsync.samba.org/ftp/unpacked/rsync /dest/dir/ 

사용자 Offby가 추가 : 버전 1.5.4는 "자식 원격 추가"이후에 "--mirror"옵션을합니다, "git config remote.origin.mirror true"와 --mirror를 "git push"로 전달하지 않아도됩니다.

+0

왜 맨 레포에서 rsyncing하고 있습니까? 체크 아웃 된 파일이 없습니다. --exclude = .git /이면, 당신은 아무것도 복사하지 않을 것입니다. 또한 리포지토리가 백업으로 푸시되는 이유는 무엇입니까? 백업이 레포에서 풀리지 않는 이유는 무엇입니까? – Pod

+0

저는 두 가지 다른 방법을 제안하고 있습니다 : rsyncing, 또는 복사를 위해 베어 레포로 복사하는 것입니다. 그리고 내 마음에, 그것을 당기는 것보다 백업을 밀는 것이 더 자연 스럽습니다. – nes1983

+0

아, 이제는 무슨 뜻인지 알 겠어, 미안, 제외 된 진술이 실수로 미끄러졌습니다. – nes1983

4

당신은 언제나 윈도우 측면에서

어쨌든, bash.exe mybashbackupscript.sh를 예약 할 수 있습니다 :

rmdir F:\GitClone /s /q 
mkdir -p F:\GitClone\Repo1 
copy c:\GIT\Repo1\.git F:\GitClone\Repo1\.git 

git clone

정말보다 애호가 아무것도하지 않습니다.

편집 : 누군가 다른 사람이 지적했듯이 새로운 백업 저장소를 만든 다음 가져 오거나 가져 오는 것이 가장 좋습니다. 당신은 git 명령은

+0

좀 분에서 내 생각이다. – Paddy

4

때문에 .git : 어떤 accesing 문제를 방지 할 수 있습니다 약간의 배치 파일에서 모든 자식 명령을 실행하는 call를 사용할 필요가 이상한 :

rmdir F:\GitClone /s /q 
mkdir F:\GitClone 
CD /D F:\GitClone\ 
call GIT CLONE c/GIT/Repo1/ 
+0

이것은 제 문제였습니다 –

1

미안 해요, 내가 할 수있는 게시물에 댓글을 달지는 못했지만 .git 복사에 대해서도 생각하고 있었지만 .git 파일을 가져 오는 동안 복사하면 어떻게됩니까?

어쨌든 델타를 수시로 가져올 수있는 이유는 무엇입니까? 백업

가 초기화 : (F의 : 빈 \ GitClone \ Repo1)

git init 
git add remote origin /c/GIT/Repo1 

는 그런 다음 "델타 백업 스크립트는"다만 것 :

cd /f/GitClone/Repo1 
git fetch origin 
0

왜 항상 복제본을 삭제합니까? 파일을 복사하기 만하면 기존 저장소를 복제하는 것이 무엇입니까?

외장 드라이브 (git clone)를 사용하여 repo를 만든 다음 정기적으로 git pull을 실행하십시오. 해결

+0

이 드라이브는 매일 바꿔 치기를하고 있습니다 - 나는 그것이 이미 생성되어 있는지 확인하고자합니다. – Paddy

0

문제 :

h: (flash drive) 
cd \ 
mkdir YourProject 
cd YourProject 
git init 
git remote add origin [email protected]:user/YourProject.git 
git remote add local C:\w\YourProject 
git pull origin master 
git push local master