ฉันจะละเว้นไฟล์ในการโค่นล้มได้อย่างไร
นอกจากนี้ฉันจะค้นหาไฟล์ที่ไม่อยู่ภายใต้การควบคุมเวอร์ชันได้อย่างไร
ฉันจะละเว้นไฟล์ในการโค่นล้มได้อย่างไร
นอกจากนี้ฉันจะค้นหาไฟล์ที่ไม่อยู่ภายใต้การควบคุมเวอร์ชันได้อย่างไร
คำตอบ:
(คำตอบนี้ได้รับการปรับปรุงให้ตรงกับพฤติกรรมของ SVN 1.8 และ 1.9)
คุณมี 2 คำถาม:
โดย "ละเว้นไฟล์" ฉันหมายความว่าไฟล์จะไม่ปรากฏในรายการแม้จะเป็น "unversioned": ไคลเอ็นต์ SVN ของคุณจะแกล้งไฟล์นั้นไม่มีอยู่เลยในระบบไฟล์
ไฟล์ที่ข้ามถูกระบุโดย "รูปแบบไฟล์" ไวยากรณ์และรูปแบบของรูปแบบไฟล์ถูกอธิบายไว้ในเอกสารออนไลน์ของ SVN: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "รูปแบบไฟล์ในการโค่นล้ม"
การโค่นล้มเป็นรุ่น 1.8 (มิถุนายน 2013) และใหม่กว่ารองรับ 3 วิธีที่แตกต่างกันในการระบุรูปแบบไฟล์ นี่คือบทสรุปพร้อมตัวอย่าง:
global-ignores
ตัวเลือก:global-ignores
รายชื่อจะไม่ถูกแชร์โดยผู้ใช้รายอื่นและจะใช้กับ repos ทั้งหมดที่คุณชำระเงินลงในคอมพิวเตอร์ของคุณC:\Users\{you}\AppData\Roaming\Subversion\config
Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
ทั้งในHKLM
และHKCU
และ~/.subversion/config
svn:ignore
คุณสมบัติซึ่งตั้งอยู่บนไดเร็กทอรี (ไม่ใช่ไฟล์):.gitignore
ทำงานsvn:ignore
ถูกนำไปใช้กับไดเรกทอรีและไม่ซ้ำหรือสืบทอด ไฟล์ใด ๆ หรือไดเรกทอรีย่อยทันทีของไดเรกทอรีหลักที่ตรงกับรูปแบบไฟล์จะถูกยกเว้นในขณะที่ SVN 1.8 เพิ่มแนวคิดของ "คุณสมบัติที่สืบทอดมา" svn:ignore
คุณสมบัตินั้นจะถูกละเว้นในไดเรกทอรีที่ไม่สืบทอดในทันที:
cd ~/myRepoRoot # Open an existing repo.
echo "foo" > "ignoreThis.txt" # Create a file called "ignoreThis.txt".
svn status # Check to see if the file is ignored or not.
> ? ./ignoreThis.txt
> 1 unversioned file # ...it is NOT currently ignored.
svn propset svn:ignore "ignoreThis.txt" . # Apply the svn:ignore property to the "myRepoRoot" directory.
svn status
> 0 unversioned files # ...but now the file is ignored!
cd subdirectory # now open a subdirectory.
echo "foo" > "ignoreThis.txt" # create another file named "ignoreThis.txt".
svn status
> ? ./subdirectory/ignoreThis.txt # ...and is is NOT ignored!
> 1 unversioned file
(ดังนั้นไฟล์./subdirectory/ignoreThis
จะไม่ถูกละเว้นแม้ว่าจะใช้ " ignoreThis.txt
" ใน.
ราก repo)
svn propset svn:ignore <filePattern> . --recursive
ดังนั้นการใช้การรายชื่อที่ไม่ซ้ำคุณต้องใช้
<filePattern>
ค่าแตกต่างกันในสารบบเด็กค่าของเด็กจะแทนที่ผู้ปกครองอย่างสมบูรณ์ดังนั้นจึงไม่มีผลกระทบ "สารเติมแต่ง"<filePattern>
บนรู.
ทคุณต้องเปลี่ยนมันด้วย--recursive
เพื่อเขียนทับมันในไดเร็กทอรีย่อยและไดเร็กทอรีที่สืบทอดฉันทราบว่าไวยากรณ์บรรทัดคำสั่งตอบโต้ได้ง่าย
svn ignore pathToFileToIgnore.txt
นี้ไม่ได้เป็นวิธีการทำงานของคุณสมบัติการเพิกเฉยของ SVNsvn:global-ignores
คุณสมบัติ ต้องการ SVN 1.8 (มิถุนายน 2013):svn:ignore
ยกเว้นจะใช้คุณลักษณะ "คุณสมบัติสืบทอด" ของ SVN 1.8svn:ignore
รูปแบบไฟล์จะถูกนำไปใช้โดยอัตโนมัติในทุกไดเรกทอรีย่อย (ไม่ใช่แค่ลูก ๆ ทันที)
svn:global-ignores
ด้วย--recursive
แฟล็กเนื่องจากรูปแบบไฟล์ละเว้นที่สืบทอดมาจะถูกนำไปใช้โดยอัตโนมัติเมื่อถูกสืบทอดการรันชุดคำสั่งเดียวกันกับตัวอย่างก่อนหน้านี้ แต่ใช้svn:global-ignores
แทน:
cd ~/myRepoRoot # Open an existing repo
echo "foo" > "ignoreThis.txt" # Create a file called "ignoreThis.txt"
svn status # Check to see if the file is ignored or not
> ? ./ignoreThis.txt
> 1 unversioned file # ...it is NOT currently ignored
svn propset svn:global-ignores "ignoreThis.txt" .
svn status
> 0 unversioned files # ...but now the file is ignored!
cd subdirectory # now open a subdirectory
echo "foo" > "ignoreThis.txt" # create another file named "ignoreThis.txt"
svn status
> 0 unversioned files # the file is ignored here too!
ข้อตกลงทั้งหมดนี้ทำให้ฉันสับสนเพราะคำศัพท์ของ TortoiseSVN (ที่ใช้ในระบบเมนู Windows Explorer) ทำให้ฉันเข้าใจผิดในขั้นต้น - ฉันไม่แน่ใจว่าสิ่งสำคัญของเมนูละเว้น "เพิ่มซ้ำ" และ "เพิ่ม" ตัวเลือก. ฉันหวังว่าโพสต์นี้จะอธิบายว่าฟีเจอร์ Ignore นั้นเชื่อมโยงกับคุณสมบัติ SVN อย่างไร ที่กล่าวว่าฉันขอแนะนำให้ใช้บรรทัดคำสั่งเพื่อตั้งค่าไฟล์ที่ถูกละเว้นเพื่อให้คุณรู้สึกว่ามันทำงานอย่างไรแทนที่จะใช้ GUI และใช้ GUI เพื่อจัดการคุณสมบัติหลังจากที่คุณคุ้นเคยกับบรรทัดคำสั่งเท่านั้น
คำสั่งsvn status
จะซ่อนไฟล์ที่ถูกละเว้น (นั่นคือไฟล์ที่ตรงกับglobal-ignores
รูปแบบRGA หรือตรงกับsvn:ignore
รูปแบบของไดเรกทอรีหลักทันทีหรือตรงกับsvn:global-ignores
รูปแบบของไดเรกทอรี Ancesor ใด ๆ
ใช้--no-ignore
ตัวเลือกเพื่อดูไฟล์เหล่านั้นในรายการ ไฟล์ที่ถูกเพิกเฉยมีสถานะจากI
นั้นไพพ์เอาต์พุตไปgrep
ยังแสดงเฉพาะบรรทัดที่ขึ้นต้นด้วย "I"
คำสั่งคือ:
svn status --no-ignore | grep "^I"
ตัวอย่างเช่น:
svn status
> ? foo # An unversioned file
> M modifiedFile.txt # A versioned file that has been modified
svn status --no-ignore
> ? foo # An unversioned file
> I ignoreThis.txt # A file matching an svn:ignore pattern
> M modifiedFile.txt # A versioned file that has been modified
svn status --no-ignore | grep "^I"
> I ignoreThis.txt # A file matching an svn:ignore pattern
TA-da!
svn propedit svn:ignore .
และไม่มีการกำหนดค่าตัวแก้ไขข้อความคุณจะได้รับข้อความแสดงข้อผิดพลาดว่าsvn: E205007: ไม่มีตัวแปรสภาพแวดล้อม SVN_EDITOR, VISUAL หรือ EDITOR และตัวเลือกการตั้งค่า 'editor-cmd' คือ พบแทนการเปิดเอดิเตอร์ ดังนั้นให้ระบุ--editor-cmd nanoเช่นนี้svn propedit svn:ignore . --editor-cmd nano
svn status | grep '^?'
ใช้คำสั่งต่อไปนี้เพื่อสร้างรายการที่ไม่อยู่ในไฟล์ควบคุมเวอร์ชัน
svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt
จากนั้นแก้ไขไฟล์เพื่อปล่อยเฉพาะไฟล์ที่คุณต้องการละเว้นจริงๆ จากนั้นใช้สิ่งนี้เพื่อละเว้นไฟล์ที่แสดงในไฟล์:
svn propset svn:ignore -F ignoring.txt .
จดจุดที่ท้ายบรรทัด มันบอก SVN ว่ามีการตั้งค่าคุณสมบัติในไดเรกทอรีปัจจุบัน
ลบไฟล์:
rm ignoring.txt
ในที่สุดก็กระทำ
svn ci --message "ignoring some files"
จากนั้นคุณสามารถตรวจสอบว่าไฟล์ใดถูกละเว้นผ่าน:
svn proplist -v
svn status | awk "/^?/ {print \$2}" > ignoring.txt
การปรับปรุงที่รองลงมาเป็น
svn pg svn:ignore . >> ignore.txt
หลังจากคำสั่งแรกเพื่อผนวกการละเว้นปัจจุบันลงในไฟล์
คุณสามารถละเว้นไฟล์หรือไดเรกทอรีเช่น. gitignore เพียงสร้างไฟล์ข้อความของรายการไดเรกทอรี / ไฟล์ที่คุณต้องการละเว้นและเรียกใช้รหัสด้านล่าง:
svn propset svn:ignore -F ignorelist.txt .
หรือถ้าคุณไม่ต้องการใช้ไฟล์ข้อความคุณสามารถทำได้เช่นนี้:
svn propset svn:ignore "first
second
third" .
ที่มา: บล็อกของ Karsten - ตั้งค่า svn: ละเว้นไฟล์หลายไฟล์จากบรรทัดคำสั่ง
svn:ignore
คำสั่งอีกครั้ง(ดูstackoverflow.com/a/58380306/189518 )
หากคุณกำลังใช้TortoiseSVNคลิกขวาที่ไฟล์แล้วเลือกTortoiseSVN / เพิ่มในรายชื่อ สิ่งนี้จะเพิ่มไฟล์ / ไวด์การ์ดลงในsvn:ignore
คุณสมบัติ
svn:ignore
จะถูกตรวจสอบเมื่อคุณกำลังตรวจสอบในไฟล์และไฟล์ที่ตรงกันจะถูกละเว้น ฉันมีรายการการเพิกเฉยต่อไปนี้สำหรับโครงการ Visual Studio .NET:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
คุณสามารถค้นหารายการนี้ในเมนูบริบทที่TortoiseSVN / อสังหาริมทรัพย์
ดูเหมือนจะไม่มีใครพูดถึงมัน ...
svn propedit svn:ignore .
จากนั้นแก้ไขเนื้อหาของไฟล์เพื่อระบุรูปแบบที่จะเพิกเฉยออกจากตัวแก้ไขและคุณทำเสร็จแล้ว
ฉันพบบทความ. svnignore ตัวอย่างสำหรับ JavaJava
ตัวอย่าง: .svnignore สำหรับ Ruby on Rails
/log
/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif
*.*~
และหลังจากนั้น:
svn propset svn:ignore -F .svnignore .
ตัวอย่างสำหรับ. gignignore คุณสามารถใช้สำหรับ. svnignore ของคุณ
เมื่อใช้ propedit ตรวจสอบให้แน่ใจว่าไม่มีช่องว่างต่อท้ายเนื่องจากจะทำให้ไฟล์ถูกแยกออกจากรายการเพิกเฉย
สิ่งเหล่านี้จะถูกแทรกโดยอัตโนมัติหากคุณใช้การเติมข้อความอัตโนมัติของแท็บบน linux เพื่อสร้างไฟล์เริ่มต้นด้วย
svn propset svn:ignore 'file1
file2' .
ทางออกอื่นคือ:
svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt
หรือทีละบรรทัด
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
มันทำอะไร:
นอกจากนี้หากคุณใช้ Tortoise SVN คุณสามารถทำได้:
config
ไฟล์
คำตอบของ bkbilly ที่อ่านได้มากขึ้น:
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
มันทำอะไร:
คุณยังสามารถตั้งค่ารูปแบบการเพิกเฉยแบบโกลบอลในไฟล์กำหนดค่าของ SVN
svn status
จะบอกคุณว่าไฟล์ใดไม่ได้อยู่ใน SVN รวมถึงสิ่งที่เปลี่ยนแปลง
ดูคุณสมบัติ SVNสำหรับการเพิกเฉย
สำหรับทุกสิ่ง SVN จำเป็นต้องอ่านRed Book
การเพิ่มไดเรกทอรีลงในการโค่นล้มและไม่สนใจเนื้อหาของไดเรกทอรี
svn propset svn:ignore '\*.*' .
หรือ
svn propset svn:ignore '*' .
ใช้สถานะ svnคำสั่งบนสำเนาการทำงานของคุณเพื่อแสดงสถานะของไฟล์ไฟล์ที่ยังไม่ได้อยู่ภายใต้การควบคุมเวอร์ชัน (และไม่ละเว้น) จะมีเครื่องหมายคำถามอยู่ข้างๆ
สำหรับการเพิกเฉยไฟล์คุณจำเป็นต้องแก้ไขคุณสมบัติ svn: ละเว้นอ่านบทละเว้นไอเท็ม Unversioned ใน svnbook ที่http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore HTML หนังสือเล่มนี้ยังอธิบายเพิ่มเติมเกี่ยวกับการใช้สถานะ svn
SVN ignore
จัดการได้ง่ายใน TortoiseSVN เปิด TortoiseSVN และคลิกขวาที่เมนูไฟล์จากนั้นเลือกเพิ่มเพื่อละเว้นรายการ
สิ่งนี้จะเพิ่มไฟล์ในsvn:ignore
คุณสมบัติ เมื่อเราตรวจสอบในไฟล์แล้วไฟล์ที่ตรงกับsvn:ignore
ที่จะถูกละเว้นและจะไม่กระทำ
ในโครงการ Visual Studio เราได้เพิ่มไฟล์ต่อไปนี้เพื่อละเว้น:
bin obj
*.exe
*.dll
*.pdb
*.suo
เรากำลังจัดการซอร์สโค้ดบน SVN ของComparetrapโดยใช้วิธีนี้สำเร็จ
อะไรที่ทำให้ฉัน:
ฉันจะข้ามไฟล์ในการโค่นล้มได้อย่างไร
1. ใน File Explorer คลิกขวาที่ชื่อโครงการ SVN
2. คลิกที่ "SVN Commit ... "
3.A "กระทำ" จะปรากฏหน้าต่าง
4. คลิกขวาที่โฟลเดอร์ / ไฟล์ที่คุณต้องการเพิกเฉย
5. คลิกที่เพิ่มเพื่อละเว้นรายการ
6. เลือกโฟลเดอร์ / ไฟล์
7. เข้าสู่ "การเปลี่ยนแปลงคุณสมบัติ" เป็น SVN
นอกจากนี้ฉันจะค้นหาไฟล์ที่ไม่อยู่ภายใต้การควบคุมเวอร์ชันได้อย่างไร
หลังจากขั้นตอนที่ 3 ด้านบนคลิกที่ "แสดงไฟล์ที่ไม่มีการเปลี่ยนแปลง"