ฉันจะลบ.DS_Store
ไฟล์Mac OS X ที่น่ารำคาญออกจากที่เก็บ Git ได้อย่างไร?
ฉันจะลบ.DS_Store
ไฟล์Mac OS X ที่น่ารำคาญออกจากที่เก็บ Git ได้อย่างไร?
คำตอบ:
ลบไฟล์ที่มีอยู่ออกจากที่เก็บ:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
เพิ่มบรรทัด
.DS_Store
ไปที่ไฟล์.gitignore
ซึ่งสามารถพบได้ที่ระดับบนสุดของที่เก็บของคุณ (หรือสร้างขึ้นหากยังไม่มีอยู่) คุณสามารถทำได้อย่างง่ายดายด้วยคำสั่งนี้ในไดเรกทอรีบนสุด
echo .DS_Store >> .gitignore
แล้วก็
git add .gitignore
git commit -m '.DS_Store banished!'
-exec
จะเปิดgit-rm
หนึ่งครั้งสำหรับทุกไฟล์. DS_Store ในขณะที่xargs
จะใส่พา ธ ทั้งหมดในบรรทัดคำสั่งเดียว ส่วนใหญ่ฉันชอบxargs
เพราะฉันไม่ต้องกังวลกับการหลบหนีของตัวละครพิเศษมากมาย
.DS_Store
การ.gitignore
ทำงานซ้ำหรือไม่? นั่นคือมันจะเพิกเฉยsome/level/of/folders/.DS_Store
เช่นกัน?
การรวมคำตอบของเบนโซโด้และ webmat ปรับปรุงด้วยgit rm
ไม่ล้มเหลวในไฟล์พบว่าไม่ได้อยู่ใน repo และทำให้มันสามารถวางทั่วไปสำหรับผู้ใช้ใด ๆ :
# remove any existing files from the repo, skipping over ones not in repo
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
# specify a global exclusion list
git config --global core.excludesfile ~/.gitignore
# adding .DS_Store to that list
echo .DS_Store >> ~/.gitignore
~/.gitignore
ไฟล์ที่ไม่รวมทั่วโลกของฉันถือเป็นเรื่องเจ็บปวด มีไฟล์ที่ฉันต้องการแยกออกจากโฮมไดเร็กตอรี่ของฉันที่ฉันไม่ต้องการเพิกเฉย ฉันใช้~/.gitexcludes
แทนผ่านคำสั่งเดียวกัน:core.excludesfile
ทางออกที่ดีที่สุดในการแก้ไขปัญหานี้คือการไม่สนใจไฟล์เหล่านี้จาก repos git ทั้งหมดในระบบของคุณ สามารถทำได้โดยการสร้างไฟล์ gitignore ทั่วโลกเช่น:
vi ~/.gitignore_global
การเพิ่มกฎสำหรับละเว้นไฟล์เช่น:
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
ตอนนี้เพิ่มไฟล์นี้ในการกำหนดค่า git ทั่วโลกของคุณ
git config --global core.excludesfile ~/.gitignore_global
แก้ไข:
ไอคอนที่ถูกลบออกไปเพราะพวกเขาอาจจะต้องมีความมุ่งมั่นเป็นสินทรัพย์ของแอปพลิเคชัน
ในบางสถานการณ์คุณอาจต้องการละเว้นไฟล์บางไฟล์ทั่วโลก สำหรับฉัน. DS_Store เป็นหนึ่งในนั้น นี่คือวิธี:
git config --global core.excludesfile /Users/mat/.gitignore
(หรือไฟล์ใด ๆ ที่คุณเลือก)
จากนั้นแก้ไขไฟล์เช่นเดียวกับ. gitignore ของ repo โปรดทราบว่าฉันคิดว่าคุณต้องใช้เส้นทางที่แน่นอน
หากคุณไม่สามารถลบไฟล์ได้เนื่องจากมีการเปลี่ยนแปลงการใช้งานแบบฉาก:
git rm --cached -f *.DS_Store
เปิดเทอร์มินัลแล้วพิมพ์ "cd <ProjectPath>"
ลบไฟล์ที่มีอยู่:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
nano .gitignore
เพิ่มสิ่งนี้ .DS_Store
พิมพ์ "ctrl + x"
พิมพ์ "y"
เข้าสู่การบันทึกไฟล์
git add .gitignore
git commit -m '.DS_Store removed.'
nano .gitignore
สร้างไฟล์หากไม่มีอยู่คำสั่งนี้ควรถูกเรียกใช้งานจากโฟลเดอร์รูทโปรเจ็กต์
คำตอบที่ได้รับคะแนนสูงสุดยอดเยี่ยม แต่การช่วยเหลือนักเล่นหน้าใหม่อย่างฉันนี่คือวิธีสร้างไฟล์. gitignore แก้ไขแก้ไขบันทึกลบไฟล์ที่คุณอาจเพิ่มไว้ใน git แล้วดันไฟล์ไปที่ Github
สร้างไฟล์. gitignore
ในการสร้างไฟล์. gitignore คุณสามารถทำได้เพียงtouch
ไฟล์ที่สร้างไฟล์เปล่าที่มีชื่อที่ระบุ เราต้องการสร้างไฟล์ชื่อ. gitignore เพื่อให้เราสามารถใช้คำสั่ง:
touch .gitignore
ละเว้นไฟล์
ตอนนี้คุณต้องเพิ่มบรรทัดที่บอกให้ git ข้ามไฟล์ DS Store ไปยัง. gitignore ของคุณ คุณสามารถใช้เครื่องมือแก้ไขนาโนเพื่อทำสิ่งนี้
nano .gitignore
นาโนดีเพราะมันมีคำแนะนำเกี่ยวกับวิธีการออกไป ( Ctrl- Oเพื่อบันทึกCtrl- Xเพื่อออก)
คัดลอกและวางแนวคิดบางส่วนจากGithub สรุปสาระสำคัญนี้ซึ่งแสดงรายการไฟล์ทั่วไปที่จะไม่สนใจ สิ่งที่สำคัญที่สุดในการตอบคำถามนี้คือ:
# OS generated files #
######################
.DS_Store
.DS_Store?
# คือความคิดเห็นและจะช่วยให้คุณจัดระเบียบไฟล์ของคุณในขณะที่เติบโต
นี้บทความ Githubนอกจากนี้ยังมีบางความคิดทั่วไปและแนวทาง
ลบไฟล์ที่เพิ่มไปยัง git แล้ว
สุดท้ายคุณต้องลบไฟล์ DS Store เหล่านั้นออกจากไดเรกทอรีของคุณ
ใช้คำสั่งที่ยอดเยี่ยมนี้จากคำตอบที่ได้รับการโหวตสูงสุด นี่จะผ่านโฟลเดอร์ทั้งหมดในไดเรกทอรีของคุณและลบไฟล์เหล่านั้นออกจากคอมไพล์
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
กด. gitignore ถึง Github
ขั้นตอนสุดท้ายคุณต้องยอมรับไฟล์. gitignore ของคุณ
git status
git add .gitignore
git commit -m '.DS_Store banished!'
ฉันต้องเปลี่ยน git-rm เป็น git rm ด้านบนเพื่อให้มันทำงาน:
find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
ลบพวกเขาโดยใช้git-rm
แล้วเพิ่ม. DS_Store เป็น.gitignore
เพื่อหยุดการเพิ่มอีกครั้ง คุณยังสามารถใช้blueharvestเพื่อหยุดการสร้างทั้งหมดด้วยกัน
ในกรณีที่คุณต้องการลบไฟล์ DS_Store ไปยังทุกโฟลเดอร์และโฟลเดอร์ย่อย:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
ไม่สนใจพวกเขาโดย:
echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global
ต่อไปนี้ทำงานได้ดีที่สุดสำหรับฉัน จัดการไฟล์ที่ไม่ตรงกันและไฟล์ที่มีการแก้ไขในเครื่อง สำหรับการอ้างอิงนี่เป็นระบบ Mac 10.7 ที่รัน git 1.7.4.4
ค้นหาและลบ:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch -f
ฉันยังเพิกเฉยต่อทั่วโลก. DS_Store ข้ามที่เก็บข้อมูลทั้งหมดโดยการตั้งค่า global core.excludesfile
ก่อนอื่นให้สร้างไฟล์ (หากไม่มีอยู่):
touch ~/.gitignore
จากนั้นเพิ่มบรรทัดต่อไปนี้และบันทึก:
.DS_Store
ตอนนี้กำหนดค่าคอมไพล์ให้เคารพไฟล์ทั่วโลก:
git config --global core.excludesfile ~/.gitignore
ใช้คำสั่งนี้เพื่อลบไฟล์ที่มีอยู่:
find . -name '*.DS_Store' -type f -delete
จากนั้นเพิ่ม.DS_Store
ไป.gitignore
ฉันพบว่าบรรทัดต่อไปนี้จากsnipplrทำได้ดีที่สุดในการเช็ดทั้งหมด.DS_Store
รวมถึงบรรทัดที่มีการแก้ไขในท้องถิ่น
find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print
--cached
ตัวเลือกช่วยให้ท้องถิ่นของคุณ.DS_Store
เพราะมันจะถูกทำซ้ำต่อไป
และเช่นเดียวกับที่กล่าวถึงข้างต้นให้เพิ่ม.DS_Store
ไฟล์. gitignore ลงในรากของโครงการของคุณ จากนั้นจะไม่อยู่ในสายตาของคุณอีกต่อไป (จาก repos)
ฉันไปงานปาร์ตี้ช้า แต่ฉันมีคำตอบที่ดี ในการลบไฟล์. DS_Store ให้ใช้คำสั่งต่อไปนี้จากหน้าต่างเทอร์มินัล แต่ต้องระมัดระวังในการลบไฟล์ด้วย 'find' การใช้ชื่อเฉพาะกับตัวเลือก -name เป็นหนึ่งในวิธีที่ปลอดภัยกว่าในการใช้:
cd directory/above/affected/workareas
find . -name .DS_Store -delete
คุณสามารถออกจาก "-delete" หากคุณต้องการรายการพวกเขาก่อนและหลัง นั่นจะทำให้คุณมั่นใจว่าพวกเขาจากไปแล้ว
เกี่ยวกับคำแนะนำ ~ / .gitignore_global: ระวังที่นี่ คุณต้องการที่จะวางไฟล์ที่ดีลงใน. gitignore ในระดับสูงสุดของแต่ละ workarea และกระทำเพื่อให้ทุกคนที่โคลน repo ของคุณจะได้รับประโยชน์จากการใช้งาน
สิ่งนี้จะได้ผล:
find . -name "*.DS_Store" -type f -exec git-rm {} \;
มันลบไฟล์ทั้งหมดที่มีชื่อลงท้ายด้วยรวมทั้ง.DS_Store
._.DS_Store
"*.DS_Store"
เพื่อให้เครื่องหมายดอกจันส่งผ่านไปยังfind
แทนที่จะขยายโดยเชลล์
ด้วยเหตุผลบางอย่างการทำงานบน mac ของฉันไม่ทำงาน
โซลูชันของฉันมาจากการรันเทอร์มินัล:
rm .DS_Store
จากนั้นเรียกใช้คำสั่งต่อไปนี้:
git pull origin master
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force
เมื่อเริ่มต้นพื้นที่เก็บข้อมูลของคุณข้ามคำสั่ง git ที่มี
-u
และมันก็ไม่ควรเป็นปัญหา
สิ่งนี้ใช้ได้สำหรับฉันคำสั่งผสมสองคำตอบจากด้านบน:
ลบไฟล์ที่ถูกละเว้น:
(.DS_Store)
$ find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
มีวิธีแก้ไขปัญหาไม่กี่วิธีในการแก้ไขปัญหานี้ เพื่อหลีกเลี่ยงการสร้างไฟล์. DS_Store อย่าใช้ OS X Finder เพื่อดูโฟลเดอร์ อีกวิธีหนึ่งในการดูโฟลเดอร์คือการใช้บรรทัดคำสั่ง UNIX หากต้องการลบไฟล์. DS_Store สามารถใช้ผลิตภัณฑ์ของบุคคลที่สามชื่อ DS_Store Terminator ในการลบไฟล์. DS_Store ออกจากทั้งระบบคุณสามารถใช้คำสั่งเชลล์ UNIX ได้ เรียกใช้ Terminal จาก Applications: Utilities ที่พร้อมต์เชลล์ UNIX ป้อนคำสั่ง UNIX ต่อไปนี้: sudo find / -name ".DS_Store" -depth -exec rm {} \; เมื่อได้รับแจ้งให้ใส่รหัสผ่านให้ป้อนรหัสผ่านผู้ดูแลระบบ Mac OS X
คำสั่งนี้คือการค้นหาและลบ. DS_Store ที่เกิดขึ้นทั้งหมดที่เริ่มต้นจากรูท (/) ของระบบไฟล์ผ่านเครื่องทั้งหมด ในการกำหนดค่าคำสั่งนี้ให้ทำงานเป็นภารกิจที่กำหนดเวลาไว้ให้ทำตามขั้นตอนด้านล่าง: เรียกใช้เทอร์มินัลจากแอปพลิเคชัน: ยูทิลิตี้ที่พรอมต์เชลล์ UNIX ป้อนคำสั่ง UNIX ต่อไปนี้:
sudo crontab -e เมื่อระบบขอให้ใส่รหัสผ่านให้ป้อนรหัสผ่านผู้ดูแลระบบ Mac OS X เมื่ออยู่ในเครื่องมือแก้ไข vi กดตัวอักษร I บนแป้นพิมพ์ของคุณหนึ่งครั้งและป้อนข้อมูลต่อไปนี้:
15 1 * * * รูทค้นหา / -name ".DS_Store" -depth -exec rm {} \;
นี่เรียกว่ารายการ crontab ซึ่งมีรูปแบบต่อไปนี้:
นาทีชั่วโมง DayOfMonth เดือน DayOfWeek คำสั่งผู้ใช้
รายการ crontab หมายความว่าคำสั่งจะถูกดำเนินการโดยระบบโดยอัตโนมัติเวลา 1:15 น. ทุกวันโดยบัญชีที่เรียกว่ารูท
คำสั่งเริ่มต้นจากหาจนไปถึง หากระบบไม่ได้ใช้คำสั่งนี้จะไม่ได้รับการดำเนินการ
หากต้องการบันทึกรายการให้กดปุ่ม Esc หนึ่งครั้งจากนั้นกด Shift + z + z
หมายเหตุ: ข้อมูลในขั้นตอนที่ 4 ใช้สำหรับเครื่องมือแก้ไข vi เท่านั้น
เพิ่มลงในไฟล์ของคุณ. gignignore
#Ignore folder mac
.DS_Store
บันทึกสิ่งนี้และทำการกระทำ
git add -A
git commit -m "ignore .DS_Store"
และตอนนี้คุณไม่สนใจสิ่งนี้สำหรับการกระทำทั้งหมดของคุณ
สร้าง.gitignore
ไฟล์โดยใช้คำสั่งtouch .gitignore
และเพิ่มบรรทัดต่อไปนี้ในนั้น
.DS_Store
บันทึก.gitignore
ไฟล์แล้วดันเข้าไปยัง repo คอมไพล์ของคุณ
วิธีที่ดีที่สุดในการกำจัดไฟล์นี้ตลอดไปและไม่ต้องกังวลอีกต่อไปคือ
สร้างไฟล์. global ทั่วโลก:
echo .DS_Store >> ~ / .gitignore_global
และให้ git รู้ว่าคุณต้องการใช้ไฟล์นี้สำหรับที่เก็บข้อมูลทั้งหมดของคุณ:
git config - global core.excludesfile ~ / .gitignore_global และนั่นแหละ! .DS_Store อยู่ใกล้คุณแล้ว
ไม่จำเป็นต้องลบ.DS_STORE
ในเครื่อง
เพียงเพิ่มลงใน.gitignore
ไฟล์
ไฟล์. gitignore เป็นเพียงไฟล์ข้อความที่บอก Git ว่าไฟล์หรือโฟลเดอร์ใดที่จะไม่สนใจในโครงการ
คำสั่ง
nano .gitignore
.DS_Store
จากนั้นคลิกCTRL+X > y > Hit Return
git status
หากต้องการดูการเปลี่ยนแปลงของคุณครั้งสุดท้ายgit add .gitignore
git commit -m 'YOUR COMMIT MESSAGE'
git push origin master