Cách thực hiện kiểm soát phiên bản tài liệu tốt hơn trên tệp Excel và tệp lược đồ SQL


98

Tôi phụ trách một số tệp Excel và tệp lược đồ SQL. Làm cách nào để thực hiện kiểm soát phiên bản tài liệu tốt hơn trên các tệp này?

Tôi cần biết phần đã sửa đổi (phần khác) trong các tệp này và giữ lại tất cả các phiên bản để tham khảo. Hiện tại tôi đang bổ sung dấu thời gian trên tên tệp, nhưng tôi thấy nó có vẻ không hiệu quả.

Có cách nào hoặc phương pháp hay để kiểm soát phiên bản tài liệu tốt hơn không?

Nhân tiện, các biên tập viên gửi cho tôi các tệp qua email.


5
Tôi có thể chuyển đổi các tệp Excel này thành tệp CSV, sau đó theo dõi chúng bằng git để tôi có thể sử dụng diff để xem sửa đổi. Có thực hành tốt nào khác không?
Marcus Thornton

Xem các câu trả lời khác, mà tôi nghĩ là tốt hơn câu trả lời bạn đã chấp nhận.
nealmcb

Câu trả lời:


45

Vì bạn đã gắn thẻ câu hỏi của mình với Tôi giả sử bạn đang hỏi về việc sử dụng Git cho việc này.

Chà, SQL kết xuất là các tệp văn bản bình thường nên việc theo dõi chúng bằng Git là rất hợp lý. Chỉ cần tạo một kho lưu trữ và lưu trữ chúng trong đó. Khi bạn nhận được phiên bản mới của tệp, chỉ cần ghi đè lên và cam kết, Git sẽ tìm ra mọi thứ cho bạn và bạn sẽ có thể xem ngày sửa đổi, kiểm tra các phiên bản cụ thể của tệp này và so sánh các phiên bản khác nhau.

Điều này cũng đúng .xlsxnếu bạn giải nén chúng. .xlsxcác tệp được nén trong các thư mục của tệp XML (Xem Cách lắp ráp đúng cách một tệp xlsx hợp lệ từ các thành phần con bên trong của nó? ). Git sẽ xem chúng dưới dạng nhị phân trừ khi được giải nén. Có thể giải nén .xlsxvà theo dõi các thay đổi đối với các tệp XML riêng lẻ bên trong kho lưu trữ.

Bạn cũng có thể làm điều này với .xlscác tệp, nhưng vấn đề ở đây là .xlsđịnh dạng là nhị phân, vì vậy bạn không thể nhận được sự khác biệt có ý nghĩa với nó. Nhưng bạn vẫn có thể xem lịch sử sửa đổi và thanh toán các phiên bản cụ thể.


4
Vâng, tôi biết git. Tôi nghĩ rằng git là tốt khi theo dõi các lược đồ SQL. Đối với tệp Excel (.xlsx và .xls), vì chúng là tệp nhị phân nên việc theo dõi chúng bằng git không thể cho tôi biết những gì đã được sửa đổi theo quan điểm của con người. Đây là điều tôi khó hiểu.
Marcus Thornton

2
@MarcusThornton .xlsxlà XML, vì vậy sẽ hoạt động tốt. Nói chung, không có cách nào để dễ dàng so sánh hai .xlstệp. Bạn có thể có thể thêm một hook pre-commit để đặt .csvgần nó và bạn sẽ có thể thay đổi chúng.
kirelagin

86

Câu trả lời tôi đã viết ở đây có thể được áp dụng trong trường hợp này. Một công cụ có tên xls2txt có thể cung cấp đầu ra mà con người có thể đọc được từ các tệp .xls. Tóm lại, bạn nên đặt nó vào tệp .gitattributes của mình:

*.xls diff=xls

Và trong .git / config:

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

Tất nhiên, tôi chắc rằng bạn cũng có thể tìm thấy các công cụ tương tự cho các loại tệp khác, tạo nên git diffmột công cụ rất hữu ích cho các tài liệu văn phòng. Đây là những gì tôi hiện có trong .gitconfig toàn cầu của mình:

[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

Cuốn sách Pro Git có một chương hay về chủ đề: 8.2 Tùy chỉnh Git - Các thuộc tính Git


2
nó không hoạt động đối với tôi trên windows7. tôi đã tải xuống catdoc Verion cho Windows từ đây: blog.brush.co.nz/2009/09/catdoc-windows thay vì chỉnh sửa gitconfig và các thuộc tính như mô tả ở trên. nhưng tôi vẫn nhận được: 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 file a / src /.../ test.xls và b / src /.../ test.xls khác phiên bản GIT: 1.7.6.msysgit.1
Katrin

Nó vẫn lưu trữ tài liệu dưới dạng tệp doc hay dưới dạng tệp văn bản? Nếu là tệp văn bản, làm cách nào để khôi phục tài liệu?
CMCDragonkai

@CMCDragonkai Điều này không ảnh hưởng đến cách tệp được lưu trữ, chỉ ảnh hưởng đến đầu ra của lệnh diff.
1615903

1
Vì vậy, nó vẫn lưu trữ toàn bộ tệp, không phải khác biệt?
CMCDragonkai

3
Re: xls2txt: cực kỳ miễn cưỡng cài đặt một công cụ mã nguồn đóng từ một trang web Ba Lan. Đây có thể là điều tương tự? github.com/hroptatyr/xls2txt Không có README mặc dù ...
jcollum

22

Tôi đã vật lộn với vấn đề chính xác này trong vài ngày qua và đã viết một tiện ích .NET nhỏ để giải nén và chuẩn hóa các tệp Excel theo cách mà chúng dễ lưu trữ hơn nhiều trong điều khiển nguồn. Tôi đã xuất bản tệp thực thi ở đây:

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

..và nguồn ở đây:

https://bitbucket.org/htilabs/ooxmlunpack

Nếu có bất kỳ sự quan tâm nào, tôi rất vui khi làm cho tệp này có thể cấu hình tốt hơn, nhưng hiện tại, bạn nên đặt tệp thực thi vào một thư mục (ví dụ: thư mục gốc của kho lưu trữ nguồn của bạn) và khi bạn chạy nó, nó sẽ:

  • Quét thư mục và các thư mục con của nó để tìm bất kỳ tệp .xlsx và .xlsm nào
  • Chụp một bản sao của tệp dưới dạng * .orig.
  • Giải nén từng tệp và nén lại mà không cần nén.
  • In đẹp bất kỳ tệp nào trong kho lưu trữ là XML hợp lệ.
  • Xóa tệp calcchain.xml khỏi kho lưu trữ (vì nó thay đổi nhiều và không ảnh hưởng đến nội dung của tệp).
  • Nội dòng bất kỳ giá trị văn bản chưa được định dạng nào (nếu không, những giá trị này được lưu trong bảng tra cứu, điều này gây ra những thay đổi lớn trong XML nội bộ nếu ngay cả một ô duy nhất được sửa đổi).
  • Xóa các giá trị khỏi bất kỳ ô nào có chứa công thức (vì chúng chỉ có thể được tính khi trang tính được mở tiếp theo).
  • Tạo một thư mục con * .extracted, chứa nội dung lưu trữ zip đã giải nén.

Rõ ràng không phải tất cả những điều này đều cần thiết, nhưng kết quả cuối cùng là một tệp bảng tính vẫn sẽ mở trong Excel, nhưng có thể dễ dàng hơn để nén khác nhau và tăng dần. Ngoài ra, việc lưu trữ các tệp đã giải nén cũng làm cho nó rõ ràng hơn nhiều trong lịch sử phiên bản những thay đổi đã được áp dụng trong mỗi phiên bản.

Nếu có bất kỳ mong muốn nào ở đó, tôi rất vui khi làm cho công cụ có thể cấu hình tốt hơn vì tôi đoán không phải ai cũng muốn nội dung được trích xuất hoặc có thể là các giá trị bị xóa khỏi ô công thức, nhưng cả hai đều rất hữu ích đối với tôi vào lúc này.

Trong các thử nghiệm, một bảng tính 2 MB 'giải nén' thành 21 MB, nhưng sau đó tôi có thể lưu trữ năm phiên bản của nó với những thay đổi nhỏ giữa mỗi phiên bản, trong một tệp dữ liệu Mercurial 1,9 MB và trực quan hóa sự khác biệt giữa các phiên bản một cách hiệu quả bằng cách sử dụng Beyond Compare trong chế độ văn bản.

NB: Mặc dù tôi đang sử dụng Mercurial, tôi đã đọc câu hỏi này trong khi nghiên cứu giải pháp của mình và không có gì cụ thể về giải pháp của Mercurial, sẽ hoạt động tốt cho Git hoặc bất kỳ VCS nào khác.


Tôi thực sự đã không cố gắng, nhưng tôi cho rằng nó sẽ - nếu bạn cho rằng một thử nó sẽ là tuyệt vời để biết
Jon G

@JonG Tôi không thể làm cho nó hoạt động với LibreOffice và không có tab Sự cố trong kho lưu trữ bitbucket. Tôi rất muốn đóng góp nếu chúng ta có thể giải quyết được vấn đề!
Christian Droulers

Xin chào @ christian-droulers, Tôi đã kích hoạt sự cố trên Repo, vui lòng thêm một số thứ vào đó!
Jon G

@JonG Điều này có vẻ tuyệt vời, có một lịch sử phiên bản có thể khác biệt có thể thực sự hữu ích trong nhiều trường hợp liên quan đến tài liệu! Nhưng tại sao điều quan trọng là tệp mở trong Excel? Bạn không thể chỉ sử dụng tệp .orig? Và bạn có nghĩ rằng các chuẩn hóa có thể được định cấu hình / động để mã có thể được sử dụng cho docx / pptx không?
Jørgen Tvedt

10

Tante đã đề xuất một cách tiếp cận rất đơn giản trong Quản lý các định dạng tệp dựa trên ZIP trong Git :

Mở tệp ~ / .gitconfig của bạn (tạo nếu chưa có) và thêm đoạn thơ sau:

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

3
sau đó, Peng Xu đã mở rộng giải pháp, cho phép tạo phiên bản cho các tệp dựa trên zip bằng bộ lọc, ngoài việc chỉ xem các thay đổi khác biệt: tante.cc/2010/06/23/managing-zip-based-file-formats-in-git/ …
Roberto Cabellon

4

Sử dụng phần mở rộng tài liệu đang mở .fods. Đó là một định dạng đánh dấu XML đơn giản, không nén mà cả Excel và LibreOffice đều có thể mở và các khác biệt sẽ trông đẹp.


2

Chúng tôi đã tạo một phần mở rộng dòng lệnh Git mã nguồn mở cho sổ làm việc Excel: https://www.xltrail.com/git-xltrail .

Tóm lại, tính năng chính là nó git diffhoạt động trên mọi định dạng tệp sổ làm việc để nó hiển thị sự khác biệt về nội dung VBA của sổ làm việc (tại một số điểm, chúng tôi cũng sẽ làm cho điều này hoạt động cho nội dung trang tính).

Vẫn còn là những ngày đầu nhưng nó có thể hữu ích.


và hơn hai năm sau nó vẫn chỉ xử lý VBA, trong khi nhiều giải pháp khác xử lý toàn bộ bảng tính. Tôi đã không thực sự quan tâm đến nội dung VBA của một bảng tính trong hơn một thập kỷ (hay chính xác hơn, tôi đã tích cực cố gắng tránh có bất kỳ ...).
Auspex

1

Như đã đề cập trong nhận xét của một câu trả lời khác, tệp .xlsx chỉ là XML.

Để truy cập thư mục XML (có thể được git), bạn phải "giải nén" tệp .xlsx vào một thư mục. Một cách nhanh chóng để xem điều này trên Windows là đổi tên tệp <filename> .xlsx thành <filename> .zip và bạn sẽ thấy nội dung bên trong. Tôi sẽ lưu trữ dữ liệu này cùng với tệp nhị phân để khi thanh toán, bạn không phải thực hiện các bước khác để mở tài liệu trong Excel.


1
Ít nhất công cụ zip mà tôi sử dụng (7-zip) cho phép mở / giải nén tất cả các tệp - bạn không cần phải đổi tên chúng.
Onur

1

Tiện ích Excel này hoạt động rất tốt đối với tôi:

Kiểm soát phiên bản cho Excel

Nó là một công cụ tạo phiên bản khá đơn giản cho sổ làm việc và macro VBA. Sau khi bạn cam kết một phiên bản, phiên bản đó sẽ được lưu vào kho lưu trữ Git trên PC của bạn. Tôi chưa bao giờ thử lại. Các tệp lược đồ SQL, nhưng tôi chắc chắn rằng có một cách khác.


Đây là công cụ duy nhất mà tôi tìm thấy hoạt động với các mô-đun được nhúng trong tệp .xlsm. Cách thay thế duy nhất mà tôi biết là chạy macro để xuất mọi mô-đun sang tệp riêng của nó, cam kết chúng và sau đó chạy macro để nhập lại tất cả sau khi kéo và hợp nhất. xltraildễ dàng hơn thế rất nhiều.
Michael Hoffmann

0

Cách tiếp cận của tôi với tệp Excel tương tự như của Jon, nhưng thay vì làm việc với dữ liệu văn bản Excel thô, tôi xuất sang các định dạng thân thiện hơn.

Đây là công cụ mà tôi sử dụng: https://github.com/stenci/ExcelToGit/tree/master

Tất cả những gì bạn cần là tải xuống tệp .xlsm (nhấp vào liên kết View Raw trên trang này .) Đừng quên kiểm tra cài đặt Excel như được mô tả trong readme. Bạn cũng có thể thêm mã để xuất dữ liệu SQL sang tệp văn bản.

Sổ làm việc vừa là công cụ chuyển đổi từ Excel nhị phân sang tệp văn bản vừa là trình khởi chạy của các công cụ Windows Git và nó cũng có thể được sử dụng với các dự án không liên quan đến Excel.

Phiên bản làm việc của tôi được định cấu hình với hàng chục sổ làm việc Excel. Tôi cũng sử dụng tệp để mở Git-gui cho các dự án không phải Excel, chỉ cần thêm thư mục git bằng tay.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.