ระบบไฟล์ที่เหมือน UnionFS สำหรับ Windows


12

ฉันกำลังมองหาบางอย่างที่ทำงานเหมือนกับ UnionFS ใน Windows 7 usecase ของฉัน: มีไดเรกทอรีการทำงานที่สะอาดในไดเรกทอรีแบบอ่านอย่างเดียวและรวบรวมในระบบไฟล์แบบร่วมซึ่งจะเก็บไบนารีที่รวบรวมไว้แบบโลจิคัลในที่เดียวกัน แต่ในทางกายภาพ ไดเรกทอรีที่แตกต่างกัน

ไลบรารี่ไม่ทำงานด้วยวิธีนี้แม้ว่าพวกเขาจะได้รับการยอมรับว่าเป็นคำตอบในUnionFS เหมือนกันบน windows แต่การรวมโฟลเดอร์ตามความจริง - พวกเขาแสดงเฉพาะไดเรกทอรีระดับบนสุดในที่เดียว

โค้ดเองมีขนาดใหญ่มาก (ข้อมูล 2GB) และฉันต้องการหลีกเลี่ยงการคัดลอกรหัสสำหรับทุกบิลด์ในบิลด์เซิร์ฟเวอร์ของฉัน


โอ้โห : - / ฉันพยายามที่จะแก้ปัญหาที่เหมือนกันด้วยตัวเองและอ่านไม่ถี่ถ้วน ฉันจะลบความคิดเห็นของฉัน ฉันแทบไม่มีความคุ้นเคยกับแพลตฟอร์ม Windows : - /
Omnifarious

คำตอบ:


2

คุณสามารถใช้ลิงก์สัญลักษณ์เพื่อปลอมสิ่งนี้ได้หรือไม่ http://en.wikipedia.org/wiki/NTFS_symbolic_link มันไม่ได้ตอบคำถามที่แน่นอน แต่ฉันคิดว่ามันจะแก้กรณีการใช้งานที่คุณได้รับ


ฉันไม่เห็นว่ามันจะอธิบายได้อย่างไร ...
liori

ฉันไม่ทราบว่าโครงสร้างการสร้างของคุณเป็นอย่างไร แต่สมมติว่ามันเป็นอะไรอย่าง src, src / bin, src / obj จากนั้นคุณสามารถมี bin และ obj เป็นลิงก์สัญลักษณ์ไปทุกที่ที่คุณต้องการให้รหัส เพียงตรวจสอบให้แน่ใจว่าบิลด์ของคุณไม่ลบโฟลเดอร์เหล่านั้นอย่างสมบูรณ์ อีกทางเลือกหนึ่งคือ src เป็นลิงก์สัญลักษณ์ไปที่ "อ่านอย่างเดียว" จากนั้นมีลิงก์ในส่วนอ่านอย่างเดียวกลับไป วิธีที่คุณควรจะสามารถทำให้มันทำงานได้ นอกเสียจากว่าฉันจะพลาดสถานการณ์ของคุณไปอย่างสิ้นเชิง
MikeBaz - MSFT

ฉันไม่ได้ควบคุมขั้นตอนการสร้างและมันสามารถเขียนได้ทุกที่
liori

@liori: สำหรับกรณีการใช้งานนี้คุณสามารถสร้างไดเรกทอรีใหม่และสร้างลิงค์สัญลักษณ์สำหรับไฟล์ทุกไฟล์ (บางอย่างเช่นcd SOURCE; find -type d -exec sh -c 'cd BUILDDIR && mkdir "$@"' _ {} +; find -type f -exec sh -c 'mklink "$1" "BUILDDIR/$1"' _ {} \;หรือเทียบเท่ากับ Windows)
Gilles 'หยุดความชั่วร้าย'

@Gilles: คุณทำให้ฉันคิดว่าการคัดลอกไม่ว่าการแก้ปัญหาไม่ดี ... (นอกจากที่คุณอาจทำให้มันกลายเป็นคำตอบ?)
liori

2

คุณสามารถสร้างยูเนี่ยนของคนจนด้วยลิงก์สัญลักษณ์: สร้างโครงสร้างไดเรกทอรีของแหล่งที่มาใหม่ แต่สร้างลิงก์ (เป็นสัญลักษณ์หรือฮาร์ด) สำหรับไฟล์ สิ่งนี้ควรเหมาะสำหรับวัตถุประสงค์ของคุณตราบใดที่ระบบบิลด์ไม่พยายามแก้ไขไฟล์ต้นฉบับ

ด้วย GNU CP มันเป็นเรื่องง่ายเหมือนหรือcp -al cp -asแต่ฉันไม่รู้ว่ามีพอร์ตของเครื่องมือ GNU ที่เข้าใจลิงก์ของ Windows หรือไม่

หากคุณต้องการเรียกคำสั่ง mklink สามารถทำได้ด้วยเครื่องมือ POSIX (คำเตือนพิมพ์โดยตรงในเบราว์เซอร์):

cd SOURCE
find -type d -exec sh -c 'cd BUILDDIR && mkdir "$@"' _ {} +
find -type f -exec sh -c 'mklink "$1" "BUILDDIR/$1"' _ {} \;

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


วิธีการดั้งเดิมจะเป็นสิ่งที่ต้องการfor /R %BUILDDIR% %F in (*.*) do @junction X:%pnxF %Fโดยใช้junctionเครื่องมือจาก sysinternals
MSalters

@MSalters ลิงก์สัญลักษณ์เป็นของ Windows ทันที และทางแยก NTFS นั้นไม่ใช่สิ่งเดียวกัน
Nick Whaley

@NickWhaley: จริงๆแล้ว junctions นั้นเป็นลิงก์ที่ยาก
MSalters

2

ใช่มีอยู่ใน Windows รุ่นล่าสุดแต่ฉันไม่รู้วิธีใช้งาน


"UWF เป็นคุณสมบัติใหม่สำหรับ Standard 8 และไม่พร้อมใช้งานในฐานะเป็นส่วนหนึ่งของ Windows 8" ไม่น่าจะเป็นแบบนี้ใน Windows รุ่นสำหรับผู้ใช้
Daniel B


มีประโยชน์สำหรับกรณีอื่น ๆ แต่ไม่ใช่กรณีนี้ ดีที่จะรู้และเห็นคุณค่า
Robert Wm Ruedisueli

1

ฉันพบสิ่งนี้ แต่ฉันไม่รู้จริงๆว่ามันใช้งานได้ดีเพียงใด:


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