Excel dosyaları ve SQL şema dosyalarında daha iyi belge sürümü kontrolü nasıl gerçekleştirilir


101

Birkaç Excel dosyası ve SQL şema dosyasından sorumluyum. Bu dosyalar üzerinde nasıl daha iyi belge sürümü kontrolü yapmalıyım?

Bu dosyalarda değiştirilen kısmı (farklı kısım) bilmem ve tüm versiyonları referans için saklamam gerekiyor. Şu anda dosya adına zaman damgası ekliyorum, ancak verimsiz göründüğünü gördüm.

Daha iyi belge sürümü kontrolü yapmanın bir yolu veya iyi bir uygulama var mı?

Bu arada, editörler bana dosyaları e-posta ile gönderiyor.


5
Bu Excel dosyalarını CSV dosyalarına dönüştürebilir ve ardından git kullanarak izleyebilirim, böylece değişiklikleri görmek için diff kullanabilirim. Başka iyi bir uygulama var mı?
Marcus Thornton

Kabul ettiğinizden daha iyi olduğunu düşündüğüm diğer cevaplara bakın.
nealmcb

Yanıtlar:


45

Sorunuzu etiketlediğinizden beri Bunun için Git kullanımını sorduğunuzu varsayıyorum.

SQL dökümleri normal metin dosyalarıdır, bu yüzden onları Git ile izlemek çok mantıklıdır. Sadece bir havuz oluşturun ve bunları içinde saklayın. Bir dosyanın yeni bir sürümünü aldığınızda, üzerine yazın ve kesin, Git sizin için her şeyi çözecek ve bu dosyanın değişiklik tarihlerini görebilecek, bu dosyanın belirli sürümlerini kontrol edebilecek ve farklı sürümleri karşılaştırabileceksiniz.

.xlsxAynısı, onları açarsanız da geçerlidir . .xlsxdosyalar, XML dosyalarının dizinleri sıkıştırılmıştır (Bkz. Geçerli bir xlsx dosyası, dahili alt bileşenlerinden nasıl düzgün bir şekilde birleştirilir? ). Git, sıkıştırılmamışsa bunları ikili olarak görecek. .xlsxArşivin içindeki tek tek XML dosyalarının sıkıştırmasını açmak ve değişiklikleri izlemek mümkündür .

Bunu .xlsdosyalarla da yapabilirsiniz , ancak buradaki sorun, .xlsformatın ikili olmasıdır, bu nedenle ondan anlamlı farklar elde edemezsiniz. Ancak yine de değişiklik geçmişini görebilir ve belirli sürümleri kontrol edebilirsiniz.


4
Evet, biliyorum git. SQL şemalarını izlerken git'in iyi olduğunu düşünüyorum. Excel dosyalarına (.xlsx ve .xls) gelince, ikili dosyalar oldukları için git kullanarak onları izlemek, insan bakış açısıyla neyin değiştirildiğini bana gösteremez. Kafam karıştıran şey bu.
Marcus Thornton

2
@MarcusThornton .xlsxXML, bu yüzden iyi çalışmalı. Genel olarak, iki .xlsdosyayı kolayca karşılaştırmanın bir yolu yoktur . Muhtemelen .csvyanına koyacak bir ön işleme kancası ekleyebilir ve bunları farklı hale getirebilirsiniz.
kirelagin

86

Burada yazdığım cevap bu durumda uygulanabilir. Xls2txt adlı bir araç , .xls dosyalarından insan tarafından okunabilir çıktı sağlayabilir. Kısacası, bunu .gitattributes dosyanıza koymalısınız:

*.xls diff=xls

Ve .git / config dosyasında:

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

Elbette, diğer dosya türleri için de benzer araçlar bulabileceğinizden eminim, bu git diffda ofis belgeleri için çok kullanışlı bir araçtır. Şu anda global .gitconfig dosyamda sahip olduğum şey bu:

[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 kitabının konuyla ilgili iyi bir bölümü var: 8.2 Git - Git Özelliklerini Özelleştirme


2
Windows7'de benim için çalışmıyor. Windows için catdoc sürümünü buradan indirdim : blog.brush.co.nz/2009/09/catdoc-windows , gitconfig ve özniteliklerini yukarıda açıklandığı gibi düzenlemek yerine. ancak yine de alıyorum: 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 dosyalar a / src /.../ test.xls ve b / src /.../ test.xls farklı GIT sürümü: 1.7.6.msysgit.1
katrin

Dokümanı hala bir doküman dosyası olarak mı yoksa bir metin dosyası olarak mı depoluyor? Metin dosyasıysa, dokümanı nasıl kurtarırsınız?
CMCDragonkai

@CMCDragonkai Bunun dosyanın nasıl saklandığına bir etkisi yoktur, sadece diff komutunun çıktısı etkilenir.
1615903

1
Yani hala tüm dosyayı depoluyor, farkları değil?
CMCDragonkai

3
Re: xls2txt: Polonya'daki bir web sitesinden kapalı kaynaklı bir araç kurmak konusunda son derece isteksiz. Bu aynı şey olabilir mi? github.com/hroptatyr/xls2txt Yine de README yok ...
jcollum

22

Son birkaç gündür bu problemle uğraşıyorum ve Excel dosyalarını kaynak kontrolünde saklamaları çok daha kolay olacak şekilde ayıklamak ve normalleştirmek için küçük bir .NET yardımcı programı yazdım. Çalıştırılabilir dosyayı burada yayınladım:

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

..ve buradaki kaynak:

https://bitbucket.org/htilabs/ooxmlunpack

Herhangi bir ilgi varsa, bunu daha yapılandırılabilir hale getirmekten mutluluk duyarım, ancak şu anda yürütülebilir dosyayı bir klasöre (örneğin, kaynak deponuzun köküne) koymalısınız ve çalıştırdığınızda:

  • Klasörü ve alt klasörlerini .xlsx ve .xlsm dosyaları için tarayın
  • Dosyanın bir kopyasını * .orig olarak alın.
  • Her dosyayı açın ve sıkıştırmadan yeniden sıkıştırın.
  • Arşivdeki geçerli XML olan tüm dosyaları oldukça yazdırın.
  • Calcchain.xml dosyasını arşivden silin (çünkü çok değişiyor ve dosyanın içeriğini etkilemiyor).
  • Biçimlendirilmemiş metin değerlerini satır içi yapın (aksi takdirde bunlar, tek bir hücre değiştirilse bile dahili XML'de büyük değişikliklere neden olan bir arama tablosunda tutulur).
  • Formüller içeren tüm hücrelerden değerleri silin (çünkü bunlar yalnızca sayfanın bir sonraki açılışında hesaplanabilir).
  • Çıkarılan zip arşiv içeriğini içeren bir *. Ayıklanmış alt klasör oluşturun.

Açıkçası, bunların hepsi gerekli değildir, ancak sonuç, yine de Excel'de açılacak, ancak farklılaşmaya ve artımlı sıkıştırmaya çok daha uygun olan bir elektronik tablo dosyasıdır. Ayrıca, çıkarılan dosyaların saklanması da sürüm geçmişinde her sürümde hangi değişikliklerin uygulandığını çok daha açık hale getirir.

Dışarıda herhangi bir iştah varsa, aracı daha yapılandırılabilir hale getirmekten mutluluk duyuyorum çünkü herkes içeriğin çıkarılmasını veya muhtemelen formül hücrelerinden değerlerin çıkarılmasını istemeyecek, ancak bunların ikisi de şu anda benim için çok yararlı.

Testlerde, 2 MB tablo ortaya koyarken, 21 MB, ama sonra etkili bir şekilde kullanarak sürümleri arasındaki farkları 1.9 MB Mercurial veri dosyasındaki her arasındaki küçük değişikliklerle bunun beş sürümlerini depolamak ve görselleştirmek başardı ötesinde karşılaştırın içinde metin modu.

Not: Mercurial kullanmama rağmen, çözümümü araştırırken bu soruyu okudum ve çözümle ilgili Mercurial'e özgü hiçbir şey yok, Git veya başka herhangi bir VCS için düzgün çalışmamalı.


Aslında denemedim, ama sanırım - eğer denersen bunu bilmek harika olur
Jon G

@JonG LibreOffice ile çalışmasını sağlayamıyorum ve bitbucket deposunda Sorunlar sekmesi yok. Bir sorunu çözebilirsek katkıda bulunmak isterim!
Christian Droulers

Merhaba @ christian-droulers, Repo'da sorunu etkinleştirdim, oraya bir şeyler eklemekten çekinmeyin!
Jon G

@JonG Bu harika görünüyor, farklı bir sürüm geçmişine sahip olmak, belgeyle ilgili birçok senaryoda gerçekten yararlı olabilir! Peki dosyanın Excel'de açılması neden önemlidir? .Orig dosyasını kullanamaz mısın? Normalleştirmelerin yapılandırılabilir / dinamik olabileceğini düşünüyor musunuz, böylece kod docx / pptx için de kullanılabilir mi?
Jørgen Tvedt

10

Tante, Git'te ZIP tabanlı dosya biçimlerini yönetmede çok basit bir yaklaşım önerdi :

~ / .Gitconfig dosyanızı açın (mevcut değilse oluşturun) ve aşağıdaki stanza'yı ekleyin:

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

3
daha sonra, Peng Xu çözümü genişletti ve yalnızca diff değişikliklerini görüntülemeye ek olarak filtre kullanarak zip tabanlı dosyaları sürümlemeye izin verdi: tante.cc/2010/06/23/managing-zip-based-file-formats-in-git/ …
Roberto Cabellon

5

Açık belge uzantısını kullanın .fods. Hem Excel hem de LibreOffice'in açabileceği düz, sıkıştırılmamış bir XML işaretleme biçimidir ve farklar iyi görünecektir.


2

Excel çalışma kitapları için açık kaynaklı bir Git komut satırı uzantısı oluşturduk: https://www.xltrail.com/git-xltrail .

Özetle, ana özellik, git diffçalışma kitabının VBA içeriğindeki farkı göstermesi için herhangi bir çalışma kitabı dosya biçimi üzerinde çalışma yapmasıdır (bir noktada, bu çalışmayı çalışma sayfası içeriği için de yapacağız).

Hala erken günler ama yardımcı olabilir.


ve iki yıldan fazla bir süre sonra hala yalnızca VBA'yı yönetirken, diğer çözümlerin çoğu tüm elektronik tabloyu işliyor. On yıldan fazla bir süredir bir elektronik tablonun VBA içeriğini önemsemedim (veya daha doğrusu, aktif olarak herhangi bir şeyden kaçınmaya çalıştım ...).
Auspex

1

Başka bir yanıtın yorumunda belirtildiği gibi, .xlsx dosyaları yalnızca XML'dir.

XML dizinine ( git-able olan) ulaşmak için, .xlsx dosyasını bir dizine "açmanız" gerekir. Windows'ta bunu görmenin hızlı bir yolu, <dosya adı> .xlsx dosyasını <dosya adı> .zip olarak yeniden adlandırmaktır ve iç içeriği göreceksiniz. Bunu ikili dosyayla birlikte saklardım, böylece ödünç aldığınızda, belgeyi Excel'de açmak için başka adımlar atmanıza gerek kalmaz.


1
En azından kullandığım zip aracı (7-zip) tüm dosyaları açmaya / çıkarmaya izin veriyor - onları yeniden adlandırmanıza gerek yok.
Onur

1

Bu Excel yardımcı programı benim için çok iyi çalışıyor:

Excel için Sürüm Kontrolü

Çalışma kitapları ve VBA makroları için oldukça basit bir sürüm oluşturma aracıdır. Bir sürümü işledikten sonra, PC'nizdeki bir Git deposuna kaydedilir. Tekrar denemedim. SQL şema dosyaları, ancak eminim etrafta bir yol vardır.


Bu, .xlsm dosyalarına gömülü modüllerle çalışan bulduğum tek araçtır. Bildiğim tek alternatif, her modülü kendi dosyasına aktarmak için bir makro çalıştırmak, onları işlemek ve ardından çekip birleştirdikten sonra hepsini tekrar içe aktarmak için bir makro çalıştırmak. xltrailbundan çok daha kolay.
Michael Hoffmann

0

Excel dosyalarıyla yaklaşımım Jon'unkine benzer, ancak ham Excel metin verileriyle çalışmak yerine daha kolay biçimlere aktarıyorum.

İşte kullandığım araç: https://github.com/stenci/ExcelToGit/tree/master

İhtiyacınız olan tek şey .xlsm dosyasını indirmektir ( bu sayfadaki Raw'u Görüntüle bağlantısını tıklayın .) Benioku'da açıklandığı gibi Excel ayarını kontrol etmeyi unutmayın. SQL verilerini metin dosyalarına dışa aktarmak için kodu da ekleyebilirsiniz.

Çalışma kitabı hem ikili Excel'den metin dosyalarına bir dönüştürücü hem de Windows Git araçlarının başlatıcısıdır ve Excel ile ilgili olmayan projelerde de kullanılabilir.

Çalışan sürümüm düzinelerce Excel çalışma kitabıyla yapılandırıldı. Dosyayı Excel dışı projeler için Git-gui'yi açmak için de kullanıyorum, git klasörünü elle ekliyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.