เวิร์กโฟลว์: การใช้รูปแบบเอกสารไบนารีใน Git โดยไม่ล็อค (ย้ายจากการโค่นล้ม)


16

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

ส่วนสำคัญของเอกสารที่เราผลิตนั้นจะถูกแบ่งปันกับลูกค้าของเรา (ความต้องการ, การออกแบบระดับโลก, รายละเอียดการทดสอบ, ฯลฯ ) และเราใช้ MS Office เพื่อผลิตสิ่งเหล่านี้ ในการโค่นล้มเราสามารถใช้คุณสมบัติ "ล็อค" เพื่อให้แน่ใจว่าไม่มีใครแก้ไขเอกสารเดียวกันในเวลาเดียวกัน ใน Git คุณไม่สามารถทำเช่นนั้นได้เนื่องจากลักษณะการกระจายของมัน Git ไม่มีการล็อค

ล็อคเป็นมากกว่ากลไกการสื่อสารเพียงเล็กน้อย แต่มันมีประสิทธิภาพมาก

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

  1. เราย้ายที่เก็บ svn ไปที่ git 1-on-1 แทนที่จะใช้การล็อกไฟล์ Office เราทำในสิ่งที่คน git แนะนำและพยายามเปลี่ยนเวิร์กโฟลว์ของเราเพื่อแก้ไข สิ่งนี้อาจทำงานได้ในสาขาในการแก้ไขเอกสารใด ๆ และรวมเข้ากับการตรวจสอบ วิธีนี้แบ่งออกเป็นเช่นแผ่นงาน Excel ที่มีข้อมูลการจัดการโครงการ พวกเขาแก้ไขได้อย่างง่ายดายโดยสมาชิกในทีม (และเราขอแนะนำให้ดำเนินการนี้) แต่ไม่ต้องผ่านกระบวนการตรวจสอบอย่างเป็นทางการ

  2. เราใช้ git สำหรับรหัสและ svn สำหรับเอกสารและการจัดการโครงการ นี่เป็นข้อเสียที่เอกสารการออกแบบเพิ่มเติมบางอย่างจะไม่ "ใกล้เคียง" รหัสที่ระบุเพิ่มโอกาสที่ผู้คนลืมที่จะอัปเดต นอกจากนี้ทุกคนต้องใช้และเข้าใจเครื่องมือสองชุด ที่กล่าวว่าอาจเป็นโอกาสที่ดีในการย้ายไปยังเครื่องมือ doc แบบใช้ข้อความ (ลาเท็กซ์, markdown, HTML, อะไรก็ได้) สำหรับเอกสารการออกแบบที่ไม่ใช่ลูกค้า

  3. เช่นเดียวกับ 1 แต่เราแฮ็กgit lockคำสั่งที่ทำในสิ่งที่ svn lock ทำเพื่อเรา (สลับสถานะการอ่านอย่างเดียวอย่างเหมาะสมและซิงค์กับเซิร์ฟเวอร์ผ่านวิธีการบางอย่าง)

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

เราไม่สามารถเป็นร้านเดียวที่มีความสุขมากกับsvn lockกระบวนการทำงานที่เหมาะสมใช่ไหม?

ความคิดหรือเคล็ดลับใด ๆ

ฉันพบ/programming/119444/locking-binary-files-using-git-version-control-systemแต่การสนทนาค่อนข้างเป็นเรื่องทางเทคนิค ฉันกำลังมองหาวิธีในการแก้หรือหลีกเลี่ยงปัญหาในทางปฏิบัติของสมาชิกในทีมสองคนที่แก้ไขไฟล์ไบนารีเดียวกันในเวลาเดียวกัน


คุณช่วยอธิบายได้อย่างไรว่า "แบ่งปัน" เอกสารของคุณกับลูกค้าได้อย่างไร ฉันหวังว่าพวกเขาจะเข้าถึงแบบอ่านอย่างเดียวและทีมของคุณจะได้รับการจัดการซึ่งเป็นผลมาจากการร้องขอการเปลี่ยนแปลงจากพวกเขา ถูกต้องหรือไม่
vaughandroid

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

1
@Baqueta ทางอีเมลหรือบนกระดาษ ประเด็นก็คือ "ใช้ข้อความสำหรับเอกสารเท่านั้น!" ไม่ใช่วิธีการที่สมเหตุสมผลในที่นี้เนื่องจากความพยายามในการทำให้มันดูครึ่งดีกว่าในเครื่องมืออย่าง MS Word
skrebbel

@Spike ดูเหมือนว่าคำตอบที่ถูกต้องสำหรับฉัน :-) ยังไงก็ตามคำแนะนำใด ๆ ?
skrebbel

@skrebbel หนึ่งคำ, LaTeX
kyrias

คำตอบ:


5

ฉันขอแนะนำให้คุณอยู่กับ SVN สำหรับเอกสาร MS Office ด้วยเหตุผลสองประการ:

  1. มันมีอยู่แล้วและมันเป็น (ในความคิดของฉัน) ดีกว่าสำหรับการเก็บเอกสาร Office (ดูที่นี่ ) มีเครื่องมือบุคคลที่สามมากขึ้นสำหรับการทำเช่นนี้
  2. ล็อคแม้ว่าสามารถทำได้ใน Git ไม่ใช่ "วิธีการทำสิ่งที่ Git" หากคุณต้องการคุณสมบัติเหล่านี้ให้ใช้เครื่องมือที่ให้ทางออกที่ดีที่สุดแก่คุณ

มีคำกล่าวว่าฉันชอบที่บอกว่าสิ่งนี้: "เมื่อคุณถือค้อนทุกอย่างดูเหมือนเล็บ" เพียงเพราะคุณกำลังย้ายไปที่ Git เพื่อถือรหัสคุณไม่ได้หมายความว่าคุณควรใช้มันเพื่อเก็บเอกสารของคุณ


เกิดอะไรขึ้นถ้ารหัสและเอกสารอยู่ในที่เก็บ SVN เดียวกัน
Jimmy T.

2

การควบคุมเวอร์ชันของรหัสไม่ใช่เครื่องมือที่ดีที่สุดในการทำงานกับไฟล์ Office เพราะมันเป็นไบนารีและเครื่องมือเหล่านี้ทำงานในการปรับเปลี่ยนระดับไฟล์

ใช้เครื่องมือการทำงานร่วมกันเช่น MediaWiki (ฟรี) หรือ Atlassian Confluence (ชำระเงิน) ซึ่งคุณสามารถแยกเอกสาร Word ได้อย่างง่ายดาย หรือใช้ LaTex เพื่อสร้างไฟล์ Office

ให้ฉันขยาย ...

หากคุณต้องการทำงานร่วมกันคุณต้องปรับใช้แบบจำลองที่เน้นการแก้ไข (เช่นเปลี่ยนคำใช้ถ้อยคำใหม่หรือเปลี่ยนแบบอักษร) เป็นหน่วยเช่นไฟล์

SVN และ Git แม้ว่าจะคิดว่าเป็นโค้ด แต่เป็นเครื่องมือระดับต่ำที่เปรียบเทียบไฟล์กับเนื้อหาที่เป็นข้อความ แต่ปัญหาคือพวกเขาสามารถทำงานได้กับไฟล์ข้อความเท่านั้นเพราะพวกเขาไม่สนใจเกี่ยวกับธรรมชาติ / เนื้อหาของไฟล์เพื่อแยกโมเดลการแก้ไขระดับสูง

ตัวอย่างที่ชัดเจนเป็นไฟล์ภาพ แม้ว่าTortoiseMergeเป็นเครื่องมือที่ช่วยให้ผู้ใช้ SVN โดยการเปรียบเทียบภาพสำหรับการปรับเปลี่ยนที่แท้จริงของพวกเขา แต่ปกติVCSเรียกใช้โดยแพทช์เนื้อหามากกว่าไฟล์ ให้ฉันอธิบาย เครื่องมือเช่น TortoiseMerge สามารถบอกคุณได้ว่าไฟล์รูปภาพรุ่นใหม่มีการเปลี่ยนแปลงเพียงไม่กี่พิกเซลหรือความส่องสว่างหากใช้การวิเคราะห์ HSV ที่ซับซ้อนมากขึ้นของไฟล์ทั้งสอง คุณสามารถเพิ่มลายน้ำหรือเปลี่ยนระดับสีเครื่องมือที่เปรียบเทียบไฟล์รูปภาพจะเน้นความแตกต่างให้กับคุณหากใช้อัลกอริทึมการเปรียบเทียบที่ดี แต่เพื่อที่จะตรวจสอบไฟล์ใหม่ในไคลเอนต์ของคุณจะต้องผลิตเดลต้า delta คือชุดของบรรทัดที่ถูกลบและบรรทัดที่ถูกเพิ่มในไฟล์ ไฟล์ไบนารีไม่มีการแบ่งบรรทัดถ้าพวกเขาไม่ได้เกิดขึ้นที่จะมี\r\nหรือที่คล้ายกันในส่วนของข้อมูลของพวกเขาและในเดลต้าถ้าคุณเปลี่ยนเป็นตัวละครเดียวที่คุณจะเปลี่ยนสายทั้งหมด

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

โปรแกรมการทำงานร่วมกันแสดงเอกสารภายในในรูปแบบข้อความเนื่องจากข้อความเป็นสิ่งที่มีความหมายต่อ บริษัท ของคุณและสามารถคำนวณความแตกต่างหรือจัดการกับความขัดแย้งได้ LaTex หรือ Markdown หากคุณต้องการเป็นวิธีการจัดเก็บเอกสารเป็นไฟล์ข้อความที่มีมาร์กอัปขั้นสูงดังนั้นจึงไม่เหมือนกับไฟล์ TXT แบบคลาสสิคที่ไม่มีการควบคุมแบบอักษร / การจัดรูปแบบ

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

สรุป

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

ก่อนที่จะแชร์เอกสารอย่างเป็นทางการคุณต้องมีชุดคำสั่งเพื่อส่งออกเอกสารข้อความต้นฉบับไปยังไฟล์ Office

การแยกสองขั้นตอนทำให้ผู้คนมีความสุขในราคาของการเรียนรู้


ไฟล์ข้อความ Linux และ Mac ไม่มีบรรทัดทั้งสองตามคำจำกัดความของคุณ :-) สามารถสร้าง delta สำหรับไฟล์ไบนารีได้อย่างง่ายดาย คุณตัดสินใจเกี่ยวกับอัลกอริทึมที่แตกต่างกัน SVN เช่นสร้างดีสันดอนขนาดเล็กเพียงแค่ปรับให้ไฟล์ไบนารี (อย่างน้อยกับ dll ไฟล์ขนาดใหญ่ซึ่งเป็นสิ่งที่ผมมีประสบการณ์มากที่สุดด้วย)
gbjbaanb

ใช่แน่นอนว่าไม่ใช่ของ Windows มีตัวต่อบรรทัดที่แตกต่างกัน อย่างไรก็ตามแม้ว่าคุณจะสามารถสร้างเดลต้าที่เล็กลง (ฉันจะต้องใช้คำตอบใหม่เล็กน้อย) มันสร้างความแตกต่างที่มนุษย์สามารถอ่านได้หรือไม่? ไม่แน่นอน คุณจะไม่บอกว่าคลาสใดถูกแก้ไขระหว่าง DLLs และอีกปัญหาก็คือคอมไพเลอร์สองตัวอาจ (ฉันบอกว่าอาจ ) ผลิตไฟล์ที่แตกต่างอย่างสิ้นเชิงโดยการจัดลำดับชั้นเรียนตามที่พวกเขาต้องการ นั่นคือประเด็นของคำตอบ
usr-local-ΕΨΗΕΛΩΝ

-1

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


4
ความเจ็บปวดที่รวมกันนี้เป็นสิ่งที่ล็อคควรจะป้องกัน
oefe

มีเครื่องมือผสานความจริงที่สามารถผสานเอกสาร Word ได้ อย่างไรก็ตามฉันไม่มีประสบการณ์ใด ๆ กับพวกเขาดังนั้นฉันจะไม่มีความคิดที่ดีได้อย่างไร?
Pete

ขอบคุณสำหรับคำตอบ. ฉันเห็นว่านี่เป็นวิธีการทำงานของ Git @ Peete, Word เองสามารถทำ Diff ที่ดีงามไม่แน่ใจเกี่ยวกับการผสาน แต่ก็ยังเป็นความเจ็บปวดที่หลีกเลี่ยงได้ง่ายขึ้นด้วยล็อค เราไม่ค่อยแก้ไขเอกสาร Office พร้อมกัน งานส่วนใหญ่ของเรา (รวมถึงเอกสารรายละเอียด) อยู่ในรหัส คำถามนี้เป็นคำถามเกี่ยวกับ 2% ของกรณีที่ 2 คนทำแก้ไขเอกสารเดียวกันในเวลาเดียวกัน ระบุว่าเป็น 2% ไม่ใช่ 30% โซลูชันผสานจะรู้สึกไม่ดี
skrebbel

-2

รวมโซลูชัน 2 ตัวแรกเข้าด้วยกันและคุณไม่จำเป็นต้องใช้วิธีที่สาม

หากคุณบันทึกสเปรดชีตของคุณลงในดิสก์ในรูปแบบ CSV Excel จะยังคงแก้ไขและจากนั้น git ยินดีที่จะผสานให้คุณ

ในทำนองเดียวกันคุณสามารถเปิดแก้ไขและบันทึกไฟล์ของคุณใน Word หากเป็น HTML หรือ (พระเจ้าช่วยเรา) RTF แน่นอนว่า Word จะเพิ่มจำนวน bloat มากกว่าข้อความที่มีประโยชน์ แต่ก็เป็นเพียงข้อความที่คอมไพล์ยินดีที่จะผสานให้คุณ

ได้รับการแก้ปัญหาเหล่านี้สันนิษฐานว่าคุณไม่ได้ใช้งานหรือสามารถย้ายออกจากคุณลักษณะเฉพาะของ MS ซึ่งอาจเป็นปัญหาทางด้าน Excel เท่านั้น

นอกจากว่าคุณจะต้องติดตั้ง Word ในระบบเพื่อให้สามารถอ่านเอกสารของคุณซึ่งเป็นโอกาสที่น่ากลัวสำหรับฉัน ...


1
จริงๆ? คุณแนะนำให้ย้อนกลับไปสู่ยุคหินเพื่อหลีกเลี่ยงการรวมความขัดแย้งหรือไม่?
Petter Nordlander

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