2009-09-09 1 views
20

아마 일반적으로 .gits와 자식 저장소의 역할에 대한 이해의 나의 부족에 따라 있지만이 질문 :에 rsync .git 디렉토리

는 내가 기계 사이에 git init으로 만든 콘텐츠가있는 디렉토리를 rsync는 수 ?

내 노트북에 저장소가 있으며 원격 호스트에서 scp/rsync를 가져 오는 유일한 방법은 다시 다운로드 할 수있는 방법입니다. 이 호스트간에 전체 디렉토리 구조를 동기화 할 수 있습니까?

답변

8

예, 가능합니다. IIRC, 자식은 상대적인 접근 방식을 사용합니다. 따라서 다른 컴퓨터와 동기화하는 것이 안전합니다.

+1

그것은주의와 (가능하다 rsync 중에 저장소에서 작업을하지 않으면 파일 시스템 기반의 원격 기능과 대체 기능이 작동하지 않을 수 있습니다. –

1

예, .git 디렉토리에 rsync이 가능하며 저장소가 완전히 복제됩니다.

4

그래, 할 수는 있지만, this thread에서 설명한 것처럼 맨손 저장소를 사용해야합니다.

$ git clone --bare ./projet projet.git 
$ rsync -a --stats --delete ./projet.git/ votre.serveur:~/projets/projet.git/ 

참고 : 6+ 년 후, 공식적으로 지원 중단 완전히 자식 rsync를 프로토콜를 제거합니다 (3 월 2016) 2.8 이눔 아!

commit 0d0bac6 (2016 년 1 월 30 일) : Jeff King (peff)을 참조하십시오.

그것은 소스 저장소가 오랜 시간 동안 참조를 포장했을 때 "git clone"rsync를 통해 전송이 깨진 된 밝혀, 그리고 아무도 눈치 (commit 9f03176Junio C Hamano -- gitster -- 17 개 년 2 월 2016 합병) 그것에 대해 불평하지 않았습니다.

에는 모든 세부 사항이 있습니다.

+2

벌거 벗은 저장소는 해당 저장소로 밀어 넣을 때만 필요합니다. 비트 때마다 레포를 복사하는 경우, 당신은 단지 전체 레포로 할 수 있습니다. – Ikke

+2

전체 저장소에도 rsync를 사용할 수 있습니다. rsync를 사용하면 베어 레포지토리에 특별한 것은 없습니다. –

+0

@Ikke : 사실, 나는 보통 그 종류의 작업을 그 작업의 의도와 함께 수행합니다. – VonC

6

rsync를 아무런 문제없이 실행할 수 있습니다. 그러나 일부 원격 기능이 로컬 시스템 (즉,/etc/hosts에만 저장 됨)으로 선언 된 경우 분명히 작동하지 않습니다.

그러나 콘텐츠를 동기화하기 위해 git 자체를 사용하지 않는 이유가 무엇입니까?

+0

내가 리모트 서버가 나던만큼 움직이지 못한다는 것을 알아 냈다. – svrist

+1

SSH를 통해 푸시를 사용하고 싶다면 서버에 자식을 설치해야한다. (하지만 로컬로 설치하고 사용하면된다. '-receive-pack' 옵션을'git-push'에, 그리고 비슷한 옵션을 fetch/pull/clone에 사용합니다). HTTP를 통해 푸시하려면 WebDAV가있는 웹 서버 만 필요하며 푸시 액세스가 가능하도록 구성해야합니다 (서버에 git이 필요하지 않음). –

27

몇 가지 가능성이 있습니다

  • 그냥 rsync.git 저장소 (또는 작업 디렉토리와 함께도 전체 저장소), 보내고 rsync 동안 당신이 저장소에서 모든 활동이없는 것을 제공 할 수 있습니다 (rsync:// 프로토콜을 사용하는 것과 동일한 면책 조항).

  • 당신은 복제 또는 (저장소 URL/위치는 다음과 같습니다 여기서 " rsync://host.xz/path/to/repo.git/")를 되지 rsync 프로토콜을 사용하여 가져올 수 있습니다. 저장소에 활동이있는 경우 손상된 복제본을 가져 오거나 가져올 수 있기 때문에이 프로토콜은 더 이상 사용되지 않습니다.

    또한 내가들은 바 있듯이 2007 년 이래로 압축 된 심판에서 제대로 작동하지 않았으며 최근까지 아무도 눈치 채지 못했습니다. Git 2.8에서는 사라질 것이다.

  • 또는 git bundle, rsync 또는 scp을 다른 컴퓨터에 생성 한 다음 번들에서 복제하거나 가져올 수 있습니다. 백업 .git에 rsync를 사용

+1

아래 [내 대답은] (http://stackoverflow.com/a/1398041/6309)에서 git'rsync : //'프로토콜은 git 2.8에서만 사라집니다 (2016 년 3 월, 10+ 이후 "deprecated"로 선언되기 시작했습니다!) – VonC

0

은 가능하지만, (적어도 나 자신에 대한) 하나의 캐치 으로 업데이트 할 수 없습니다. 다음 번에 다시 rsync하려고하면 방대한 객체 이름 바꾸기가 발생하고 그 파일을 삭제할 수 없습니다 .. rsync 또는 Linux 시스템에 익숙하지 않아 rsync 전에 .git 백업을 제거합니다. 이다

: 내가 아는

> chmod -R 777 /path/of/your/backup/.git 
> rm -fr /path/of/your/backup/.git 
> rsync /path/of/your/origin/.git /path/of/your/backup/.git 

이 매우 과세와 바보입니다 ..이 할 수있는 더 나은 방법이있다 알려 주시기 바랍니다 ..