ที่ซ่อนเป็นการกระทำพิเศษผสานของต้นไม้ทำงานระหว่างฐานกระทำและดัชนี วิธีหนึ่งอาจเป็นการบันทึกแต่ละรายการเป็นแพตช์ที่แยกจากกันเช็คเอาต์พาเรนต์แรกของสแตชเรียกคืนดัชนีและแผนผังต้นไม้จากสองแพตช์และในที่สุดก็คืนค่าสแตช (ดูเหมือนว่ามีคำตอบเดียว
นี่เป็นสิ่งจำเป็นในการสร้างข้อมูลทั้งหมดใหม่จากที่เก็บข้อมูลทั้งหมดและหากคุณไม่สนใจว่าคุณควรชำระเงินอย่างน้อยที่สุดให้กับผู้ปกครองคนแรกของที่เก็บของก่อนที่จะกู้คืนเพื่อหลีกเลี่ยงความขัดแย้งและติดตามตำแหน่งที่สร้าง
นี่คือสิ่งที่ฉันทำเพื่อคืนค่าการหยุดทั้งหมดจาก repo หนึ่งไปยังอีก หากคุณไม่สามารถมีพวกเขาในคอมพิวเตอร์เครื่องเดียวกันคุณสามารถบันทึกแท็กที่ซ่อนอยู่ในกลุ่มหลังจากที่สร้างพวกเขาและคัดลอกรายการอ้างอิงและกลุ่มไปยังคอมพิวเตอร์เป้าหมาย
จากรากของ repo ดั้งเดิม:
- รับรายการการอ้างอิงที่ซ่อน
- แท็กการอ้างอิงที่เก็บของคุณเพื่อให้คุณสามารถดึงข้อมูลเหล่านั้นด้วยการเรียก git (ชื่อแท็กไม่ได้เป็น mater เปลี่ยนไปหากมีข้อขัดแย้งฉันใช้
stash_+ หมายเลข (s) ในการอ้างอิงการเก็บข้อมูลเชิงตรรกะ)
- แปลงการอ้างอิงแบบลอจิคัลเป็น sha1 hashes ในลำดับย้อนกลับ - เราจะใช้ในภายหลัง
- บันทึกเส้นทาง repo นั้น - ไว้ใช้ในภายหลัง
refs=$(git stash list|cut -d: -f1)
for ref in $refs; do tag stash_${ref//[^0-9]} $ref; done
refs=$(git rev-parse $refs|tac)
oldpath=$PWD
หมายเหตุ: สิ่งนี้ต้องใช้ bash หรือเชลล์ที่เข้ากันได้ (ksh, zsh ควรทำ ... ) คุณสามารถเพิ่มตัวแปรได้เช่นกันstash_$((i++))ถ้าเชลล์ไม่รองรับ${param//pattern}
ตอนนี้อยู่ใน repo ใหม่สำหรับแต่ละอ้างอิง:
- ดึงการอ้างอิงจาก repo เก่า (เราไม่จำเป็นต้องใช้ชื่อแท็กเพราะเราติดแท็กพวกเขาเราสามารถดึงพวกเขาด้วย git fetch)
- นำเข้าสะสมจากการอ้างอิงอีกครั้งโดยใช้หัวเรื่องของการอ้างอิงนั้นเป็นข้อความที่ซ่อน
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
git stash saveถูกเลิกใช้ในความโปรดปรานของgit stash push