วิธีดำเนินการควบคุมเวอร์ชันเอกสารที่ดีขึ้นบนไฟล์ Excel และไฟล์สคีมา SQL


101

ฉันรับผิดชอบไฟล์ Excel และไฟล์สคีมา SQL หลายไฟล์ ฉันจะควบคุมเวอร์ชันเอกสารให้ดีขึ้นกับไฟล์เหล่านี้ได้อย่างไร

ฉันต้องการทราบส่วนที่แก้ไข (ส่วนที่แตกต่างกัน) ในไฟล์เหล่านี้และเก็บเวอร์ชันทั้งหมดไว้อ้างอิง ขณะนี้ฉันกำลังต่อท้ายการประทับเวลาบนชื่อไฟล์ แต่ฉันพบว่าดูเหมือนจะไม่มีประสิทธิภาพ

มีวิธีหรือแนวทางปฏิบัติที่ดีในการควบคุมเวอร์ชันเอกสารให้ดีขึ้นหรือไม่?

ทางบรรณาธิการส่งไฟล์ให้ฉันทางอีเมล


5
ฉันสามารถแปลงไฟล์ Excel เหล่านี้เป็นไฟล์ CSV จากนั้นติดตามโดยใช้ git เพื่อที่ฉันจะได้ใช้ diff เพื่อดูการแก้ไข มีการปฏิบัติที่ดีอื่น ๆ อีกหรือไม่?
Marcus Thornton

ดูคำตอบอื่น ๆ ซึ่งฉันคิดว่าดีกว่าคำตอบที่คุณยอมรับ
nealmcb

คำตอบ:


45

เนื่องจากคุณได้ติดแท็กคำถามของคุณด้วย ฉันคิดว่าคุณกำลังถามเกี่ยวกับการใช้งาน Git สำหรับสิ่งนี้

การทิ้ง SQL เป็นไฟล์ข้อความปกติดังนั้นจึงเหมาะสมอย่างยิ่งที่จะติดตามด้วย Git เพียงสร้างที่เก็บและเก็บไว้ในนั้น เมื่อคุณได้รับไฟล์เวอร์ชันใหม่เพียงแค่เขียนทับและคอมมิต Git จะหาทุกอย่างให้คุณและคุณจะสามารถดูวันที่แก้ไขเช็คเอาต์เวอร์ชันเฉพาะของไฟล์นี้และเปรียบเทียบเวอร์ชันต่างๆ

เช่นเดียวกับ.xlsxถ้าคุณคลายการบีบอัด .xlsxไฟล์จะถูกบีบอัดไดเรกทอรีของไฟล์ XML (ดูวิธีประกอบไฟล์ xlsx ที่ถูกต้องจากส่วนประกอบย่อยภายในได้อย่างไร ) Git จะมองว่าเป็นไบนารีเว้นแต่จะคลายการบีบอัด เป็นไปได้ที่จะคลายซิป.xlsxและติดตามการเปลี่ยนแปลงของไฟล์ XML แต่ละไฟล์ภายในไฟล์เก็บถาวร

คุณสามารถทำได้ด้วย.xlsไฟล์ แต่ปัญหาที่นี่คือ.xlsรูปแบบเป็นไบนารีดังนั้นคุณจึงไม่สามารถรับความแตกต่างที่มีความหมายได้ แต่คุณจะยังดูประวัติการแก้ไขและเช็คเอาต์เวอร์ชันที่ต้องการได้


4
ใช่ฉันรู้คอมไพล์ ฉันคิดว่า git นั้นดีเมื่อติดตามโครงร่าง SQL สำหรับไฟล์ Excel (.xlsx และ. xls) เนื่องจากเป็นไฟล์ไบนารีการติดตามโดยใช้ git ไม่สามารถแสดงให้ฉันเห็นว่ามีการแก้ไขอะไรบ้างในมุมมองของมนุษย์ นี่คือสิ่งที่ฉันสับสน
Marcus Thornton

2
@MarcusThornton .xlsxเป็น XML ดังนั้นควรใช้งานได้ดี โดยทั่วไปไม่มีวิธีใดที่จะเปรียบเทียบ.xlsไฟล์สองไฟล์ได้อย่างง่ายดาย คุณอาจเพิ่มเบ็ดก่อนคอมมิตที่จะวางไว้.csvใกล้ ๆ และคุณจะสามารถเปลี่ยนสิ่งเหล่านั้นได้
kirelagin

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 ฉันดาวน์โหลด catdoc verion สำหรับ Windows จากที่นี่: blog.brush.co.nz/2009/09/catdoc-windowsกว่าแก้ไขgitconfigและแอตทริบิวต์ตามที่อธิบายไว้ข้างต้น แต่ฉันยังคงได้รับ: diff --git a / src / Reports / src / main / etc / templates / nbcu.xls b / src / Reports / src / main / etc / templates / ดัชนี nbcu.xls 2476319..1daec86 100644 ไบนารี ไฟล์ a / src /.../ test.xls และ b / src /.../ test.xls ต่างรุ่น GIT: 1.7.6.msysgit.1
katrin

ยังคงจัดเก็บเอกสารเป็นไฟล์ doc หรือเป็นไฟล์ข้อความหรือไม่ หากเป็นไฟล์ข้อความคุณจะกู้คืนเอกสารได้อย่างไร
CMCDragonkai

@CMCDragonkai สิ่งนี้ไม่มีผลต่อวิธีการจัดเก็บไฟล์ แต่จะมีผลกับเอาต์พุตของคำสั่ง diff
1615903

1
ดังนั้นมันยังคงจัดเก็บไฟล์ทั้งหมดไม่ใช่ความแตกต่าง?
CMCDragonkai

3
Re: xls2txt: ลังเลอย่างยิ่งที่จะติดตั้งเครื่องมือปิดจากเว็บไซต์โปแลนด์ นี่อาจจะเป็นเรื่องเดียวกัน? github.com/hroptatyr/xls2txtไม่มี README แม้ว่า ...
jcollum

22

ฉันกำลังดิ้นรนกับปัญหานี้ในช่วงสองสามวันที่ผ่านมาและได้เขียนยูทิลิตี้. NET ขนาดเล็กเพื่อแยกและทำให้ไฟล์ Excel เป็นปกติในลักษณะที่ง่ายต่อการจัดเก็บในการควบคุมแหล่งที่มา ฉันได้เผยแพร่ไฟล์ปฏิบัติการที่นี่:

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

.. และที่มา:

https://bitbucket.org/htilabs/ooxmlunpack

หากมีความสนใจใด ๆ ฉันยินดีที่จะทำให้สิ่งนี้สามารถกำหนดค่าได้มากขึ้น แต่ในขณะนี้คุณควรวางไฟล์ปฏิบัติการไว้ในโฟลเดอร์ (เช่นรูทของที่เก็บต้นทางของคุณ) และเมื่อคุณเรียกใช้มันจะ:

  • สแกนโฟลเดอร์และโฟลเดอร์ย่อยเพื่อหาไฟล์. xlsx และ. xlsm
  • ถ่ายสำเนาไฟล์เป็น * .orig
  • แตกไฟล์แต่ละไฟล์และซิปใหม่โดยไม่มีการบีบอัด
  • พิมพ์ไฟล์ใด ๆ ในไฟล์เก็บถาวรซึ่งเป็น XML ที่ถูกต้อง
  • ลบไฟล์ calcchain.xml ออกจากไฟล์เก็บถาวร (เนื่องจากมีการเปลี่ยนแปลงมากและไม่มีผลต่อเนื้อหาของไฟล์)
  • แทรกค่าข้อความที่ไม่ได้จัดรูปแบบไว้ในบรรทัด (มิฉะนั้นจะถูกเก็บไว้ในตารางการค้นหาซึ่งทำให้เกิดการเปลี่ยนแปลงครั้งใหญ่ใน XML ภายในหากมีการแก้ไขแม้แต่เซลล์เดียว
  • ลบค่าจากเซลล์ใด ๆ ที่มีสูตร (เนื่องจากสามารถคำนวณได้เมื่อเปิดแผ่นงานในครั้งถัดไป)
  • สร้างโฟลเดอร์ย่อย * .extracted ที่มีเนื้อหาไฟล์ zip ที่แยกออกมา

เห็นได้ชัดว่าสิ่งเหล่านี้ไม่จำเป็นทั้งหมด แต่ผลลัพธ์สุดท้ายคือไฟล์สเปรดชีตที่จะยังคงเปิดอยู่ใน Excel แต่จะรองรับการบีบอัดที่แตกต่างกันและเพิ่มขึ้นได้มาก นอกจากนี้การจัดเก็บไฟล์ที่แยกออกมาเช่นกันทำให้ประวัติเวอร์ชันมีความชัดเจนมากขึ้นว่ามีการเปลี่ยนแปลงใดบ้างในแต่ละเวอร์ชัน

หากมีความอยากอาหารอยู่ที่นั่นฉันยินดีที่จะทำให้เครื่องมือสามารถกำหนดค่าได้มากขึ้นเนื่องจากฉันเดาว่าไม่ใช่ทุกคนที่จะต้องการให้แยกเนื้อหาออกหรืออาจจะลบค่าออกจากเซลล์สูตร แต่สิ่งเหล่านี้มีประโยชน์กับฉันมากในขณะนี้

ในการทดสอบสเปรดชีตขนาด 2 MB 'คลายแพ็ก' เป็น 21 MB แต่จากนั้นฉันก็สามารถจัดเก็บได้ห้าเวอร์ชันโดยมีการเปลี่ยนแปลงเล็กน้อยระหว่างแต่ละเวอร์ชันในไฟล์ข้อมูล Mercurial 1.9 MB และแสดงภาพความแตกต่างระหว่างเวอร์ชันได้อย่างมีประสิทธิภาพโดยใช้Beyond Compareใน โหมดข้อความ

หมายเหตุ: แม้ว่าฉันจะใช้ Mercurial แต่ฉันอ่านคำถามนี้ในขณะที่ค้นคว้าวิธีแก้ปัญหาของฉันและไม่มีอะไรที่เฉพาะเจาะจงเกี่ยวกับ Mercurial เกี่ยวกับโซลูชันนี้ควรใช้งานได้ดีกับ Git หรือ VCS อื่น ๆ


ที่จริงฉันยังไม่ได้ลอง แต่ฉันคิดว่ามันจะเป็นเช่นนั้น - ถ้าคุณลองทำแบบนั้นจะเป็นการดีที่ได้รู้
จอน G

@JonG ฉันไม่สามารถใช้งานกับ LibreOffice ได้และไม่มีแท็บปัญหาในที่เก็บ bitbucket ฉันชอบที่จะมีส่วนร่วมหากเราสามารถแก้ไขปัญหาได้!
Christian Droulers

สวัสดี @ christian-droulers ฉันได้เปิดใช้งานปัญหาใน Repo อย่าลังเลที่จะเพิ่มบางสิ่งที่นั่น!
Jon G

@JonG สิ่งนี้ดูดีการมีประวัติเวอร์ชันที่แตกต่างกันอาจมีประโยชน์อย่างมากในสถานการณ์ที่เกี่ยวข้องกับเอกสารจำนวนมาก! แต่เหตุใดการเปิดไฟล์ใน Excel จึงมีความสำคัญ คุณใช้แค่ไฟล์. orig ไม่ได้หรือ? และคุณคิดว่าการทำนอร์มัลไลเซชันสามารถกำหนดค่าได้ / ไดนามิกเพื่อให้สามารถใช้โค้ดสำหรับ docx / pptx ได้หรือไม่?
Jørgen Tvedt

10

Tante แนะนำวิธีง่ายๆในการจัดการรูปแบบไฟล์ที่ใช้ ZIP ใน Git :

เปิดไฟล์ ~ / .gitconfig ของคุณ (สร้างหากยังไม่มีอยู่) และเพิ่ม stanza ต่อไปนี้:

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

3
จากนั้น Peng Xu ได้ขยายโซลูชันโดยอนุญาตให้กำหนดเวอร์ชันไฟล์ที่ใช้ zip โดยใช้ตัวกรองนอกเหนือจากการดูการเปลี่ยนแปลงที่แตกต่างเท่านั้น: tante.cc/2010/06/23/managing-zip-based-file-formats-in-git/ …
Roberto Cabellon

5

.fodsใช้ส่วนขยายเอกสารที่เปิด เป็นรูปแบบมาร์กอัป XML ธรรมดาที่ไม่มีการบีบอัดที่ทั้ง Excel และ LibreOffice สามารถเปิดได้และความแตกต่างจะดูดี


2

เราได้สร้างส่วนขยายบรรทัดคำสั่ง Git แบบโอเพนซอร์สสำหรับสมุดงาน Excel: https://www.xltrail.com/git-xltrail https://www.xltrail.com/git-xltrail

สรุปคุณสมบัติหลักคือมันทำให้ git diffงานได้กับรูปแบบไฟล์สมุดงานเพื่อให้แสดงความแตกต่างของเนื้อหา VBA ของสมุดงาน (ในบางจุดเราจะทำให้สิ่งนี้ใช้ได้กับเนื้อหาในแผ่นงานด้วย)

ยังเป็นวันแรก แต่อาจช่วยได้


และในอีกสองปีต่อมาก็ยังจัดการ VBA เท่านั้นในขณะที่โซลูชันอื่น ๆ อีกมากมายจัดการสเปรดชีตทั้งหมด ฉันไม่ได้สนใจเกี่ยวกับเนื้อหา VBA ของสเปรดชีตมานานกว่าทศวรรษแล้ว (หรือมากกว่านั้นอย่างถูกต้องฉันพยายามอย่างเต็มที่ที่จะหลีกเลี่ยงการมี ... )
Auspex

1

ดังที่กล่าวไว้ในความคิดเห็นของคำตอบอื่นไฟล์. xlsx เป็นเพียง XML

ในการเข้าถึงไดเร็กทอรี XML (ซึ่งเป็นgit-able) คุณต้อง "คลายซิป" ไฟล์. xlsx ไปยังไดเร็กทอรี วิธีที่รวดเร็วในการดูสิ่งนี้ใน Windows คือเปลี่ยนชื่อไฟล์ <filename> .xlsx เป็น <filename> .zip แล้วคุณจะเห็นเนื้อหาด้านใน ฉันจะจัดเก็บสิ่งนี้พร้อมกับไบนารีเพื่อที่เมื่อคุณชำระเงินคุณไม่ต้องทำขั้นตอนอื่น ๆ เพื่อเปิดเอกสารใน Excel


1
อย่างน้อยเครื่องมือ zip ที่ฉันใช้ (7-zip) ก็อนุญาตให้เปิด / แตกไฟล์ทั้งหมด - คุณไม่ต้องเปลี่ยนชื่อ
Onur

1

ยูทิลิตี้ Excel นี้ทำงานได้ดีสำหรับฉัน:

การควบคุมเวอร์ชันสำหรับ Excel

เป็นเครื่องมือกำหนดเวอร์ชันที่ค่อนข้างตรงไปตรงมาสำหรับสมุดงานและมาโคร VBA เมื่อคุณยืนยันเวอร์ชันแล้วเวอร์ชันนั้นจะถูกบันทึกลงในที่เก็บ Git บนพีซีของคุณ ฉันไม่เคยลองอีกครั้ง SQL schema แต่ฉันแน่ใจว่ามีวิธีแก้ไข


นี่เป็นเครื่องมือเดียวที่ฉันพบว่าใช้ได้กับโมดูลที่ฝังอยู่ในไฟล์. xlsm ทางเลือกเดียวที่ฉันรู้จักคือการเรียกใช้แมโครเพื่อส่งออกทุกโมดูลไปยังไฟล์ของตัวเองจากนั้นเรียกใช้แมโครเพื่อนำเข้าทั้งหมดอีกครั้งหลังจากดึงและรวมเข้าด้วยกัน xltrailง่ายกว่านั้นเยอะ
Michael Hoffmann

0

วิธีการของฉันกับไฟล์ Excel คล้ายกับของจอน แต่แทนที่จะทำงานกับข้อมูลข้อความ Excel ดิบฉันส่งออกไปยังรูปแบบที่เป็นมิตรมากขึ้น

นี่คือเครื่องมือที่ฉันใช้: https://github.com/stenci/ExcelToGit/tree/master

สิ่งที่คุณต้องมีคือดาวน์โหลดไฟล์. xlsm (คลิกลิงก์ View Raw ในหน้านี้) อย่าลืมตรวจสอบการตั้งค่า Excel ตามที่อธิบายไว้ใน readme คุณยังสามารถเพิ่มรหัสเพื่อส่งออกข้อมูล SQL ไปยังไฟล์ข้อความ

เวิร์กบุ๊กเป็นทั้งตัวแปลงจาก Excel ไบนารีเป็นไฟล์ข้อความและตัวเรียกใช้งานเครื่องมือ Windows Git และสามารถใช้กับโครงการที่ไม่เกี่ยวข้องกับ Excel ได้ด้วย

เวอร์ชันการทำงานของฉันได้รับการกำหนดค่าด้วยสมุดงาน Excel จำนวนมาก ฉันใช้ไฟล์นี้เพื่อเปิด Git-gui สำหรับโครงการที่ไม่ใช่ Excel เพียงแค่เพิ่มโฟลเดอร์ git ด้วยมือ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.