ควรจัดเก็บ CSS แบบย่อใน Git หรือไม่


10

ฉันใช้ Gulp เพื่อสร้าง CSS แบบย่อจากรหัส SASS ของฉันสำหรับโครงการที่ฉันกำลังทำอยู่

ฉันสงสัยว่าเป็นวิธีปฏิบัติที่ดีที่สุดในการสร้าง CSS minified ใหม่นี้เมื่อทำการถ่ายทอดสดจาก Git ...

หรือ

ในการจัดเก็บไฟล์ CSS ขนาดเล็กใน Git พวกเขาจะถูกส่งไปยังการผลิตสดโดยอัตโนมัติโดยไม่ต้องทำงานเพิ่มเติมในส่วนของเซิร์ฟเวอร์?

ฉันขอขอบคุณความคิดของผู้คนในเรื่องนี้ ขอบคุณ!


มีเพียงที่เดียวเท่านั้นที่ย่อ css / js / etc ควรเก็บไว้: /dev/null.
. GitHub หยุดช่วยน้ำแข็ง

(นั่นเป็นเพราะเว็บเซิร์ฟเวอร์ของคุณมีความสามารถในการใช้การขนส่งแบบ gzipped อย่างสมบูรณ์แบบ)
.. GitHub หยุดช่วยน้ำแข็ง

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

คำตอบ:


13

"มันขึ้นอยู่กับ." สำหรับการติดตามการพัฒนาปกติไม่มี สำหรับการปรับใช้คลาวด์และ DevOps มักจะสะดวกหรือจำเป็น

ส่วนใหญ่เวลาที่ @ptyx ถูกต้อง อันที่จริง "ไม่" ของเขาอาจกล่าวได้ค่อนข้างเด่นชัด บางอย่างเช่น "ไม่ไม่! OMG ไม่! "

ทำไมไม่จัดเก็บเนื้อหาที่ย่อขนาดหรือบีบอัดไว้ในระบบควบคุมแหล่งข้อมูลเช่น Git

  1. พวกมันสามารถสร้างขึ้นมาใหม่ได้เกือบเล็กน้อยโดยกระบวนการสร้างของคุณได้ทันทีจากซอร์สโค้ด การจัดเก็บเนื้อหาที่ถูกบีบอัดนั้นเป็นการจัดเก็บเนื้อหาโลจิคัลเดียวกันสองครั้ง มันละเมิดหลักการ "อย่าทำซ้ำตัวเอง" (aka DRY )

  2. เหตุผลเชิงปรัชญาที่น้อยกว่า แต่มีประโยชน์มากกว่านั้นคือสินทรัพย์ที่มีขนาดเล็ก / ปรับให้เหมาะสมนั้นมีความสามารถในการบีบอัดที่ต่ำมากเมื่อเก็บไว้ใน Git ระบบควบคุมแหล่งที่มาทำงานได้โดยตระหนักถึงการเปลี่ยนแปลง ("deltas") ระหว่างรุ่นต่าง ๆ ของแต่ละไฟล์ที่จัดเก็บ ในการทำเช่นนั้นพวกเขา "diff" ไฟล์ล่าสุดกับเวอร์ชันก่อนหน้าและใช้ delta เหล่านี้เพื่อหลีกเลี่ยงการเก็บสำเนาที่สมบูรณ์ของไฟล์ทุกเวอร์ชัน แต่การเปลี่ยนแปลงที่เกิดขึ้นในขั้นตอนลดขนาด / ปรับให้เหมาะสมมักจะลบความเหมือนและจุดที่อัลกอริทึม diff / deltaใช้ ตัวอย่างที่น่าสนใจที่สุดคือการลบตัวแบ่งบรรทัดและช่องว่างอื่น ๆ สินทรัพย์ที่เกิดขึ้นมักจะเป็นเพียงหนึ่งบรรทัดยาว หลาย ๆ ส่วนของกระบวนการสร้างเว็บ - เครื่องมือเช่นBabel , UglifyJS , Browserify ,น้อยกว่าและSass / SCSS -แปลงสินทรัพย์อย่างจริงจัง เอาท์พุทของพวกเขาจะตกอกตกใจ; การเปลี่ยนแปลงอินพุตขนาดเล็กอาจนำไปสู่การเปลี่ยนแปลงครั้งสำคัญ ดังนั้นอัลกอริทึม diff มักจะเชื่อว่ามันเห็นไฟล์ที่แตกต่างกันเกือบทุกครั้ง ที่เก็บของคุณจะเพิ่มขึ้นอย่างรวดเร็ว ดิสก์ของคุณอาจมีขนาดใหญ่พอและเครือข่ายของคุณเร็วพอที่ไม่ต้องกังวลมากนักโดยเฉพาะอย่างยิ่งหากมีค่าในการจัดเก็บสินทรัพย์ที่มีขนาดเล็ก / ใหญ่เป็นสองเท่า - แม้ว่าจะขึ้นอยู่กับจุดที่ 1 สำเนาเพิ่มเติมอาจไร้จุดหมาย บวม

อย่างไรก็ตามมีข้อยกเว้นหลักคือ: การปรับใช้DevOps / cloud ผู้ขายคลาวด์จำนวนมากและทีม DevOps ใช้ Git และสิ่งที่คล้ายกันไม่เพียงเพื่อติดตามการปรับปรุงการพัฒนา แต่ยังรวมถึงการปรับใช้แอพพลิเคชั่นและสินทรัพย์ของพวกเขาเพื่อทดสอบและผลิตเซิร์ฟเวอร์ ในบทบาทนี้ความสามารถของ Git ในการระบุได้อย่างมีประสิทธิภาพ "ไฟล์ใดบ้างที่เปลี่ยนแปลง" มีความสำคัญพอ ๆ กับความสามารถที่ละเอียดมากขึ้นในการพิจารณา "สิ่งที่เปลี่ยนแปลงภายในแต่ละไฟล์" หาก Git ต้องทำสำเนาไฟล์เกือบเต็มสำหรับสินทรัพย์ที่มีขนาดเล็ก / ปรับให้เหมาะสมซึ่งจะใช้เวลานานกว่านั้น แต่จะไม่มีเรื่องใหญ่อะไรเพราะมันยังคงทำงานได้อย่างยอดเยี่ยมช่วยหลีกเลี่ยงการคัดลอก "ไฟล์ทุกไฟล์ในโครงการ" ในแต่ละรายการ ปรับใช้วงจร

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


1
ขอบคุณสำหรับสิ่งนี้! ชื่นชมมาก ฉันทำเครื่องหมายคำตอบนี้เป็นคำตอบแทนเนื่องจากดูเหมือนว่าจะอธิบายได้ดีกว่ามาก
Connor Gurney

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

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

DevOps สามารถใช้ git hooks เพื่อกระตุ้นการลดขนาดลงบนเซิร์ฟเวอร์ที่ปรับใช้โดยอัตโนมัติเพื่อให้ได้ประโยชน์สูงสุดจากทั้งสองโลกหรือไม่
Buttle Butkus

@ButtleButkus ขึ้นอยู่กับบนเซิร์ฟเวอร์ที่ปรับใช้ ในการพึ่งพาโพสต์ฮุคคุณจะต้อง 1 / สมมติว่ามีทรานสฟิลเลอร์ตัวแปลงและตัวเพิ่มประสิทธิภาพที่เหมาะสมอยู่บนเป้าหมายหรือ 2 / โหลดก่อนที่จะรันโพสต์ hooks 1 / เป็นลูกเต๋า 2 / กำหนดค่าใช้จ่ายในการโหลด / เวลาแฝงในการปรับใช้ทุกครั้ง นอกจากนี้ยังแนะนำโหมดความล้มเหลวใหม่ที่เป็นไปได้และข้อกำหนดในการดีบักโพสต์ hooks ในสภาพแวดล้อมระยะไกลทึบแสงและชั่วคราว ไม่เหมาะ ดังนั้น hooks ไม่ใช่กระสุนเงิน การแปลง / การปรับแต่งสินทรัพย์ล่วงหน้าอาจไม่เหมาะสม แต่มีความแข็งแกร่งและสามารถใช้งานได้จริง
Jonathan Eunice

17

เลขที่

การควบคุมแหล่งที่มาควรมีแหล่งที่มาเท่านั้น ถ้ามันถูกสร้างขึ้นจากแหล่งที่มามันไม่ได้อยู่ในนั้น - และควรถูกสร้างขึ้นโดยกระบวนการสร้างของคุณ

เหตุผลพื้นฐานที่คุณไม่ต้องการแหล่งที่มาของการควบคุมสิ่งประดิษฐ์ระดับกลางคือถ้าคุณทำมันจะยากที่จะเชื่อใจได้ว่าสิ่งที่คุณกำลังทำงานนั้นมาจากแหล่งที่คุณเพิ่งแก้ไขหรือจากผลิตภัณฑ์ระดับกลางที่คุณไม่สามารถสร้างใหม่ได้ .


3
นึกถึงโค้ดที่สร้างขึ้นในแบบที่คุณคิดว่าสามารถเรียกใช้โค้ดได้
candied_orange

3
หลักการนี้ไม่เป็นความจริงเสมอไป หากคุณมีไฟล์ที่สร้างขึ้นด้วยเครื่องมือเฮฟวี่เวทที่คุณไม่สามารถคาดหวังให้ผู้ใช้มีได้อาจทำให้การสร้างไฟล์นั้นเป็น git หลายคนถึงกับวางconfigureสคริปต์autoconf ที่สร้างขึ้นในคอมไพล์ด้วยเหตุผลนี้
. GitHub หยุดช่วยน้ำแข็ง

@R .. : เป็นการดีที่คุณรักษาที่เก็บสิ่งประดิษฐ์แยกต่างหากสำหรับสิ่งเหล่านั้น แต่ความเป็นจริงไม่ค่อยเหมาะ
เควิน

@R คุณสามารถประนีประนอม - แต่มันเป็นแค่นั้น และในกรณีของ CSS minification ฉันไม่คิดว่าเครื่องมือมีคุณสมบัติเป็น 'หนา' หรือ 'ช้า' หรือ 'ไม่สะดวก' นอกจากนี้ยังมีกลไกการฉีดแบบพึ่งพาอาศัย (maven, ivy ... ) ที่ทำงานได้ดีและไม่ต้องการให้คุณใส่รหัสที่สร้างขึ้นในแหล่งควบคุมของคุณ
ptyx

1
@ButtleButkus ฉันไม่ได้มีความเชี่ยวชาญมากในคดี devops สิ่งที่ฉันเห็นคือ git ที่ใช้เป็นกลไกการขนส่ง / ปล่อย / การปรับใช้ (สะดวกและยืดหยุ่น) แทนที่จะใช้เป็นการควบคุมแหล่งข้อมูลอย่างแท้จริง ถ้าไม่มีคอมไพล์ 'source' และ 'delivery' คอมไพล์แยกต่างหาก (repos แยกหรือแยกสาขา) นี่หมายความว่าคุณต้องประนีประนอมซอร์ส -> build-> chain ที่ส่งได้บ้างเช่นคุณจะจบลงด้วยการผลิตที่มีซอร์สโค้ด และสาขาพิเศษอยู่รอบ ๆ และพัฒนาด้วยผลิตภัณฑ์ไบนารีที่ไม่ได้ใช้ เป็นการประนีประนอมในทางปฏิบัติ แต่ฉันชอบแยกข้อกังวลออกเมื่อทำได้
ptyx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.