ความเสียหายของคลังเก็บ Mercurial


14

นี่ค่อนข้างเกี่ยวข้องกับคำถามนี้แต่เป็นคำถามอื่น

เรามีพื้นที่เก็บข้อมูลปรอทกลางทำหน้าที่ให้กับผู้ใช้ผ่านทาง SSH และปรอทเซิร์ฟเวอร์ เรามีลูกค้า Mac, Linux และ Windows จำนวนมากที่เชื่อมต่อกับมัน

มันเกิดขึ้นสองครั้งในขณะนี้ที่ผู้ใช้ Windows คนใดคนหนึ่งเสียหายที่เก็บของพวกเขาจากนั้นผลักกลับไปที่ส่วนกลางหนึ่งเสียหาย ฉันต้องการเขียนสคริปต์เบ็ดที่เข้ามาในพื้นที่เก็บข้อมูลส่วนกลางเพื่อป้องกันการทำธุรกรรมจากการได้รับการยอมรับหากมันจะเสียหายกลาง repo

แม้ว่าโชคไม่ดีที่ฉันไม่รู้จัก Mercurial มากพอที่จะเขียนสคริปต์เช่นนี้ ความเป็นไปได้ใด ๆ ที่คนอื่นเคยพบเจอมา? โดยส่วนตัวฉันไม่แน่ใจว่าทำไม hg ไม่ทำเช่นนี้ตามค่าเริ่มต้น


ฉันได้พบวิธีแก้ปัญหาที่นี่: davidherron.com/blog/topics/ …ที่จะต้องทำกับลูกค้าทั้งหมด แต่ถ้าใครมีทางออกที่ดีกว่าที่สามารถทำได้สำหรับ repo ส่วนกลางนั้นจะดีกว่า
# # # # # # # # # # # * * * * * * * * sbasbutty

โปรดให้รายละเอียดเพิ่มเติมกับเรา: คุณใช้ Mercurial เวอร์ชันใดบนเซิร์ฟเวอร์และลูกค้าแต่ละราย
Martin Geisler

2
นอกจากนี้มันจะมีประโยชน์อย่างยิ่งสำหรับเรา (ผู้พัฒนา Mercurial) หากคุณสามารถทำสิ่งนี้ได้ โปรดรายงานปัญหาดังกล่าวให้เราทราบโดยตรงผ่าน mailinglist ของเรา: mercurial.selenic.com/wiki/MailingListsหรือตัวติดตามข้อผิดพลาด: selenic.com/mercurial/btsที่มีประสิทธิภาพมากกว่าการโพสต์ที่นี่ :-)
Martin Geisler

คำตอบ:


4

Mercurial เวอร์ชันล่าสุด (ตั้งแต่ 1.5) รองรับการตรวจสอบความถูกต้องของข้อมูลขาเข้า เพิ่ม

[server]
validate = True

ในการกำหนดค่า hg ของเซิร์ฟเวอร์ของคุณ ( .hg/hgrcหรือการกำหนดค่า hgwebdir ควรทำงานได้ดี) เพื่อให้เซิร์ฟเวอร์ตรวจสอบข้อมูลที่เข้ามาและปฏิเสธการพุชที่ไม่ถูกต้อง ลูกค้าจะเห็นข้อผิดพลาดคล้ายกับ:

remote: abort: missing file data for beta:dddc47b3ba30e54484720ce0f4f768a0f4b6efb9 - run hg verify

หวังว่าจะช่วย!


2

บางทีคุณควรหลีกเลี่ยงการผลักดันไปยังที่เก็บทั้งหมด ด้วย Mercurial และลักษณะการกระจายของมันทุกคนสามารถมีสาขาได้และเมื่อพวกเขารู้สึกว่าพวกเขาพร้อมพวกเขาจะบอกคุณและดึงคุณจากพวกเขา ไม่มีปัญหาการผูกมัดเข้าถึงไม่มีการผลักดันที่จะทำลายข้อมูล ...

นี่เป็นคำแนะนำจากเพื่อนของฉันอย่างน้อยก็ให้ฉันเมื่อฉันย้ายจาก SVN ไปยัง Mercurial

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


การไม่ผลักดันให้ HG เอาชนะจุดประสงค์ทั้งหมด - ผู้ใช้หลายคนทำงานร่วมกัน
Anonymouse

0

คุณไม่สามารถทำสิ่งเดียวกันกับบล็อกของ David Herronแต่แทนที่จะทำสิ่งที่วางไว้ล่วงหน้าให้ทำบน precommit เกี่ยวกับ repo ส่วนกลางหรือไม่


ไม่ :-( ฉันได้ลองแล้ว แต่มันจบลงด้วยการหยุดชะงักเมื่อลูกค้าพยายามที่จะผลักมันขอสงวนล็อคในพื้นที่เก็บข้อมูลการเรียกใช้ 'hg ตรวจสอบ' ยังต้องมีการล็อคจึงสิ้นสุดลงเพียงแค่รอตลอดไปใน วนรอบไม่รู้จบ
bobinabottle

นอกจากนี้แม้ว่าสิ่งนี้จะทำงานได้กับคำนำหน้ามันก็จะตรวจสอบพื้นที่เก็บข้อมูลให้ดูว่ามันก็โอเคแล้วยอมรับการเปลี่ยนแปลงที่จะทำลายมัน ฉันต้องการเบ็ดเพื่อประเมินว่าการเปลี่ยนแปลงที่เข้ามาจะทำให้ repos เสียหายหรือไม่ถ้าย้อนกลับธุรกรรม ดังนั้นจึงเหมาะสมกว่าที่จะอยู่ในกลุ่มเครือข่ายการเปลี่ยนแปลง
bobinabottle

(การใช้เบ็ด changegroup ยังคงส่งผลในการติดตาย)
bobinabottle

ที่น่าสนใจ - ตะขอดูเหมือนจะเป็นงูหลามตาม คุณรู้หรือไม่ว่าอะไรคือความเสียหายของที่เก็บ? เป็นสิ่งเดียวกันทุกครั้งหรือไม่
ไรอันชะนี

0

ทางเลือกหนึ่งที่เป็นไปได้คือ:

  1. โคลนที่เก็บหลังจากกด
  2. ตรวจสอบมัน
  3. หาก respository ดีให้เก็บถาวรเป็นดีล่าสุด
  4. หากพื้นที่เก็บข้อมูลเสียหายให้ส่งสัญญาณเตือน
  5. ในการเตือนให้กู้คืนพื้นที่เก็บข้อมูลที่ดีที่รู้จักล่าสุด

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

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