Rsync ยกเว้น. svn โฟลเดอร์และเนื้อหาย่อย?


10

การจัดการกับ repo การโค่นล้มและผู้ใช้ใหม่ที่ไม่เข้าใจวิธีการทำงาน

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

  • คัดลอกโครงสร้างโลคัลไปยังโฟลเดอร์ที่เรียกว่า staging
  • ลบโฟลเดอร์. svn ทั้งหมดซ้ำจากไดเรกทอรีลำดับขั้น
  • ตรวจสอบ repo ไปที่ "โฟลเดอร์สะอาด"

ตอนนี้เรากำลังอยู่ในขั้นตอนสุดท้าย - รับเนื้อหาของไฟล์ staging เพื่อเขียนทับเนื้อหาที่สะอาด

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

ดูเหมือนว่างานสำหรับ rsync คำสั่งต่อไปนี้จะถูกต้องหรือไม่

rsync -avr --exclude=.svn* [staging] [clean]

6
คุณมักจะสามารถทำงานได้rsyncด้วย--dry-runตัวเลือกในการหา!
ทิม

ฮ่าฮ่าฮ่าขอบคุณ! ไม่มีความคิดว่ามีตัวเลือกอยู่ ควรอ่านผู้ชายอย่างระมัดระวังมากขึ้น!
SeanKilleen

คำตอบ:


31

-Cตัวเลือกสำหรับการ rsync อาจจะเป็นสิ่งที่คุณต้องการ

อย่าปล่อยให้คำอธิบายสั้น ๆ ใน man page หลอกคุณ ดูเหมือนว่าตัวเลือกจะใช้กับ CVS เท่านั้น แต่ขึ้นอยู่กับเวอร์ชัน rsync ของคุณซึ่งจะข้ามไฟล์ของระบบควบคุมเวอร์ชันทั่วไปเกือบทุกระบบที่มีอยู่

# rsync version: 3.0.7

-C, --cvs-exclude           auto-ignore files in the same way CVS does

...

          The exclude list is initialized to exclude the  following  items
          (these  initial  items are marked as perishable — see the FILTER
          RULES section):

                 RCS  SCCS  CVS  CVS.adm   RCSLOG   cvslog.*   tags   TAGS
                 .make.state  .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak
                 *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so  *.exe
                 *.Z *.elc *.ln core .svn/ .git/ .bzr/

          then,  files  listed in a $HOME/.cvsignore are added to the list
          and any files listed in the CVSIGNORE environment variable  (all
          cvsignore names are delimited by whitespace).

2
ระวังให้ดีเพราะอาจใช้ส่วนขยายเหล่านี้สำหรับไฟล์ที่คุณต้องการคัดลอกเช่น *.aสำหรับ iOS Static Libraries
Max Chuquimia

ไม่รวมไฟล์และไดเรกทอรี NB: โฟลเดอร์ใด ๆ ที่ชื่อว่า "core" จะไม่คัดลอกเช่น / myproj / api / / myproj / core / <- ไม่ได้สำรองไว้!
teknopaul

7

เกือบ - นี่ควรจะเป็น

rsync -av --exclude='.svn*' [staging] [clean]

หรือรูปแบบอื่น ๆ ของการอ้างอิงที่ป้องกันเชลล์จากการขยายตัวสัญลักษณ์ (ไวด์การ์ดจะจับคู่ไฟล์ที่ไม่น่าจะมีชื่อขึ้นต้นด้วย--exclude=.svnเท่านั้น แต่จะดีกว่าที่จะไม่รับความเสี่ยงและทำงานได้อย่างถูกต้องแม้ว่าเชลล์จะถูกกำหนดค่าให้สำลักบนไวลด์การ์ดที่ไม่ตรงกันหรือขยายไปยังรายการว่าง )

-rรวมอยู่ใน-aแล้ว ส่วนเสริมพิเศษrนั้นไม่จำเป็นเลยมันไม่ทำอันตรายใด ๆ

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

ในกรณีนี้การยกเว้นไดเรกทอรีควบคุมรุ่นเป็นวิธีที่รวดเร็วในการได้รับสิ่งที่คุณต้องการ

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