.gitignore ไฟล์. DS_Store ทั้งหมดในทุกโฟลเดอร์และโฟลเดอร์ย่อย


560

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

ฉันจะแก้ไขได้อย่างไร


3
มีความเป็นไปได้ที่ซ้ำกันของฉันจะลบไฟล์. DS_Store ออกจากที่เก็บ Git ได้อย่างไร

คุณเพิ่มลงใน. gitignore ได้อย่างไร มันควรจะทำงานในไดเรกทอรีทั้งหมด (สำหรับฉัน)
Thilo

มันทำงานสำหรับฉันเช่นกัน ฉันยังลองเมื่อมันสิ้นสุดไฟล์ถ้าคุณต้องมี newline (เฉพาะแพลตฟอร์ม) แต่นั่นไม่ได้เปลี่ยนไดเรกทอรี. DS_Store ภายในส่วนใด ๆ ของลำดับชั้นก็ยังไม่สนใจ
enorl76

คำถามที่ฉันเข้าใจก็คือ: จะเพิกเฉยต่อการเกิดขึ้นทั้งหมดของ. DS_Store ในไดเรกทอรีย่อยทั้งหมดได้อย่างไรโดยไม่ต้องทำสิ่งนี้ด้วยตนเองในทุกไดเรกทอรีย่อย ผมมีปัญหาเดียวกัน. คำตอบด้านล่างแสดงวิธีแก้ไข (2 ย่อหน้าสุดท้าย)
petrsyn

คำตอบ:


647

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

คุณต้องลบไฟล์. DS_Store ที่ถูกเพิ่มไปยังที่เก็บของคุณด้วยตนเอง git rm --cached .DS_Storeคุณสามารถใช้ เมื่อถูกลบออกแล้วคอมไพล์ควรเพิกเฉย คุณควรจะต้องบรรทัดต่อไปนี้ในแฟ้ม .gitignore .DS_Storeรากของคุณ: อย่าลืมช่วงเวลา!

git rm --cached .DS_Storeลบออก.DS_Storeจากไดเรกทอรีปัจจุบันเท่านั้น คุณสามารถใช้find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatchเพื่อลบทั้งหมดออก.DS_Storesจากพื้นที่เก็บข้อมูล

เคล็ดลับที่รู้สึก: เนื่องจากคุณอาจไม่ต้องการรวมไฟล์. DS_Store ให้สร้างกฎทั่วโลก ครั้งแรกที่ทำให้โลก .gitignore echo .DS_Store >> ~/.gitignore_globalไฟล์บางแห่งเช่น ตอนนี้บอกคอมไพล์ให้ใช้สำหรับที่เก็บทั้งหมด: git config --global core.excludesfile ~/.gitignore_global.

หน้านี้ช่วยฉันตอบคำถามของคุณ: https://help.github.com/articles/ignoring-files


41
2 ย่อหน้าสุดท้ายตอบคำถามนี้ ขอบคุณ
petrsyn

70
´´git rm --cached .DS_Store´´ ลบ. DS_Store เพียงอันเดียวออกจากไดเรกทอรีปัจจุบัน ใช้´´find -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch´´ เพื่อลบ. DS_ ที่เก็บทั้งหมดจาก repo
auco

4
รายการไฟล์ทั่วไปที่ควรเพิกเฉยอาจเป็นประโยชน์
geotheory

14
ความคิดที่ไม่ดีในการใช้กฎสากล IMO: การพยายามรักษาการตั้งค่าส่วนกลางสำหรับผู้ใช้หลายเครื่อง / เครื่องไม่เคยทำงาน - คุณต้องการกฎที่ควบคุมดูแล repo ของคุณใน repo เห็นด้วยกับเรื่องนี้
Yarin

15
ฉันไม่เห็นด้วยกับคุณ (แม้ว่าฉันจะยกระดับความคิดเห็นของคุณเพราะฉันคิดว่ามันลึกซึ้ง) ถ้าเราทำทั่วโลกผู้ใช้ Mac ทุกคนต้องทำอย่างนั้น แต่เพียงครั้งเดียว ถ้าเราทำพื้นที่เก็บข้อมูลกว้างเราจำเป็นต้องทำทุกพื้นที่เก็บข้อมูล ฉันไม่รู้เกี่ยวกับคุณ แต่ฉันทำ repos ใหม่ตลอดเวลา ด้วยการทำทั่วโลกเราสามารถแก้ไขปัญหาได้ในทันที
Edward Newell

356

เพิ่ม**/.DS_Storeลง.gitignoreในไดเรกทอรีย่อย


หาก.DS_Storeมุ่งมั่นแล้ว:

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch

ที่จะไม่สนใจพวกเขาในพื้นที่เก็บข้อมูลทั้งหมด: (บางครั้งก็ตั้งชื่อ._.DS_Store)

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

ยังคงอัปโหลดไปยัง repo ของฉัน?
Freddy Sidauruk

@FreddySidauruk ใช้งานgit rm --cached your_fileครั้งแรก
ronald8192

@FreddySidauruk ควรเป็นfind . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatchจาก: stackoverflow.com/questions/18393498/…
ronald8192

1
ดูเหมือนว่า-fจำเป็นต้องมีการเพิ่มหากคุณมีไฟล์ที่เปิดอยู่ในโฟลเดอร์ relavent:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
เมห์เม็ตแคปแลน

158

ถ้า. DS_Store ไม่เคยถูกเพิ่มไปยังที่เก็บ git ของคุณเพียงเพิ่มไปยังไฟล์. gitignore ของคุณ

หากคุณไม่มีไฟล์ให้สร้างไฟล์ชื่อ

.gitignore

ในไดเรกทอรีรากของแอปของคุณและเขียน

**/.DS_Store

ในนั้น. สิ่งนี้จะไม่อนุญาตให้ไฟล์. DS_Store แอบเข้าไปในคอมไพล์ของคุณ

แต่ถ้ามันมีอยู่แล้วเขียนใน terminal ของคุณ:

find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

จากนั้นคอมมิตและผลักดันการเปลี่ยนแปลงเพื่อลบ. DS_Store ออกจาก repo ระยะไกลของคุณ:

git commit -m "Remove .DS_Store from everywhere"

git push origin master

และตอนนี้เพิ่ม. DS_Store ไปยังไฟล์. gitignore ของคุณจากนั้นส่งและรับอีกครั้งด้วยรหัส 2 ชิ้นสุดท้าย (git กระทำ ... , git push ... )


3
ทำไมต้องใส่เครื่องหมายดอกจันเป็นสองเท่า นั่นหมายความว่าอย่างไร?
MilanG

1
@MilanG เป็นคำหลักที่โดยทั่วไปหมายถึง 'ค้นหาในไดเรกทอรีนี้และไดเรกทอรีย่อยทั้งหมด'
lachie_h

1
ไม่แน่ใจว่าเป็นคำอธิบายที่สมบูรณ์แบบของเครื่องหมายดอกจันสองตัว เป็นสัญลักษณ์แทน สามารถ*หรือ**ขึ้นอยู่กับสิ่งที่คุณต้องการบรรลุ มันเป็นวิธีการบอกเชลล์ถึงวิธีการนำทางไดเรกทอรี คำตอบของ stackoverflow นี้อธิบายได้อย่างสมบูรณ์ว่าstackoverflow.com/a/28199633/4092170
El'Magnifico

** จะไม่ตรงกับไดเรกทอรี (./) ที่ซ่อนอยู่: facelessuser.github.io/wcmatch/glob
โจนาธาน

มันใช้งานได้จริง ... ควรทำเครื่องหมายเป็นคำตอบ
247

85

ไฟล์. gitignoreของคุณควรมีลักษณะดังนี้:

# Ignore Mac DS_Store files
.DS_Store

ตราบใดที่คุณไม่มีเครื่องหมายสแลชมันจะถูกจับคู่กับชื่อไฟล์ในไดเรกทอรีทั้งหมด (จากที่นี่ )


มันยังอัปเกรดเป็น repo
Freddy Sidauruk

@FreddySidauruk คุณต้องวิ่งgit rm --cached path/to/file/here
Sgnl

23

ขั้นตอนที่ 1 ลบ*.DS_storeไฟล์ทั้งหมด หนึ่งสามารถเรียกใช้

git rm -f *.DS_Store

แต่ระวังให้ดีrm -fอาจเป็นอันตรายได้หากคุณพิมพ์ผิด! ขั้นตอนที่สอง: เพิ่ม

*.DS_Store
.DS_Store

ถึง. gitignore สิ่งนี้ได้ผลสำหรับฉัน!



11

นอกจากนี้คุณยังสามารถเพิ่มการ--cachedตั้งค่าสถานะในคำตอบของ auco เพื่อรักษาไฟล์. DS_store ในเครื่องตามที่ Edward Newell พูดถึงในคำตอบดั้งเดิมของเขา คำสั่งที่แก้ไขแล้วจะมีลักษณะเช่นนี้: find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch..cheers และขอบคุณ!


5

ขั้นตอน: 1) ลบไฟล์ที่มีอยู่โดยใช้คำสั่งนี้

หา -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

ขั้นตอน: 2) เพิ่ม. DS_Store ในไฟล์. gitignore ของคุณ

ขั้นตอน: 3) ยอมรับการเปลี่ยนแปลงของคุณใน. gitignore git เพิ่ม. gitignore git กระทำ -m "ลบออก. DS_Store"


3
  1. $ git rm ./*.DS_Store - ลบ. DS_Store ทั้งหมดออกจากคอมไพล์
  2. $ echo \.DS_Store >> .gitignore - ละเว้น. DS_Store ในอนาคต

กระทำ & ดัน

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