2014-01-21 3 views
1

현재 Jon Loeliger가 책 Version Control with Git을 읽었습니다.GIT : 원격 갱신, 하드 링크와 파일의 차이 : //

그것은 하드 링크 사이의 2의 미묘한 차이에 대해 이야기

file://가 :

당신이 본 것처럼

, 힘내 URL의 가장 단순한 형태는 로컬 파일 - 시스템에서 저장소를 의미, 그것을 사실 물리적 파일 시스템 또는 가상 파일 시스템이 NFS (Network File System) 을 통해 로컬로 마운트되었습니다.

/path/to/repo.git

file:///path/to/repo.git

이 두 가지 형식이 본질적으로 동일하지만, 둘 사이에 미묘하지만 중요한 구별이 두 순열이 있습니다. 전자는 파일 시스템 내의 하드 링크를 사용하여 직접 과 똑같은 객체를 현재 저장소와 원격 저장소간에 공유합니다. 후자의 은 개체를 직접 공유하는 대신 복사합니다. 공유 저장소와 관련된 문제를 피하려면 file:// 양식을 사용하는 것이 좋습니다. 처음에는

, 내 복제의 repo ./git/object 폴더가 원격 .git/object에 대한 링크라고 생각 못했지만, 나는 그렇지 않은 것 같아요.

누군가 설명 할 수 있습니까?

+1

http://stackoverflow.com/a/11339193/251311 – zerkms

답변

1

git clone은 모두 대상 저장소의 새 사본 (동일한 복제본)을 작성하며 이전 저장소는 원격 저장소로 추가됩니다. 그것들은 두 개의 분리 된 저장소입니다.

차이점은 구문을 사용하는 경우

git clone /path/to/repo.git 

자식이 둘의 repos 동일 1. 2.하지 예상을있는 파일에 대한 파일 시스템의 하드 링크를 사용하여 공간을 절약하기 위해 노력할 것입니다 점이다 바꾸다. 동일하고 변경되지 않는 유일한 파일 (복제물 제외)은 복제 생성 당시의 .git/objects에있는 파일입니다.

하드 링크는 파일의 내용을 다른 위치에서 여러 번 참조하지만 실제 내용을 한 번만 저장하므로 공간을 절약합니다. (Git 자체는 실제로 객체 데이터베이스에서 비슷한 메커니즘을 사용합니다. 두 번 이상 고유 한 파일의 내용을 저장하지 않습니다.)

git이 .git/objects에있는 파일도 새 사본으로 만들도록하려면 , 구문을 사용하여

git clone file:///path/to/repo.git 

이렇게하면됩니다.