ความหมายของ git โคลนที่ใช้ร่วมกันคืออะไรถ้าแหล่งเก็บข้อมูลระยะไกล


0

ดังนั้นที่เก็บ git ที่ใช้ร่วมกันดูเหมือนจะสมบูรณ์แบบมากหรือน้อยสำหรับเก็บโฟลเดอร์ที่มี blobs ขนาดใหญ่ซิงค์อยู่ ฉันมีรูปภาพและวิดีโอขนาด 700 GB ที่ฉันต้องการเผยแพร่ผ่านคอมพิวเตอร์ของฉัน แต่การใช้ git โดยไม่ต้องมีการเพิ่มเติมใด ๆ ทำให้เกิดการใช้ดิสก์มากซึ่งไม่จำเป็น

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

คำตอบ:


1

ฉันรัก git แต่น่าเสียดายที่ git ไม่ใช่เครื่องมือที่เหมาะสมสำหรับงานนี้

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

นอกจากนี้สมมติว่าไบนารีของคุณไม่สามารถบีบอัดได้ (รูปภาพ, ภาพยนตร์, เพลง, ฯลฯ ) ขนาดของที่เก็บวัตถุ git จะเหมือนกับการชำระเงินแบบต้นไม้ กล่าวอีกนัยหนึ่งสำหรับไฟล์ต้นฉบับมูลค่า 700GB ที่เก็บอ็อบเจ็กต์ ( .git ไดเรกทอรี) จะบริโภคมากและเมื่อคุณเริ่มทำ - เพิ่มและลบเนื้อหา

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

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


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

โปรดทราบว่าการโคลนที่ใช้ร่วมกันจะเหมาะสมถ้าคุณทำการโคลนบนคอมพิวเตอร์เครื่องเดียวกัน - อ่านเอกสาร git สำหรับสถานการณ์ของคุณที่จะทำการโคลนนิ่งระหว่างคอมพิวเตอร์คุณต้องใช้โคลนนิ่งธรรมดาหรือโคลนตื้น
mvp

แต่นั่นคือสิ่งที่ฉันขอ ... สำเนาที่ใช้ร่วมกัน "สมเหตุสมผล" สำหรับฉันเช่นกันเพราะฉันไม่ต้องการให้วัตถุทั้งหมดนั้นอุดตันฮาร์ดไดรฟ์ เอกสาร git อธิบายถึงวิธีการแบ่งใช้โคลนแบบโลคัล - แต่ git สร้างการแชร์โคลนจากรีโมตด้วยเช่นกัน ไม่มีคำเตือนหรือสิ่งใดเมื่อฉันโคลนที่เก็บที่แชร์ผ่าน ssh ดังนั้นฉัน ไม่ อ่านเอกสาร ฉันยังอ้างถึงในคำถามเดิมของฉัน มันไม่ได้ครอบคลุมกรณีของฉัน
Eadilu

เพื่อให้ที่เก็บ git ทำงานได้ git ต้องการการเข้าถึงที่เก็บวัตถุ git โดยปกติเก็บไว้ในไดเรกทอรี. git สำหรับ fs โลคัลโคลนนิ่งที่แชร์สามารถโกงและเข้าถึงไดเร็กทอรีอื่นสำหรับที่เก็บอ็อบเจ็กต์ แต่สำหรับ fs ที่ไม่ใช่ในพื้นที่นั้นไม่รองรับ git - มันต้องการการเข้าถึง local object แบบไม่มีสิ่งกีดขวาง
mvp

นั่นไม่ใช่ความจริง ได้รับการสนับสนุนตามที่ฉันระบุไว้ก่อนหน้านี้ (อย่างน้อยก็ในแง่ของ "ทำงาน"): Git clones ที่เก็บข้อมูลระยะไกลด้วยตัวเลือก --shared ใช้ได้ ฉันไม่ได้ถาม ถ้า ใช้งานได้ฉันแค่ถามถึงความหมาย: ฉันต้องระวังอะไรสิ่งที่อาจเป็นอันตราย ฯลฯ
Eadilu

0

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


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