การโค่นล้มล้มเหลวด้วย“ ไม่มีการแก้ไขใด ๆ ”


18

ฉันพยายามที่จะเรียนรู้วิธีการโยกย้าย Repo Subversion และพบปัญหาที่ไม่เหมาะสมสำหรับฉัน ฉันเคยsvndumpfilterแยกโครงการย่อยและลบคำนำหน้าเส้นทางบางส่วนออก ตอนนี้คอมมิชชันหลายร้อยรายการนำเข้าอย่างถูกต้อง แต่จากนั้นฉันได้รับข้อผิดพลาดต่อไปนี้:

<<< Started new transaction, based on original revision 19190
     * editing path : branches/features/DynamicSource ... done.
     * editing path : branches/features/DynamicSource/src/build.properties ... done.
     * editing path : branches/features/DynamicSource/src/client/default.htm ...done.
     * editing path : branches/features/DynamicSource/src/client/js/AdHocController.js ... done.
     * editing path : branches/features/DynamicSource/src/client/js/Report.js ... done.
svnadmin: E160006: No such revision 19098
     * adding path : branches/features/DynamicSource/src/client/js/Enums.js ...

ตกลงดังนั้นฉันไปเป็นแฟ้มการถ่ายโอนจะมองไปที่การแก้ไขและ 19,190 19098. แรกของทุกแก้ไข 19098 ไม่อยู่ในแฟ้มการถ่ายโอนและถูกนำเข้ามาโดยไม่มีปัญหา การแก้ไข 19190 เป็นการผสาน ภายในปี 19190 นี่เป็นข้อมูลไฟล์สุดท้ายซึ่งน่าจะเป็นสาเหตุของปัญหา:

Node-copyfrom-rev: 19100
Node-copyfrom-path: trunk/src/client/js/Enums.js
Text-copy-source-md5: 2db7f8d9c0ba4750d88ce0722731aad6
Node-path: branches/features/DynamicSource/src/client/js/Enums.js
Node-action: add
Text-copy-source-sha1: 8f930509f8dbc17c5e82cd40aa5a76454d3d812c
Node-kind: file
Content-length: 0

มีการปรับปรุง 19100 อย่างสับสนในไฟล์ที่ถูกกรองนี้ แต่ข้อผิดพลาดนั้นไม่ได้หมายถึง 19100 แต่หมายถึง 19098!

ฉันต้องทำอย่างไรเพื่อให้ไฟล์นี้โหลด

ขอบคุณ!


หากสิ่งที่ซับซ้อน ("การถ่ายโอนข้อมูลและตัวกรอง" ตามด้วย "นำเข้า") ล้มเหลวลองสิ่งที่ง่ายกว่าก่อน ("การถ่ายโอนข้อมูล" จากนั้น "นำเข้า") ฉันเพิ่งจะซื้อคืน repo ทั้งหมดและนั่นก็เป็นเรื่องง่าย
Dirk Eddelbuettel

ขอบคุณเดิร์ค แม้ว่าเราจะต้องแบ่งธุรกรรมซื้อคืนนี้จริงๆ
ฮาร์ลาน

อาจทำ "การถ่ายโอนข้อมูลนำเข้าลดด้วยมือถ่ายโอนข้อมูลอีกครั้งนำเข้าถ่ายโอนข้อมูล 2nd" ?
Dirk Eddelbuettel

ฉันไม่คิดว่า SVN จะทำงานในลักษณะนั้นเว้นแต่ว่าฉันทำอะไรหาย คุณต้องลดการใช้ไฟล์ดัมพ์และ svndumpfilter และเราต้องการเก็บประวัติให้ได้มากที่สุด
ฮาร์ลาน

3
ทำไมไม่ย้ายไป git หรือ mercurial และกำจัด SVN ดั้งเดิมในขั้นตอนเดียวกัน
vonbrand

คำตอบ:


1

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

grp=$cust_group
usr=$cust_customer
svndumpfilter include $grp/$usr --drop-empty-revs --renumber-revs  <$repo_dump > $repo_dump.$usr
sed -e "s/Node-path: $grp\/$usr/Node-path: /" <$repo_dump.$usr >$repo_dump.$usr.fixed1
sed -e "s/Node-copyfrom-path: $grp\/$usr/Node-copyfrom-path: /" <$repo_dump.$usr.fixed1 >$repo_dump.$usr.fixed2
sed -e "/Node-path: /{ N; N; N; N; N; N; s/Node-path: \nNode-action: add\nNode-kind: dir\nProp-content-length: 10\nContent-length: 10\n\nPROPS-END//}" <$repo_dump.$usr.fixed2 >$repo_dump.$usr.fixed3
sed -e "/svn:author/{ N; N; s/svn:author\n.*\n$svn_usr_from/svn:author\nV $svn_usr_len\n$svn_usr_to/}" <$repo_dump.$usr.fixed3 >$repo_dump.$usr.fixed4
svnadmin load $repo_dir/$cust_group/$cust_customer --ignore-uuid < $repo_dump.$usr.fixed4

chown svn:svn -R $repo_dir/$cust_group/$cust_customer
#chown apache $repo_dir/$cust_group/$cust_customer/db/txn-current
#chown apache $repo_dir/$cust_group/$cust_customer/db/current
# apache is in svn group so the above 2 are not needed
chmod -R g+rw $repo_dir/$cust_group/$cust_customer

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

ต่อไปนี้ฉันลบการนำเข้าของไดเรกทอรีที่ไม่มีชื่อซึ่งเป็นผลลัพธ์จาก 2 seds ข้างต้นสำหรับกลุ่ม dir และอีกหนึ่งสำหรับกลุ่ม / ลูกค้า dir เพิ่ม

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

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

ตอนนี้ฉันไม่เคยรวมอยู่ใน repo SVN ของฉันดังนั้นฉันจึงไม่ต้องจัดการกับพวกเขาสำหรับการแยก ในกรณีของคุณฉันคิดว่าสิ่งที่เกิดขึ้นคือเส้นทางการแก้ไขต้นฉบับไม่ได้นำเข้าและนั่นคือสาเหตุที่มันไม่พบแม้ว่าข้อผิดพลาดจะบ่นกับการแก้ไขเอง) กฎของหัวแม่มือในไฟล์นำเข้า svn คือสิ่งใดก็ตามที่ถูกอ้างถึง ณ จุดหนึ่งต้องถูกนำเข้าแล้วก่อนที่จะถูกอ้างถึง ดังนั้นคุณอาจกรองบางสิ่งที่คุณไม่ควรแม้ว่าจะต้องการหรือไม่อัปเดตไฟล์ดัมพ์อย่างถูกต้องเพื่อสะท้อนการเปลี่ยนแปลงอื่น ๆ ที่คุณทำ

หากคุณจัดเตรียมโครงสร้างที่เกี่ยวข้องของ repo ดั้งเดิมของคุณรวมถึงเส้นทางที่มาผสานรวมกับการโทรด้วยพารามิเตอร์ฉันอาจจะโทรหาคุณในสิ่งที่คุณพลาด เงินของฉันอยู่ที่แหล่งรวม


1

ฉันได้ใช้เป็นเครื่องมือที่ดีsvndumpsanitizer ปัญหาคือว่าโครงสร้างที่เก็บโค่นล้มมีความซับซ้อนเกินไป เมื่อ svndumpfilter อยู่ที่การแก้ไข 10 มันไม่มีทางรู้ว่าโหนดที่ผู้ใช้ต้องการทิ้งจะถูกย้ายไปยังตำแหน่งที่เขาต้องการเก็บไว้ในการแก้ไข 113 ดังนั้นมันจะทำสิ่งเดียวที่ทำได้ - มันทิ้งโหนด และเมื่อมีการแก้ไข 113 craps ออกมาเพราะมันได้ทำการทิ้งข้อมูลไปแล้ว

Svndumpsanitizer ทำงานในลักษณะที่แตกต่าง มันสแกนโหนดหลายครั้งเพื่อค้นหาว่าควรเก็บโหนดใด หลังจากได้พิจารณาแล้วว่าโหนดใดที่จะเก็บไว้จะเขียนเฉพาะโหนดเหล่านี้ไปยัง outfile ในที่สุด - ถ้าจำเป็น - จะเพิ่มการคอมมิทที่ลบโหนดที่ไม่พึงประสงค์ใด ๆ ที่จะต้องเก็บไว้เพื่อไม่ให้ทำลายที่เก็บ

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