git은 바이너리 파일에 적합합니까?
압축되지 않은 많은 파일이 수정되고 많은 압축 파일이 수정되지 않았거나 거의 수정되지 않은 경우 git이 잘 처리할까요? 예를 들어 중간을 삽입하거나 제거하고 끝 부분에 데이터를 삽입하면 텍스트와 마찬가지로 인식됩니까?
git이 바이너리 파일에 적합하지 않은 경우 어떤 도구를 고려할 수 있습니까?
git은 바이너리 파일에 적합합니까?
압축되지 않은 많은 파일이 수정되고 많은 압축 파일이 수정되지 않았거나 거의 수정되지 않은 경우 git이 잘 처리할까요? 예를 들어 중간을 삽입하거나 제거하고 끝 부분에 데이터를 삽입하면 텍스트와 마찬가지로 인식됩니까?
git이 바이너리 파일에 적합하지 않은 경우 어떤 도구를 고려할 수 있습니까?
답변:
기본적으로 git은 바이너리 파일을 색인에 쉽게 추가 할 수 있으며 압축 할 수없는 대용량 파일을 자주 업데이트하지 않는 한 효율적인 방법으로 저장할 수 있습니다.
문제는 git이 diff 및 병합을 생성해야 할 때 시작됩니다. git은 의미있는 diff를 생성하거나 이진 파일을 합리적 일 수있는 방식으로 병합 할 수 없습니다. 따라서 바이너리 파일 변경과 관련된 모든 병합, 리베이스 또는 체리 픽에는 해당 바이너리 파일에 대한 수동 충돌 해결 작업이 포함됩니다.
이진 파일 변경이 병합, 리베이스, 체리 픽과 관련된 일반적인 git 워크 플로에서 발생하는 추가 수동 작업을 수행 할 수있을만큼 드물지 여부를 결정해야합니다.
git diff --binary는 바이너리 파일을 패치 할 수 있습니다.
다른 답변 외에도.
소위 이진 diff 형식을 사용하여 이진 파일에 diff를 보낼 수 있습니다 . 사람이 읽을 수 없으며 저장소에 정확한 사전 이미지가있는 경우에만 적용 할 수 있습니다 .
예 :
diff --git a/gitweb/git-favicon.png b/gitweb/git-favicon.png
index de637c0608090162a6ce6b51d5f9bfe512cf8bcf..aae35a70e70351fe6dcb3e905e2e388cf0cb0ac3 100
GIT binary patch
delta 85
zcmZ3&SUf?+pEJNG#Pt9J149GD|NsBH{?u>)*{Yr{jv*Y^lOtGJcy4sCvGS>LGzvuT
nGSco!%*slUXkjQ0+{(x>@rZKt$^5c~Kn)C@u6{1-oD!M<s|Fj6
delta 135
zcmXS3!Z<;to+rR3#Pt9J149GDe=s<ftM(tr<t*@sEM{Qf76xHPhFNnYfP!|OE{-7;
zjI0MY3OYE5upapO?DR{I1pyyR7cx(jY7y^{FfMCvb5IaiQM`NJfeQjFwttKJyJNq@
hveI=@x=fAo=hV3$-MIWu9%vGSr>mdKI;RB2CICA_GnfDX
textconv gitattribute 를 사용 git diff하여 이진 파일 또는 이진 파일의 일부에 대해 사람이 읽을 수있는 차이를 표시 할 수 있습니다 . 예를 들어 * .jpg 파일의 경우 EXIF 정보가 다를 수 있으며 PDF 파일의 경우 텍스트 표현 (pdf2text 또는 이와 유사한 것)간에 차이가있을 수 있습니다.
HTH.
정말 큰 바이너리 파일이있는 경우 git-annex를 사용하여 저장소 외부에 데이터를 저장할 수 있습니다. 확인 : http://git-annex.branchable.com/
버전 제어를 위해 바이너리 파일의 차이점을 저장하려는 도구는 없지만 Git이 텍스트 파일에 대해서도이 작업을 수행하지 않는다는 점은 주목할 가치가 있습니다. Git은 파일을 blob으로 저장하고 필요할 때 파일간에 차이점을 수행합니다.
Photoshop / Illustrator 문서와 같은 문서에서 버전 제어를 수행하려는 경우 GridIron Flow 가 트릭을 수행 할 수 있습니다. 컴퓨터간에 동기화를 유지하려는 경우 Dropbox 또는 Rsync가 처리 할 수 있지만 지능형 비교를 수행하지는 않습니다.
git gc가비지 수집 을 실행 하는 경우 입니다. 같은 페이지에서 : "Git은 각 파일의 각 버전을 별도의 객체로 저장하므로 매우 비효율적 일 수 있습니다. 파일 길이가 수천 줄이고 한 줄을 변경한다고 상상해보십시오. Git은 두 번째 파일을 전체적으로 저장합니다. 엄청난 공간 낭비입니다. "
git gc"사용자는 각 저장소 내에서이 작업을 정기적으로 실행하여 좋은 디스크 공간 활용도와 우수한 운영 성능을 유지하는 것이 좋습니다. 일부 git 명령은 자동으로 git gc를 실행할 수 있습니다. 자세한 내용은 아래 --auto 플래그를 참조하십시오. . "
git은 바이너리에 좋습니다. 그러나 텍스트 파일과 같은 바이너리는 처리하지 않습니다. 바이너리 파일을 병합하려는 것과 같습니다. 내 말은, jpeg의 diff는 당신에게 아무것도 반환하지 않을 것입니다. Git은 텍스트 파일과 매우 잘 작동하며 바이너리 파일을 사용하는 다른 모든 솔루션만큼 나쁠 것입니다!