Excel 파일 및 SQL 스키마 파일에서 더 나은 문서 버전 제어를 수행하는 방법


99

저는 여러 Excel 파일과 SQL 스키마 파일을 담당하고 있습니다. 이러한 파일에 대해 더 나은 문서 버전 제어를 수행하려면 어떻게해야합니까?

이 파일에서 수정 된 부분 (다른 부분)을 알고 모든 버전을 참조 용으로 보관해야합니다. 현재 파일 이름에 타임 스탬프를 추가하고 있지만 비효율적 인 것 같습니다.

더 나은 문서 버전 관리를 수행 할 수있는 방법이나 좋은 방법이 있습니까?

그건 그렇고, 편집자는 이메일을 통해 파일을 보냅니다.


5
이 Excel 파일을 CSV 파일로 변환 한 다음 git을 사용하여 추적하여 diff를 사용하여 수정 사항을 볼 수 있습니다. 다른 좋은 방법이 있습니까?
Marcus Thornton

수락 한 것보다 낫다고 생각하는 다른 답변을 참조하십시오.
nealmcb 2014 년

답변:


45

질문에 태그를 추가 했으므로 나는 당신이 이것을 위해 Git 사용법에 대해 묻는다고 가정합니다.

음, SQL 덤프는 일반 텍스트 파일이므로 Git으로 추적하는 것이 좋습니다. 리포지토리를 만들고 저장하기 만하면됩니다. 파일의 새 버전을 받으면 파일을 덮어 쓰고 커밋하면 Git이 모든 것을 알아 내고 수정 날짜를 확인하고이 파일의 특정 버전을 체크 아웃하고 다른 버전을 비교할 수 있습니다.

.xlsx압축을 푼 경우에도 마찬가지입니다 . .xlsx파일은 XML 파일의 디렉토리를 압축합니다 ( 내부 하위 구성 요소에서 유효한 xlsx 파일을 올바르게 어셈블하는 방법 참조 ). Git은 압축을 풀지 않는 한 바이너리로 볼 것입니다. 압축을 풀고 .xlsx아카이브 내부의 개별 XML 파일에 대한 변경 사항을 추적 할 수 있습니다.

.xls파일 로도이 작업을 수행 할 수 있지만 여기서 문제는 .xls형식이 바이너리이므로 의미있는 차이점을 얻을 수 없다는 것입니다. 하지만 수정 내역을 확인하고 특정 버전을 체크 아웃 할 수는 있습니다.


4
그래, 나는 자식을 안다. SQL 스키마를 추적 할 때 git이 좋다고 생각합니다. Excel 파일 (.xlsx 및 .xls)의 경우 바이너리 파일이기 때문에 git을 사용하여 추적해도 사람의 관점에서 수정 된 내용을 표시 할 수 없습니다. 이것이 내가 헷갈리는 것입니다.
Marcus Thornton

2
@MarcusThornton .xlsx은 XML이므로 잘 작동합니다. 일반적으로 두 .xls파일 을 쉽게 비교할 수있는 방법은 없습니다 . .csv근처에 배치 할 사전 커밋 후크를 추가 할 수 있으며이를 비교할 수 있습니다.
kirelagin 2013-06-13

86

여기에 적힌 답 이이 경우에 적용될 수 있습니다. xls2txt 라는 도구 는 .xls 파일에서 사람이 읽을 수있는 출력을 제공 할 수 있습니다. 즉, 이것을 .gitattributes 파일에 넣어야합니다.

*.xls diff=xls

그리고 .git / config에서 :

[diff "xls"]
    binary = true
    textconv = /path/to/xls2txt

물론 다른 파일 유형에 대해서도 유사한 도구를 찾을 수 있으므로 git diff사무실 문서에 매우 유용한 도구가 될 것입니다. 이것은 현재 내 글로벌 .gitconfig에있는 것입니다.

[diff "xls"]
    binary = true
    textconv = /usr/bin/py_xls2txt
[diff "pdf"]
    binary = true
    textconv = /usr/bin/pdf2txt
[diff "doc"]
    binary = true
    textconv = /usr/bin/catdoc
[diff "docx"]
    binary = true
    textconv = /usr/bin/docx2txt

Pro Git 책에는 주제에 대한 좋은 장이 있습니다. 8.2 Git 사용자 정의-Git 속성


2
Windows7에서는 작동하지 않습니다. 위에서 설명한대로 gitconfig 및 속성을 편집하는 것보다 여기에서 Windows 용 catdoc 버전을 다운로드했습니다 : blog.brush.co.nz/2009/09/catdoc-windows . 그러나 나는 여전히 얻는다 : diff --git a / src / Reports / src / main / etc / templates / nbcu.xls b / src / Reports / src / main / etc / templates / nbcu.xls index 2476319..1daec86 100644 Binary 파일 a / src /.../ test.xls 및 b / src /.../ test.xls는 GIT 버전이 다릅니다 : 1.7.6.msysgit.1
katrin

여전히 문서를 문서 파일이나 텍스트 파일로 저장하고 있습니까? 텍스트 파일 인 경우 문서를 어떻게 복구합니까?
CMCDragonkai

@CMCDragonkai 이것은 파일 저장 방법에 영향을주지 않으며 diff 명령의 출력에만 영향을줍니다.
1615903

1
그래서 여전히 diff가 아닌 전체 파일을 저장하고 있습니까?
CMCDragonkai 2014

3
Re : xls2txt : 폴란드 웹 사이트에서 비공개 소스 도구를 설치하는 것을 매우 꺼립니다. 이것은 같은 것일 수 있습니까? github.com/hroptatyr/xls2txt README 없음 ...
jcollum

22

저는 지난 며칠 동안이 정확한 문제로 고심 해 왔으며 소스 제어에 훨씬 쉽게 저장할 수 있도록 Excel 파일을 추출하고 정규화하는 작은 .NET 유틸리티를 작성했습니다. 여기에 실행 파일을 게시했습니다.

https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe

.. 그리고 여기에 소스 :

https://bitbucket.org/htilabs/ooxmlunpack

관심이 있다면 좀 더 구성 할 수있게해서 기쁘지만 현재 실행 파일을 폴더 (예 : 소스 저장소의 루트)에 넣어야하며 실행하면 다음과 같이됩니다.

  • .xlsx 및 .xlsm 파일이 있는지 폴더 및 하위 폴더를 검색합니다.
  • 파일의 사본을 * .orig로 가져옵니다.
  • 각 파일의 압축을 풀고 압축하지 않고 다시 압축하십시오.
  • 유효한 XML 인 아카이브의 모든 파일을 예쁘게 인쇄하십시오.
  • calcchain.xml 파일을 아카이브에서 삭제합니다 (많이 변경되고 파일 내용에 영향을주지 않기 때문에).
  • 형식이 지정되지 않은 텍스트 값을 인라인합니다 (그렇지 않으면 단일 셀이 수정 된 경우에도 내부 XML이 크게 변경되는 조회 테이블에 보관됩니다).
  • 수식이 포함 된 모든 셀에서 값을 삭제합니다 (다음에 시트를 열 때 계산할 수 있으므로).
  • 압축을 푼 zip 아카이브 콘텐츠를 포함하는 * .extracted 하위 폴더를 만듭니다.

분명히 이러한 모든 것이 필요한 것은 아니지만 최종 결과는 여전히 Excel에서 열리지 만 비교 및 ​​증분 압축에 훨씬 더 적합한 스프레드 시트 파일입니다. 또한 추출 된 파일을 저장하면 버전 기록에서 각 버전에 적용된 변경 사항이 훨씬 더 명확 해집니다.

식욕이 있다면 모든 사람이 내용을 추출하거나 수식 셀에서 값을 제거하는 것을 원하지 않을 것이기 때문에 도구를보다 쉽게 ​​구성 할 수있게되어 기쁩니다. 그러나이 둘은 현재 나에게 매우 유용합니다.

테스트에서 2MB 스프레드 시트는 21MB로 '압축 해제'되었지만 각각의 작은 변경 사항이있는 5 가지 버전을 1.9MB Mercurial 데이터 파일에 저장하고 Beyond Compare in을 사용하여 버전 간의 차이점을 효과적으로 시각화 할 수 있었습니다. 텍스트 모드.

NB : Mercurial을 사용하고 있지만 솔루션을 조사하는 동안이 질문을 읽었으며 Mercurial과 관련된 솔루션은 없으며 Git 또는 다른 VCS에서 제대로 작동합니다.


나는 실제로 시도하지 않은,하지만 난 그게 것 가정 - 당신이 좋은 것 시도 알고 있음을주지 않는 경우
존 G에게

@JonG LibreOffice에서 작동하도록 할 수 없으며 bitbucket 저장소에 문제 탭이 없습니다. 문제가 발생하면 기여하고 싶습니다!
Christian Droulers 2015 년

안녕하세요 @ christian-droulers 님, Repo에서 이슈를 활성화했습니다. 자유롭게 추가해주세요!
Jon G

@JonG 이것은 멋져 보입니다. 비교 가능한 버전 기록이 있으면 많은 문서 관련 시나리오에서 정말 유용 할 수 있습니다! 하지만 Excel에서 파일을 여는 것이 왜 중요한가요? .orig 파일을 사용할 수 없습니까? 그리고 코드가 docx / pptx에도 사용될 수 있도록 정규화가 구성 가능 / 동적 일 수 있다고 생각하십니까?
요르겐 Tvedt

10

Tante 는 Git에서 ZIP 기반 파일 형식 관리에 매우 간단한 접근 방식을 권장했습니다 .

~ / .gitconfig 파일을 열고 (아직 존재하지 않는 경우 생성) 다음 스탠자를 추가합니다.

[diff "zip"]
textconv = unzip -c -a

3
그런 다음 Peng Xu는 솔루션을 확장하여 필터를 사용하여 zip 기반 파일의 버전을 관리 할 수있을뿐만 아니라 차이점 변경 사항 만 볼 수 있습니다. tante.cc/2010/06/23/managing-zip-based-file-formats-in-git/ …
Roberto Cabellon

4

열린 문서 확장자를 사용하십시오 .fods. Excel과 LibreOffice에서 모두 열 수있는 압축되지 않은 일반 XML 마크 업 형식이며 차이점이 좋아 보일 것입니다.


2

Excel 통합 문서 용 오픈 소스 Git 명령 줄 확장을 구축했습니다 : https://www.xltrail.com/git-xltrail .

요컨대, 주요 특징은 git diff 통합 문서 파일 형식에서 작업을 수행하여 통합 문서의 VBA 콘텐츠에 대한 차이점을 표시한다는 것입니다 (언젠가는 워크 시트 콘텐츠에도이 작업을 수행 할 것입니다).

아직 초기 단계이지만 도움이 될 수 있습니다.


2 년이 지난 후에도 여전히 VBA 만 처리하는 반면 다른 많은 솔루션은 전체 스프레드 시트를 처리합니다. 나는 실제로 10 년 넘게 스프레드 시트의 VBA 내용에 신경을 쓰지 않았습니다 (또는 더 정확하게는 어떤 것도 포함하지 않으려 고 적극적으로 노력했습니다 ...).
Auspex

1

다른 답변의 의견에서 언급했듯이 .xlsx 파일은 XML입니다.

XML 디렉토리 ( git-able)로 이동하려면 .xlsx 파일을 디렉토리에 "압축 해제"해야합니다. Windows에서이를 확인하는 빠른 방법은 <filename> .xlsx 파일의 이름을 <filename> .zip으로 바꾸는 것입니다. 그러면 내부 내용이 표시됩니다. 체크 아웃 할 때 Excel에서 문서를 열기 위해 다른 단계를 수행 할 필요가 없도록 바이너리와 함께 이것을 저장합니다.


1
적어도 내가 사용하는 zip 도구 (7-zip)를 사용하면 모든 파일을 열고 / 추출 할 수 있습니다. 이름을 바꿀 필요가 없습니다.
Onur

1

이 Excel 유틸리티는 저에게 매우 잘 작동합니다.

Excel 용 버전 관리

통합 문서 및 VBA 매크로를위한 매우 간단한 버전 관리 도구입니다. 버전을 커밋하면 PC의 Git 저장소에 저장됩니다. 나는 그것을 다시 시도하지 않았습니다. SQL 스키마 파일이지만 방법이 있다고 확신합니다.


이것은 .xlsm 파일에 포함 된 모듈에서 작동하는 유일한 도구입니다. 내가 아는 유일한 대안은 매크로를 실행하여 모든 모듈을 자체 파일로 내보내고 커밋 한 다음 매크로를 실행하여 끌어오고 병합 한 후 다시 가져 오는 것입니다. xltrail그것보다 훨씬 쉽습니다.
Michael Hoffmann

0

Excel 파일에 대한 나의 접근 방식은 Jon과 비슷하지만 원시 Excel 텍스트 데이터로 작업하는 대신 좀 더 친숙한 형식으로 내 보냅니다.

내가 사용하는 도구는 다음과 같습니다. https://github.com/stenci/ExcelToGit/tree/master

.xlsm 파일을 다운로드하기 만하면됩니다 ( 이 페이지 에서 원시보기 링크를 클릭 하십시오. .). Readme에 설명 된대로 Excel 설정을 확인하는 것을 잊지 마십시오. SQL 데이터를 텍스트 파일로 내보내는 코드를 추가 할 수도 있습니다.

통합 문서는 바이너리 Excel에서 텍스트 파일로의 변환기이자 Windows Git 도구의 실행기이며 Excel과 관련이없는 프로젝트에서도 사용할 수 있습니다.

내 작업 버전은 수십 개의 Excel 통합 문서로 구성됩니다. 이 파일을 사용하여 Excel이 아닌 프로젝트에 대해 Git-gui를 열고 git 폴더를 직접 추가합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.