Alur Kerja: Menggunakan format dokumen biner di Git tanpa kunci (bergerak dari subversi)

16

Kami adalah konsultan perangkat lunak dengan banyak proyek untuk pelanggan yang berbeda. Kami biasanya menggunakan Subversion, tetapi saat ini sedang mempertimbangkan untuk pindah ke Git.

Sebagian besar dari dokumen yang kami hasilkan dibagikan kepada pelanggan kami (persyaratan, desain global, spesifikasi pengujian, dll), dan kami menggunakan MS Office untuk menghasilkan ini. Di Subversion, kita dapat menggunakan fitur "Kunci" untuk memastikan bahwa tidak ada yang mengedit dokumen yang sama secara bersamaan. Di Git, Anda tidak dapat melakukan itu karena sifatnya yang terdistribusi, git tidak memiliki kunci.

Kunci benar-benar sedikit lebih dari mekanisme komunikasi, tetapi mereka sangat efektif.

Saat ini, kode kami dan dokumen yang dihadapi pelanggan biasanya dalam berbagai subfolder dari repositori svn yang berbeda. Saat pindah ke git, apa yang akan Anda rekomendasikan agar kami lakukan? Saya melihat serangkaian opsi:

  1. Kami memindahkan repositori svn ke git 1-on-1. Alih-alih menggunakan kunci pada file Office, kami melakukan apa yang disarankan orang git dan entah bagaimana mencoba mengubah alur kerja kami untuk memperbaikinya. Ini bisa berfungsi di cabang pada edit dokumen apa pun, dan menggabungkannya dengan ulasan. Pendekatan ini memecah misalnya lembar Excel yang berisi informasi manajemen proyek; mereka mudah diedit oleh anggota tim (dan kami menganjurkan hal ini dilakukan), tetapi tidak tunduk pada proses peninjauan formal

  2. Kami menggunakan git untuk kode dan svn untuk dokumen dan manajemen proyek. Ini memiliki kelemahan bahwa beberapa dokumen desain-ish tertentu tidak akan "dekat" dengan kode yang ditentukannya, meningkatkan kemungkinan orang lupa untuk memperbaruinya. Selain itu, setiap orang harus menggunakan dan memahami dua set alat. Yang mengatakan, mungkin ini adalah kesempatan besar untuk pindah ke alat dokumen berbasis teks (lateks, penurunan harga, HTML, apa pun) untuk dokumen desain yang tidak menghadap pelanggan.

  3. Seperti 1, tetapi kita meretas git lockperintah yang melakukan apa yang dilakukan kunci svn untuk kita (mengganti tanda baca-saja dengan tepat dan menyinkronkan dengan server melalui beberapa cara).

Saya tidak membeli argumen bahwa kunci tidak berfungsi dalam DVCS karena sistem seharusnya bekerja ketika Anda sepenuhnya offline. Kunci Svn dapat diganti juga; mereka adalah mekanisme komunikasi . Tanpa semacam koneksi jaringan, komputer Anda tidak akan banyak berkomunikasi.

Kita tidak bisa menjadi satu-satunya toko yang sangat senang dengan svn lockkesesuaian alur kerja kita, bukan?

Ada ide atau tips?

Saya menemukan /programming/119444/locking-binary-files-using-git-version-control-system tetapi pembahasannya agak teknis; Saya sedang mencari cara untuk memecahkan atau menghindari masalah praktis dari dua anggota tim yang mengedit file biner yang sama secara bersamaan.

skrebbel
sumber
Bisakah Anda mengklarifikasi bagaimana Anda "membagikan" dokumen Anda dengan pelanggan? Saya berharap mereka memiliki akses hanya baca dan perubahan dikelola oleh tim Anda sebagai hasil dari permintaan perubahan dari mereka. Apakah itu benar?
vaughandroid
2
Anda mungkin ingin menggunakan alat manajemen aset (dengan fitur penguncian) alih-alih VCS untuk menangani dokumen biner. Saya bekerja di tempat yang memiliki 2 GB gambar och diperiksa di SVN, yang membuat melakukan semuanya sangat lambat. Setelah kami memindahkan semua itu ke folder di bawah cadangan semuanya menjadi cepat dan lebih mudah untuk ditangani.
Spoike
1
@ Baqueta Melalui email atau di atas kertas. Intinya adalah "Hanya gunakan teks untuk dokumen!" bukanlah pendekatan yang masuk akal di sini, karena upaya yang dilakukan agar terlihat setengah layak jauh lebih tinggi daripada alat seperti MS Word.
skrebbel
@Seperti, terdengar seperti jawaban yang valid untuk saya :-) Lagi pula, ada rekomendasi?
skrebbel
@ skrebbel Satu kata, LaTeX.
Kyrias

Jawaban:

5

Saya akan menyarankan Anda untuk tetap dengan SVN untuk dokumen MS Office karena dua alasan:

  1. Sudah ada di sana dan itu (menurut saya) lebih baik untuk menyimpan dokumen Office (lihat di sini ). Memiliki lebih banyak alat pihak ketiga untuk melakukan ini.
  2. Kuncinya, meskipun dapat dicapai dalam Git, bukanlah "cara Git dalam melakukan sesuatu". Jika Anda membutuhkan fitur-fitur ini, tetap gunakan alat yang memberi Anda solusi terbaik.

Ada pepatah yang saya suka mengatakan sesuatu seperti ini: "Ketika Anda Memegang Palu, Segalanya Tampak Seperti Kuku". Hanya karena Anda pindah ke Git untuk menyimpan kode Anda, itu tidak berarti Anda harus menggunakannya untuk menyimpan dokumen Anda.

Yoel Gluschnaider
sumber
Bagaimana jika kode dan dokumen berada dalam repositori SVN yang sama?
Jimmy T.
2

Kontrol versi kode bukan alat terbaik untuk bekerja pada file Office, karena mereka biner dan alat ini berfungsi pada modifikasi tingkat file.

Gunakan alat kolaborasi, seperti MediaWiki (gratis) atau Atlassian Confluence (berbayar), dari mana Anda dapat dengan mudah mengekstrak dokumen Word. Atau gunakan LaTex untuk menghasilkan file Office.

Biarkan saya memperluas ...

Jika Anda perlu berkolaborasi, Anda harus mengadopsi model yang menyoroti modifikasi (misalnya mengubah kata, diulang, atau hanya mengubah font) ke unit, misalnya file.

SVN dan Git, meskipun dipikirkan kode, adalah alat tingkat rendah yang membandingkan file mereka dengan konten tekstual. Tetapi masalahnya adalah mereka hanya dapat bekerja pada file teks, karena mereka tidak peduli tentang sifat / isi file untuk mengekstraksi model modifikasi tingkat tinggi.

Contoh yang jelas adalah file gambar . Meskipun TortoiseMerge adalah alat yang membantu pengguna SVN dengan membandingkan gambar untuk modifikasi mereka yang sebenarnya, biasanya VCSdijalankan oleh tambalan konten di atas file. Biarkan saya jelaskan. Alat seperti TortoiseMerge dapat memberi tahu Anda bahwa versi baru file gambar diubah hanya dengan beberapa piksel, atau pencahayaan jika menerapkan analisis HSV yang lebih kompleks dari kedua file tersebut. Anda dapat menambahkan tanda air atau mengubah level warna, alat yang membandingkan file gambar akan menyoroti perbedaan Anda jika menerapkan algoritma perbandingan yang baik. Tetapi untuk memeriksa file baru di klien Anda harusmenghasilkan delta. Delta adalah serangkaian garis yang dihapus dan garis yang ditambahkan ke file. File biner tidak memiliki line break jika mereka tidak terjadi untuk memiliki \r\n, atau serupa, dalam payload mereka, dan dalam delta jika Anda mengubah satu karakter Anda mengganti seluruh baris.

Jadi inilah masalahnya. File biner tidak baik untuk kontrol versi karena Anda bisa hampir mengganti seluruh file untuk setiap revisi. Pertimbangkan ketika Anda menulis file Office menggunakan MS Office dan suntingan kolaborator Anda dengan OpenOffice. Jika mereka menerapkan bahkan versi yang sedikit berbeda dari algoritma kompresi file OpenXML, Anda akan berakhir di file yang sama sekali berbeda bahkan jika Anda mengubah satu koma dalam dokumen.

Perangkat lunak kolaborasi membuat dokumen secara internal dalam format berbasis teks, karena teks adalah apa yang benar-benar bermakna bagi perusahaan Anda, dan dapat menghitung perbedaan atau menangani konflik. LaTex, atau penurunan harga jika Anda suka, adalah cara untuk menyimpan dokumen sebagai file teks dengan markup lanjutan, jadi tidak seperti file TXT klasik yang tidak memiliki kontrol font / format.

Tapi jelas pelanggan Anda tidak akan suka membuka file penurunan harga, bukan? Ok, Anda bisa saja, dan maksud saya sederhana saja, gunakan perangkat lunak apa pun yang saat ini terlalu malas bagi Google untuk mengonversi dokumen sumber ke PDF, Word atau apa pun.

Meringkas

Jika Anda mulai memeriksa file teks ke kontrol sumber Anda, Anda memiliki kontrol lebih besar atas riwayat file dan dapat dengan mudah mengelola konflik, terutama tanpa menggunakan kunci VCS.

Sebelum membagikan dokumen secara resmi, Anda memerlukan rutin untuk mengekspor dokumen teks sumber ke file Office

Memisahkan dua langkah membuat orang senang dengan biaya kurva belajar.

usr-local-ΕΨΗΕΛΩΝ
sumber
File teks Linux dan Mac tidak memiliki garis sesuai dengan definisi Anda :-) delta dapat dibuat untuk file biner dengan mudah. Anda memutuskan algoritma yang berbeda. SVN misalnya membuat delta-delta kecil yang bagus untuk file biner (setidaknya dengan file .dll besar yang merupakan pengalaman paling banyak bagi saya)
gbjbaanb
Ya tentu saja non-Windows memiliki terminator jalur yang berbeda. Ngomong-ngomong, bahkan jika Anda berhasil membuat delta yang lebih kecil (saya perlu mengulangi sedikit jawaban) apakah itu membuat perbedaan yang dapat dibaca manusia? Tentu saja tidak. Anda tidak akan memberi tahu kelas mana yang telah dimodifikasi antara DLL. Dan lagi masalahnya adalah bahwa dua kompiler dapat (saya katakan mungkin ) menghasilkan file yang sama sekali berbeda dengan menyusun ulang kelas seperti yang mereka suka. Itulah inti jawabannya
usr-local-ΕΨΗΕΛΩΝ
-1

Anda dapat menggunakan git untuk dokumen-dokumen itu tanpa menambahkan kunci. Pilih alur kerja git yang memblokir push ke cabang master jika tidak di master. (Ada beberapa alur kerja untuk dipilih.) Ini akan mencegah orang saling menimpa modifikasi masing-masing ke file dokumen biner. Asumsikan dua orang memodifikasi dokumen biner yang sama. Yang pertama yang mendorongnya untuk menguasai mendapat perubahan. Yang kedua akan diblokir karena salinan mereka ada di belakang cabang master. Mereka harus melakukan sinkronisasi terlebih dahulu. Jadi orang kedua melakukan sinkronisasi. Ini akan menampilkan konflik gabungan untuk dokumen biner. Orang itu menyimpan versi mereka di suatu tempat dan menyelesaikan konflik dengan mengambil versi dari master (yang didorong oleh orang pertama). Pada titik ini file orang kedua diperbarui dengan cabang master. Mereka menggabungkan perubahan mereka ke dokumen biner terbaru (dengan tangan), yang kemudian akan berisi perubahan orang pertama dan orang kedua. Kemudian versi baru didorong ke master dan menjadi cabang master baru. Penggabungan itu menyebalkan, tapi itu hanya terjadi ketika ada konflik. Juga, perubahan tidak hilang atau ditimpa. Konflik terdeteksi dan pengguna dapat menyelesaikannya dengan bersih.

Nani Tatiana Isobel
sumber
4
Nyeri penggabungan yang tepat inilah yang seharusnya dicegah oleh kunci.
Dari
Sebenarnya ada alat menggabungkan yang dapat menggabungkan dokumen Word. Namun saya tidak punya pengalaman dengan mereka, jadi seberapa baik mereka saya tidak tahu?
Pete
Terima kasih atas jawaban anda. Saya melihat bahwa ini adalah cara kerja Git. @Pete, Word itu sendiri dapat melakukan Diff yang lumayan, tidak yakin tentang penggabungan. Tapi tetap saja, itu adalah rasa sakit yang lebih mudah dihindari dengan kunci. Kami jarang mengedit dokumen Office secara bersamaan; sebagian besar pekerjaan kami (termasuk dokumen terperinci) ada dalam kode. Pertanyaan ini adalah tentang 2% dari kasus di mana 2 orang melakukan mengedit dokumen yang sama pada waktu yang sama. Karena 2%, bukan 30%, solusi penggabungan terasa di bawah optimal.
skrebbel
-2

Satukan 2 solusi pertama Anda bersama dan Anda tidak perlu yang ketiga.

Jika Anda menyimpan spreadsheet pada disk sebagai CSV, Excel akan tetap mengeditnya dan kemudian git akan dengan senang hati menggabungkannya untuk Anda.

Demikian pula, Anda dapat membuka, mengedit, dan menyimpan file Anda di Word jika itu HTML atau (tolonglah kami) RTF. Word tentu saja akan menambahkan lebih banyak mengasapi daripada teks yang berguna, tetapi itu hanya teks yang git senang untuk bergabung untuk Anda.

Memang, solusi ini mengasumsikan bahwa Anda tidak menggunakan atau bisa menjauh dari fitur MS-spesifik yang benar-benar hanya mungkin masalah di sisi Excel.

Kecuali tentu saja Anda juga memerlukan Word untuk diinstal pada sistem agar dapat membaca dokumentasi Anda, yang dengan sendirinya merupakan prospek yang menakutkan bagi saya ...

Steven
sumber
1
Betulkah? Apakah Anda menyarankan kembalinya ke zaman batu untuk dapat menghindari penggabungan konflik?
Petter Nordlander
Saya tidak yakin saya mengerti apa yang sebenarnya Anda rasakan adalah zaman batu tentang menyimpan dalam format teks versus format biner ...
Steven