SVN checkout ไม่สนใจโฟลเดอร์


98

ฉันสามารถละเว้นโฟลเดอร์ในการชำระเงิน svn ได้หรือไม่ ฉันต้องละเว้นโฟลเดอร์ DOCs ในขั้นตอนการชำระเงินที่บิลด์เซิร์ฟเวอร์ของฉัน

แก้ไข: การละเว้นภายนอกไม่ใช่ตัวเลือก ฉันมีสิ่งภายนอกที่ฉันต้องการ


ตรวจสอบสิ่งนี้: stackoverflow.com/questions/116074/…
hephestos

สิ่งนี้ตอบคำถามของคุณหรือไม่? ฉันจะละเว้นไดเร็กทอรีที่มี SVN ได้อย่างไร
Gautier

คำตอบ:


104

คุณไม่สามารถเพิกเฉยต่อโฟลเดอร์ในการชำระเงินได้โดยตรง แต่คุณสามารถใช้การชำระเงินแบบกระจัดกระจายใน svn 1.5 ตัวอย่างเช่น:

$ svn co http://subversion/project/trunk my_checkout --depth immediates

การดำเนินการนี้จะตรวจสอบไฟล์และไดเร็กทอรีจากคลังโปรเจ็กต์ของคุณใน "my_checkout" แต่จะไม่เรียกเก็บซ้ำในไดเร็กทอรีเหล่านั้น เช่น:

$ cd my_checkout && ls
bar/ baz foo xyzzy/

จากนั้นเพื่อรับเนื้อหาของ 'bar' ลง:

$ cd bar && svn update --set-depth infinity

หมายเหตุ: มีข้อผิดพลาดในเวอร์ชัน 1.5 บางรุ่นที่ป้องกันสิ่งนี้ด้วยsvn: Shallowing of working copy depths is not yet supported
gcb

79

ใช่คุณสามารถใช้ SVN 1.6 คุณจะต้องทำการชำระเงินก่อนจากนั้นทำเครื่องหมายที่โฟลเดอร์สำหรับการยกเว้นจากนั้นลบโฟลเดอร์ที่ไม่ต้องการ

svn checkout http://www.example.com/project
cd project
svn update --set-depth=exclude docs
rm -fr docs

จากนี้ไปการอัปเดตสำเนาที่ใช้งานได้จะไม่สร้างโฟลเดอร์เอกสารซ้ำ

ดูhttp://blogs.collab.net/subversion/2009/03/sparse-directories-now-with-exclusion/และhttp://subversion.apache.org/docs/release-notes/1.6.html#sparse- การยกเว้นไดเรกทอรีสำหรับรายละเอียดเพิ่มเติม

ทอม


2
โหวตขึ้นเพราะช่วยให้ฉันไม่ต้องชำระเงินในโฟลเดอร์ขนาดใหญ่ที่ไม่เกี่ยวข้องกับงานของฉัน
dohpaz42

1
เยี่ยมมากเมื่อรวมกับการล้าง svnสิ่งนี้ช่วยฉันได้ 12 GiB
JonnyJD

1
สิ่งนี้ยังไม่ชำระเงินทุกอย่างในตอนแรกหรือไม่?
Huangism

9

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

svn co -N foo
cd foo
svn up -N bar
svn up

แฟล็ก -N ทำให้การดำเนินการไม่เกิดซ้ำ ข้างต้นจะไม่ตรวจสอบสิ่งอื่นใดในระดับ foo เช่น บอกว่ามีโฟลเดอร์lalaที่ SVN สุดท้ายขึ้นจะไม่ตรวจสอบโฟลเดอร์นั้น barแต่มันก็จะมีการปรับปรุง

แต่ในภายหลังคุณสามารถsvn up lalaเพิ่มลงในการชำระเงินได้

สันนิษฐานว่าสิ่งนี้ใช้ได้กับ 1.5


6

สิ่งนี้อยู่ในไคลเอนต์ TortoiseSVN 1.7.1 (อาจมีให้ในเวอร์ชันเก่าบางรุ่นด้วย):

  • SVN checkout -> เลือก URL ของที่เก็บ

  • คลิกที่ "Checkout Items" (ภายใต้ Checkout Depth) และเลือกเฉพาะโฟลเดอร์ที่ต้องการ!


4

svn checkout --ignore-externalsคุณสามารถใส่เอกสารโฟลเดอร์ในพื้นที่เก็บข้อมูลภายนอกและการใช้งานแล้ว


นี่คือสิ่งที่เราทำเพื่อข้ามส่วนประกอบที่สร้างไว้ล่วงหน้าบางส่วนในงานก่อนหน้านี้
Mark Bessey

2
ฉันไม่เข้าใจความexternal repositoryหมาย คุณสามารถอธิบายได้หรือไม่?
วิกเตอร์

4

ใช่Subversion 1.5มีคุณลักษณะที่เรียกว่าSparse checkoutsซึ่งสามารถทำสิ่งนี้ได้


2
จากการอ่านดูเหมือนว่าการชำระเงินแบบกระจัดกระจายจะจำกัดความลึกของการชำระเงินเท่านั้น พวกเขาไม่สามารถเพิกเฉยต่อโฟลเดอร์ใดโฟลเดอร์หนึ่งได้
John Millikin

แน่นอนว่าคุณอาจต้องเพิ่ม Legwork เล็กน้อยเช่นจำกัดความลึกของโฟลเดอร์หลักด้วย --depth ทันทีจากนั้นตรวจสอบโฟลเดอร์อื่น ๆ ทั้งหมดยกเว้นโฟลเดอร์ที่คุณต้องการละเว้น ประเด็นคือมีเครื่องมืออยู่หากคุณจำเป็นต้องใช้
Greg Hewgill

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

เวอร์ชัน 1.6+ ให้ความสามารถเพิ่มเติมในการละเว้นโฟลเดอร์และการควบคุมทั่วไปเพิ่มเติมเกี่ยวกับสิ่งที่จะรวม / ไม่รวมในสำเนาที่ใช้งานได้ (โดยที่ v1.5 มีข้อ จำกัด มากในเรื่องนี้) svnbook.red-bean.com/en/1.7/svn advanced.sparsedirs.html
FruitBreak

3

ฉันพบคำถามนี้กำลังมองหาวิธีตรวจสอบแหล่งที่มาของ WebKit ในขณะที่ไม่รวมการทดสอบการถดถอย ฉันลงเอยด้วยสิ่งต่อไปนี้:

svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit \
  --depth immediates

cd WebKit
find . \
  -maxdepth 1 -type d \
  -not -name '.*' \
  -not -name '*Tests' \
  -not -name 'Examples' \
  -not -name 'Websites' \
  | (while read SUBDIR; do svn update --set-depth infinity "$SUBDIR"; done)

โปรดทราบว่าคุณสามารถเปลี่ยนการยกเว้นได้ตามที่เห็นสมควร แต่. * ขอแนะนำให้ข้ามไดเร็กทอรีการทำงาน (ซึ่งเป็นข้อมูลล่าสุดแล้ว) และไดเร็กทอรี. svn ทั้งหมด


นี่คือภาษาอะไร?
Pup

นี่คือคำสั่ง unix shell (สามารถบันทึกและเรียกใช้งานเป็นไฟล์สคริปต์ได้)
mrlem

2

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

    # Path to the svn repository to be checked out
rpath=https://svn-repo.company.com/sw/trunk/ && \
    # This files are to be excluded (folders are ending with '/')
    # this is a regex pattern with OR ('|') between enties to be excluded
excludep='docs_folder/tests_folder/|huge_folder/|file1|file2' && \
    # Get list of the files/folders right under the repository path
filtered=`svn ls $rpath | egrep -v $excludep` && \
    # Get list of files out of filtered - they need to be 'uped'
files=`echo $filtered | sed 's| |\n|g' | egrep '^.*[^/]$'` && \
    # Get list of folders out of filtered - they need to be 'coed'
folders=`echo $filtered | sed 's| |\n|g' | egrep '^.*[/]$'` && \
    # Initial nonrecursive checkout of repository - just empty
    # to the current (./) working directory
svn co $rpath ./ --depth empty && \
    # Update the files
svn up $files &&\
    # Check out the all other folders finally.
svn co `echo $folders | sed "s|\<|$rpath|g"`

เปลี่ยนเป็นไดเร็กทอรีการทำงานต้นทาง คัดลอกคำสั่ง วาง เปลี่ยน URL ที่เหมาะสมและไม่รวมรูปแบบ รันคำสั่ง

ขอบคุณ


1
เฮ้ 6 ปีสำหรับนักพัฒนาคืออะไร? ในบรรทัดสุดท้ายคุณมี $ ubrpath ชุดนั้นอยู่ที่ไหน?
D-Klotz

1
@ D-Klotz ขอบคุณที่ควรเป็น $ rpath แทนซึ่งจะถูกตั้งค่าเป็นพา ธ ที่เก็บ <br/> ขออภัยที่มาช้าไป 1 ปี
bv.


1

ดังที่คนอื่นกล่าวถึงคุณสามารถใช้คุณสมบัติ svn: externals จากนั้นเลือก --ignore-externals เมื่อคุณชำระเงิน อย่างไรก็ตามสิ่งหนึ่งที่ควรทราบก็คือ svn: externals ไม่จำเป็นต้องอ้างถึงที่เก็บอื่น สามารถอ้างอิงไปยังโฟลเดอร์อื่น ๆ ใน repo เดียวกันได้

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