ฉันเพิ่งเริ่มใช้ SVN และฉันมีไดเรกทอรีแคชที่ฉันไม่ต้องการภายใต้การควบคุมแหล่งที่มา ฉันจะเพิกเฉยไดเรกทอรี / โฟลเดอร์ทั้งหมดด้วย SVN ได้อย่างไร
ฉันเพิ่งเริ่มใช้ SVN และฉันมีไดเรกทอรีแคชที่ฉันไม่ต้องการภายใต้การควบคุมแหล่งที่มา ฉันจะเพิกเฉยไดเรกทอรี / โฟลเดอร์ทั้งหมดด้วย SVN ได้อย่างไร
คำตอบ:
ตั้งค่าsvn:ignore
คุณสมบัติของไดเรกทอรีหลัก:
svn propset svn:ignore dirname .
หากคุณมีหลายสิ่งที่ต้องเพิกเฉยให้คั่นด้วยการขึ้นบรรทัดใหม่ในค่าคุณสมบัติ ในกรณีนั้นการแก้ไขค่าคุณสมบัติโดยใช้เครื่องมือแก้ไขภายนอกทำได้ง่ายกว่า:
svn propedit svn:ignore .
svn rm --keep-local dirname
เป็นครั้งแรก (เอาท์พุท svn สถิติของฉันมีขนาดใหญ่มากและฉันกระแทกหัวของฉันในนี้ในขณะที่.)
svn propset svn:ignore -F file.txt .
svn:ignore
และไม่svn::ignore
เหมือนที่ฉันทำ คุณสามารถตั้งค่าคุณสมบัติตามอำเภอใจดังนั้นคุณสมบัติหลังจะตั้งค่าเป็น OK และคุณสามารถดูและแก้ไขคุณสมบัติได้ แต่จะไม่ทำให้ SVN เพิกเฉยต่อไฟล์ที่คุณแสดงรายการ
นี่คือโครงสร้างไดเรกทอรีตัวอย่าง:
\project
\source
\cache
\other
เมื่อในproject
คุณเห็นว่าแคชไดเรกทอรีของคุณจะไม่ถูกเพิ่มและแสดงเช่น
> svn st
M source
? cache
ในการตั้งค่าคุณสมบัติเพิกเฉยให้ทำ
svn propset svn: ละเว้นแคช
โดยที่svn:ignore
ชื่อของคุณสมบัติที่คุณตั้งค่าcache
คือค่าของคุณสมบัติและ.
เป็นไดเรกทอรีที่คุณตั้งค่าคุณสมบัตินี้ มันควรจะเป็นไดเรกทอรีหลักของcache
ไดเรกทอรีที่ต้องการคุณสมบัติ
วิธีตรวจสอบคุณสมบัติที่ตั้งค่าไว้:
> svn proplist
Properties on '.':
svn:ignore
เพื่อดูค่าของsvn:ignore
:
> svn propget svn:ignore
cache
หากต้องการลบคุณสมบัติที่ตั้งไว้ก่อนหน้านี้:
svn propdel svn:ignore
dirname
เพิ่มเฉือนท้ายเพื่อ ตัวอย่างเช่นเมื่อพิมพ์svn propset svn:ignore dirname
หากคุณอนุญาตให้เชลล์ (bash) กรอกข้อมูล dirname ให้คุณมันจะเพิ่มเครื่องหมายสแลชต่อท้ายทำให้คุณมีคำสั่งsvn propset svn:ignore dirname/
ซึ่งจะไม่ส่งผลให้โฟลเดอร์นั้นถูกเพิกเฉย อย่างน้อยนั่นคือประสบการณ์ของฉัน
สิ่งสำคัญที่ต้องพูดถึง:
ใน commandline คุณไม่สามารถใช้
svn add *
สิ่งนี้จะเพิ่มไฟล์ที่ถูกละเว้นเนื่องจากบรรทัดคำสั่งจะขยาย*
ดังนั้นจึงsvn add
เชื่อว่าคุณต้องการเพิ่มไฟล์ทั้งหมด ดังนั้นให้ใช้สิ่งนี้แทน:
svn add --force .
svn add --force *
จะไม่ทำงาน ใช้จุดไม่ใช่ดาว
เนื่องจากฉันใช้เวลาในขณะที่พยายามทำให้มันใช้งานได้ควรสังเกตว่าหากไฟล์มีอยู่แล้วใน SVN คุณจะต้องใช้svn delete
มันจากนั้นแก้ไขsvn:ignore
คุณสมบัติ
ฉันรู้ว่าดูเหมือนชัดเจน แต่พวกเขายังคงปรากฏ?
ในsvn status
รายการของฉันเมื่อฉันคิดว่ามันจะไม่สนใจพวกเขาในพื้นที่
หากต้องการขยายออกไปเล็กน้อยหากคุณทำเช่นนี้ด้วยเครื่องมือบรรทัดคำสั่ง svn คุณต้องการพิมพ์:
svn propedit svn:ignore path/to/dir
ซึ่งจะเปิดโปรแกรมแก้ไขข้อความที่คุณเลือกจากนั้นพิมพ์ '*' เพื่อละเว้นทุกสิ่งที่อยู่ข้างในและบันทึก + ออก - ซึ่งจะรวมไดเรกทอรีของตัวเองใน svn แต่ไม่ต้องสนใจไฟล์ทั้งหมดที่อยู่ภายในเพื่อละเว้นไดเรกทอรีใช้ เส้นทางของพาเรนต์แล้วพิมพ์ชื่อของไดเรกทอรีในไฟล์ หลังจากบันทึกแล้วให้เรียกใช้การอัปเดต ('svn up') จากนั้นตรวจสอบในเส้นทางที่เหมาะสม
ตั้งค่า svn:ignore
คุณสมบัติในไดเรกทอรีหลัก:
$ cd parentdir
$ svn ps svn:ignore . 'cachedir'
สิ่งนี้จะเขียนทับค่าปัจจุบันของ svn:ignore
ในปัจจุบันของ คุณแก้ไขค่าด้วย:
$ svn pe svn:ignore .
ซึ่งจะเปิดตัวแก้ไขของคุณ คุณสามารถเพิ่มหลายรูปแบบหนึ่งรายการต่อบรรทัด
คุณสามารถดูค่าปัจจุบันด้วย:
$ svn pg svn:ignore .
หากคุณใช้ GUI ควรมีตัวเลือกเมนูสำหรับทำสิ่งนี้
svn ps svn:ignore . 'cachedir'
cachedir is not under version control
ผลในการ เปลี่ยนเป็นsvn ps svn:ignore 'cachedir' .
ทำงานให้ฉัน
ขอบคุณสำหรับการสนับสนุนทั้งหมดข้างต้น ฉันต้องการแบ่งปันข้อมูลเพิ่มเติมจากประสบการณ์ของฉันในขณะที่ละเว้นไฟล์
เมื่อโฟลเดอร์อยู่ภายใต้การควบคุมการแก้ไขแล้ว
หลังจากsvn importและsvn coไฟล์สิ่งที่เรามักจะทำเป็นครั้งแรก
แคชรันไทม์ทั้งหมด, ไฟล์แนบจะอยู่ภายใต้การควบคุมเวอร์ชัน ดังนั้นก่อนsvn ps svn: ละเว้นเราต้องลบมันออกจากที่เก็บ
ด้วย SVN เวอร์ชั่น 1.5 ขึ้นไปเราสามารถใช้ได้svn del --keep-local your_folder
แต่สำหรับเวอร์ชั่นก่อนหน้านี้ทางออกของฉันคือ:
.svn
โฟลเดอร์ที่ซ่อนอยู่)เมื่อเราต้องการมากกว่าหนึ่งโฟลเดอร์ที่จะถูกละเว้น
svn:ignore
svn pe
จะต้องแก้ไขไฟล์ข้อความและคุณสามารถใช้คำสั่งนี้หากจำเป็นต้องตั้งค่าตัวแก้ไขข้อความของคุณโดยใช้vi :
export SVN_EDITOR=vi
ไฟล์มีลักษณะบางอย่างเช่นนี้:
runtime
cache
attachments
assets
svn propset svn:ignore -F .ignorethesefiles .
ซึ่งจะใช้เนื้อหาของไฟล์ ฉันชอบเก็บมันไว้รอบ ๆ เพื่อที่คุณจะได้รู้ว่ามีอะไรถูกละเว้น การแก้ไขต้องใช้ชุดอุปกรณ์ติดตามผล
หากไดเรกทอรีของคุณfoo
อยู่ภายใต้การควบคุมเวอร์ชันอยู่แล้วให้ลบออกก่อนด้วย:
svn rm --keep-local foo
svn propset svn:ignore foo .
... และถ้าคุณต้องการละเว้นมากกว่าหนึ่งไดเรกทอรี (พูดbuild/
temp/
และ*.tmp
ไฟล์) คุณสามารถทำได้ในสองขั้นตอน (ไม่สนใจคุณสมบัติแรกและแก้ไขคุณสมบัติเพิกเฉย (ดูคำตอบอื่นที่นี่) หรือเขียนสิ่งที่ชอบ
svn propset svn:ignore "build
temp
*.tmp" .
บนบรรทัดคำสั่ง
หากคุณใช้ลูกค้า SVN TortoiseSVNเฉพาะจากนั้นคุณจะมีตัวเลือกในการคลิกขวาที่รายการและเลือก "เพิ่มเพื่อเพิกเฉยรายการ"
คำสั่งให้ละเว้นหลายรายการเป็นเรื่องยุ่งยากเล็กน้อยและต้องใช้แบ็กสแลช
svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .
คำสั่งนี้จะไม่สนใจอะไรชื่อcache
, tmp
, null
และand_so_on
ในไดเรกทอรีปัจจุบัน
svn propset svn:ignore -F .ignorethesefiles .
จะอนุญาตให้คุณใช้ไฟล์ และตามที่กล่าวไว้คุณมีกำลังใจเสมอ
ฉันมีปัญหาในการลบไดเรกทอรีที่ซ้อนทับ ไดเรกทอรีบนสุดที่ฉันต้องการเพิกเฉยจะไม่แสดงด้วย 'สถานะ svn' แต่ส่วนย่อยทั้งหมดได้ นี่อาจเห็นได้ชัดกับคนอื่น แต่ฉันคิดว่าฉันต้องการแบ่งปัน:
ตัวอย่าง:
/กระโปรงหลังรถ
/ ลำ / แคช
/ ลำ / แคช / subdir1
/ ลำ / แคช / subdir2
cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci
"ขอบคุณ"svnสำหรับวิธีการที่น่ากลัวปลอมและยากที่จะเพิกเฉยต่อไฟล์
ดังนั้นฉันจึงเขียนสคริปต์svn-ละเว้น-all :
#!/bin/sh
# svn-ignore-all
# usage:
# 1. run svn status to see what is going on at each step
# 2. add or commit all files that you DO want to have in svn
# 3. remove any random files that you don't want to svn:ignore
# 4. run this script to svn:ignore everything marked '?' in output of `svn status`
svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
d=`dirname "$f"`
b=`basename "$f"`
ignore=`svn propget svn:ignore "$d"`
if [ -n "$ignore" ]; then
ignore="$ignore
"
fi
ignore="$ignore$b"
svn propset svn:ignore "$ignore" "$d"
done
นอกจากนี้หากต้องการละเว้นรายการไฟล์ / ชื่อพา ธ เฉพาะเราสามารถใช้ตัวแปรsvn-ละเว้นนี้ ฉันคิดว่า svn-ละเว้น - ทั้งหมดควรเป็นเหมือน xargs svn-ละเว้น
#!/bin/sh
# svn-ignore
# usage:
# svn-ignore file/to/ignore ...
for f; do
d=`dirname "$f"`
b=`basename "$f"`
ignore=`svn propget svn:ignore "$d"`
if [ -n "$ignore" ]; then
ignore="$ignore
"
fi
ignore="$ignore$b"
svn propset svn:ignore "$ignore" "$d"
done
อีกอย่างหนึ่ง: ฉันมักจะทำให้เสียเงิน svn checkouts ของฉันด้วยไฟล์สุ่มจำนวนมาก เมื่อถึงเวลาที่ต้องคอมมิทฉันจะย้ายไฟล์เหล่านั้นไปยังไดเรกทอรีย่อย 'เก่า' และบอก svn เพื่อเพิกเฉย 'เก่า'
Bash oneliner สำหรับการละเว้นหลายรายการ:
svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"
หากไดเร็กทอรีโปรเจ็กต์ของคุณชื่อ / Project และแคชไดเร็กทอรีของคุณชื่อ / Project / Cache ดังนั้นคุณต้องตั้งค่าคุณสมบัติการโค่นล้มบน / Project ชื่อคุณสมบัติควรเป็น "svn: ละเว้น" และค่าคุณสมบัติควรเป็น "Cache"
อ้างถึงหน้านี้ในคู่มือการโค่นล้มสำหรับคุณสมบัติเพิ่มเติม
คำตอบของ Jason จะทำเคล็ดลับ อย่างไรก็ตามแทนที่จะตั้งค่า svn: ละเว้นเป็น "." ในไดเรกทอรีแคชคุณอาจต้องการรวม "แคช" ในคุณสมบัติ svn: ละเว้นของไดเรกทอรีหลักในกรณีที่ไดเรกทอรีแคชไม่ปรากฏขึ้นเสมอ ฉันทำสิ่งนี้กับโฟลเดอร์ "throwaway" จำนวนหนึ่ง
เพื่อให้ผู้อำนวยการที่ SVN จะไม่ทราบ:
svn delete --keep-local path / directory_to_keep / *
svn propset svn: ละเว้น "*" path / directory_to_keep
หากคุณใช้ส่วนหน้าสำหรับ SVN เช่น TortoiseSVN หรือการรวม IDE บางประเภทก็ควรมีตัวเลือกการเพิกเฉยในเมนูเดียวกับการดำเนินการส่งข้อมูล / เพิ่ม
เนื่องจากคุณใช้เวอร์ชันมันง่ายมากจริง ๆ :
ชมการกรีดของคุณต่อท้ายด้วย ฉันพบว่ารวมทั้งในแฟ้มละเว้นการตั้งค่าของฉันไม่ได้ละเลยimages/*
./images/
เมื่อฉันวิ่งก็ยังคงแสดงให้เห็นว่าsvn status -u
? images
ดังนั้นฉันเพิ่งเปลี่ยนการตั้งค่าการเพิกเฉยเป็นเพียงimages
ไม่มีเครื่องหมายทับ เรียกใช้การตรวจสอบสถานะและลบออก
แก้ไขด้วยEclipseในวิธีถัดไป:
ก่อนอื่นทำการซิงโครไนซ์โฟลเดอร์ของคุณกับโครงการ:
ทีม -> ประสาน
ในมุมมองถัดไปมุมมองทีมคุณสามารถดูทรัพยากรทั้งหมดที่คุณสามารถส่งไปยังเซิร์ฟเวอร์ SVN
ดังนั้นให้เลือกโฟลเดอร์ทรัพยากรของทรัพยากรที่คุณต้องการละเว้นจากนั้นคุณสามารถละเว้นได้โดยใช้
ทีมงาน ->
svn:ignore
เพิ่ม
หลังจากนั้นในหน้าต่างการยืนยันให้เลือกตัวเลือกแรก: "ไม่สนใจด้วยชื่อ"
ตัวอย่างเช่นหากฉันต้องการเพิกเฉยโฟลเดอร์เป้าหมายและทรัพยากรระดับ. ฉันจะซิงโครไนซ์และในมุมมองซิงโครไนซ์ฉันจะเลือกโฟลเดอร์เป้าหมาย หลังจากนั้นฉันจะเลือก
ทีมงาน> เพิ่ม
ถึงsvn:ignore
แล้วฉันจะยืนยันตัวเลือกแรกในหน้าต่างยืนยัน
หลังจากเสียเวลามากในการหาวิธีทำกิจกรรมง่ายๆนี้ฉันตัดสินใจโพสต์มันไม่ยากที่จะหาคำอธิบายที่เหมาะสม
ก่อนอื่นให้โครงสร้างตัวอย่าง
$ svn st? โครงการ / ลำต้น / เป้าหมาย? โครงการ / ลำ / myfile.x
1 - ก่อนกำหนดค่าตัวแก้ไขใน mycase vim export SVN_EDITOR = vim
2 -“ svn propedit svn: ละเว้นโปรเจ็กต์ / trunk /” จะเปิดไฟล์ใหม่และคุณสามารถเพิ่มไฟล์และไดเรกทอรีย่อยของคุณในกรณีที่เราพิมพ์“ เป้าหมาย” บันทึกและปิดไฟล์และงาน
$ svn st? โครงการ / ลำ / myfile.x
ขอบคุณ