2010-06-06 4 views
9

때때로 우리 프로젝트 트리는 jpg, png, doc, xls 또는 pdf와 같은 바이너리 파일을 가질 수 있습니다. 바이너리 파일의 일부만 변경하면 GIT, Mercurial, SVN 또는 다른 도구를 사용하면 좋은 작업을 수행 할 수 있습니까? 사양은 .DOC로 작성하고 저장소의 일부인 경우프로젝트 트리에 바이너리 파일이 있으면 GIT, Mercurial, SVN 또는 다른 버전 제어 도구가 제대로 작동합니까?

예를 들어, 다음은 4메가바이트이며, 100 배 그러나 단지 1 개 또는 2 줄을 편집하고, 한 해 동안 100 배에이 옵션을 선택하면 400MB입니다.

100 개의 .doc 및 .xls 파일 인 경우 관리가 쉬운 크기가 아니라 40GB입니다.

저는 GIT와 Mercurial을 시도해 보았습니다. 한 줄이 .doc 또는 .pdf로 변경 되어도 큰 크기의 데이터를 추가하는 것으로 보입니다. GIT 또는 Mercurial 또는 SVN 내부에서 다른 방법으로 작업 할 수 있습니까?

답변

13

이하로 살 행복, 버전 관리 시스템은 텍스트 파일로 잘 작동합니다. 전체 병합/충돌 개념은 실제로 소스 코드를 기반으로합니다. 그러나 SVN 바이너리 파일에 대한 꽤 잘 작동합니다. (우리는 버전 CAD 도면에 사용합니다.)

파일 잠금 (svn : needs-lock)은 공통 바이너리 파일에서 여러 사람이 작업 할 때 필연적으로 필요하다는 것을 지적합니다. 파일 잠금이 없으면 한 번에 2 명이 이진 파일로 작업 할 수 있습니다. 누군가가 먼저 변경 사항을 커밋합니다. 추측하지 못한 사람에게 어떤 일이 일어나는 지 짐작하십시오. 그들이 한 바이너리/비길 수없는 모든 일은 효과적으로 사라집니다. 파일 잠금은 파일에 대한 작업을 직렬화합니다. 버전 제어 시스템의 "동시"액세스 기능을 잃어 버리지 만 커밋 로그, 이전 버전으로의 롤백 등의 이점은 여전히 ​​있습니다.

TortoieSVN 클라이언트는 MS Word의 내장 병합 도구를 사용하여 doc/docx 파일을 diff합니다. 또한 파일 확장자를 기반으로 대체 diff 도구를 지정할 수 있도록 해주는 구성 옵션이 있습니다. (아무도 우리 CAD 패키지를위한 diff 도구를 만든 사람은 아무도 없습니다.)

Git 또는 Hg와 같은 현재 세대의 DVCS는 바이너리 파일을 빨아들이는 경향이 있습니다. 그들은 파일 잠금을위한 어떤 종류의 메커니즘도 가지고 있지 않습니다.

+1

svn의 경우 +1 : 이진 파일의 needs-lock – JeremyP

3

mercurial wiki page about Binary files을 참조하십시오. 주요 문제는 doc 및 다른 사람과 같은 파일의 사소한 변경조차 파일 구조의 큰 변화를 유발한다는 것입니다 (부분적으로는 압축 됨).

따라서 버전 제어 시스템에서 이러한 파일을 처리하는 좋은 방법을 찾을 수 없다고 생각합니다.

+1

이것은 유효한 점입니다. SCM이 차이를 감지 할 가능성이 더 많아지기 때문에 Word, Excel 및 Openoffice를 기본적으로 "부풀린"XML 기반 형식으로 저장하도록 구성하는 것이 좋습니다. –

+1

@Peter Tillemans : 적어도'git'을 사용하면 커밋하기 전에 XML 데이터에서'tidy'를 실행하는 훅을 설정할 수 있습니다. 이것은 diff를 줄이는 기회를 증가시킬 수 있습니다. 창문 아래에서'깔끔한 '것을 얻기 위해서는'cygwin'을 설치해야 할 수도 있습니다. 이것은 또한 MS 형식이 '깔끔한'후에도 읽을 수있을 정도로 일관성이 있다고 가정합니다. – intuited

5

이진 diff 도구가 있지만 이미지의 한 픽셀 변경이나 Word 문서의 한 문자 변경이 파일의 한 바이트 변경에 해당하지 않으므로 많은 도움이되지 않습니다. , 압축으로 인해. 따라서 그러한 이진 데이터를 "훌륭하게"처리하는 것은 불가능합니다.

이러한 문서를 커밋하려면 PDF 대신 DOC, TeX 대신 RTF를 사용하는 것이 좋습니다. 버전 관리 시스템에서 압축을 사용하여 내부 리포지토리를 압축하는 경우이 방법이 잘 작동합니다. 예를 들어, Git에서

새로 추가 된 개체는 zlib 압축을 사용하여 전체적으로 저장됩니다.

편집 : 난 그냥 심지어 RTF가 끔찍 있습니다 싶었지만, DOC만큼 끔찍한 없습니다. 귀하의 문서에 대해 TXT 또는 TeX로 전환 할 수 있다면 가장 좋을 것입니다.

+0

Postscript는 TeX의 또 다른 대안입니다. 다른 답변에서 언급했듯이 Word는 XML 형식의 파일도 저장할 수 있습니다. –

3

전 Mac, Linux 및 Windows 컴퓨터간에 git을 사용하여 내 문서를 동기화했습니다. Windows에서 2GB 파일 제한을 피하기 위해 한 번의 재 설계가 필요했습니다. 총 3 기의 저장소에서 약 7Gb이며 정기적으로 동기화됩니다. 특정 시점에서 나는 어딘가에 인터넷상의 호스트 된 서버에 원격 복사본을 가지고 있었다.

큰 크기가 많이 방해하지 않도록 이러한 repos를 복제 할 필요가 거의 없습니다. 또한 .git이 크게 증가하지 않고 체크 아웃 된 문서, pdfs, 엑셀 시트의 크기의 40-60 % 정도를 유지합니다.

pdf 파일의 한 줄을 변경하면 서식 효과가 리플을 통해 파일에서 많이 변경됩니다. 마찬가지로 XLS 파일에서 셀을 변경하면 많은 다른 셀을 변경할 수 있습니다.

그러나, 버전 제어에서 문서를 가지고 있지의 대안에 비해, 나는 별의 압축 비율 일반적으로

1

IMHO와 같은 문서를 관리하려면 SCM을 사용하지 말아야합니다. Alfresco와 같은 전용 도구를 사용해야합니다 (문서 관리를위한 도구가 많이 있습니다).

관련 문제