เก็บไฟล์ที่ถูกละเว้นไม่ให้อยู่ในสถานะคอมไพล์


133

ฉันต้องการหยุด Git ไม่ให้แสดงไฟล์ที่ถูกละเว้นgit statusเนื่องจากมีไฟล์เอกสารและไฟล์กำหนดค่าจำนวนมากในรายการไฟล์ที่เปลี่ยนแปลง แต่ไม่ได้รับการอัปเดตทำให้รายการไม่มีประโยชน์ครึ่งหนึ่ง

เป็นเรื่องปกติหรือไม่ที่ Git จะแสดงไฟล์เหล่านี้

ฉันใส่ข้อมูลการละเว้นใน.gitignoreไฟล์ในไดเร็กทอรีรูทของที่เก็บ Git และจะไม่ถูกเพิ่มเมื่อใช้งานgit add .แต่ดูเหมือนว่าจะไม่ถูกละเว้นอย่างเต็มที่เนื่องจากปรากฏในรายการดังกล่าวและไม่ปรากฏในรายการ พิมพ์โดยgit ls-files --others -i --exclude-standard. เฉพาะไฟล์ที่ตรงกับรูปแบบที่~/.gitignoreแสดงอยู่ที่นั่น

อาจเป็นเพราะในช่วงก่อนหน้านี้ฉันไม่ได้เพิกเฉยต่อพวกเขาและพวกเขาก็มุ่งมั่นอย่างน้อยหนึ่งครั้ง?

คำตอบ:


231

ขณะที่ผมพบในโพสต์นี้ , .gitignoreทำงานเฉพาะสำหรับไฟล์ที่ไม่ได้ติดตาม หากคุณเพิ่มไฟล์ลงในที่เก็บคุณสามารถ:

git update-index --assume-unchanged <file>

หรือลบออกจากที่เก็บโดย

git rm --cached <file>

แก้ไข

บทความนี้อธิบายเช่นกัน


4
update-index ใช้งานได้สำหรับฉัน ปัญหาที่คล้ายกันเมื่อสถานะ git แสดงไฟล์ที่ถูกละเว้น ... น่ารำคาญมาก +1
Abe Petrillo

3
ฉันยังคงมีปัญหานี้ คำสั่งข้างต้นไม่ได้ผลสำหรับฉัน ในทั้งสองกรณี git บอกว่าไม่มีความรู้เกี่ยวกับไฟล์ที่เป็นปัญหา แต่ยังคงปรากฏในสถานะ git :(
Cfreak

5
@Cfreak git status -- <file>แสดง "การเปลี่ยนแปลงที่ไม่ได้จัดฉากเพื่อกระทำ" หรือ "ไฟล์ที่ไม่ได้ติดตาม" สำหรับไฟล์ของคุณหรือไม่ ก่อนหน้านี้คือถ้าคุณมีไฟล์ในดัชนีอยู่แล้วและฉันต้องการข้อมูลเพิ่มเติมเพื่อแก้ปัญหาของคุณ (ควรสร้างคำถามแยกต่างหากพร้อมกับแสดงข้อความคอมไพล์และเพียงแค่โพสต์ลิงก์ไปยังความคิดเห็น) ไฟล์ต่อมามีไว้สำหรับไฟล์ที่ไม่ได้ติดตามโดย git (ยัง) แต่ไม่ได้อยู่ใน.gitignoreไฟล์และสามารถเพิ่มลงในดัชนีได้อย่างอิสระ
MBO

1
@MBO - ใช่แล้ว ขอบคุณ! ความคิดเห็นของคุณช่วยให้ฉันพบคำตอบนี้: stackoverflow.com/questions/594757/…ซึ่งเหมาะกับฉัน
Cfreak

1
ตัวเลือกแรกใช้งานได้เหมือนมีเสน่ห์ ฉันลองอันที่สองแล้วและมันทำให้ไฟล์ถูกจัดฉากเป็น "ลบ" และฉันไม่ต้องการอย่างนั้นแน่นอน
Carrm

16

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

ดังนั้นคุณต้องล้างแคชการติดตามคอมไพล์ดังนี้:

git rm --cached -r [folder/file name]

สามารถอ่านคำอธิบายโดยละเอียดเพิ่มเติมได้ที่นี่: http://www.frontendjunkie.com/2014/12/stop-git-from-tracking-changes-to.html

คำสั่งดังกล่าวยังลบส่วนที่เหลือของโฟลเดอร์ / ไฟล์ออกจากต้นทาง GIT ระยะไกลของคุณ เพื่อให้ GIT repos ของคุณสะอาดหมดจด


12

ปัญหาอาจเกิดจากไฟล์นี้ยังอยู่ใน git cache ในการแก้ปัญหานี้จำเป็นต้องรีเซ็ต git cache

รีเซ็ต git cache สิ่งนี้จะลบทุกอย่างออกจากดัชนี

git rm -r --cached . 

เพิ่มไฟล์ทั้งหมดอีกครั้ง:

git add . 

Commit:

git commit -m ".gitignore was fixed." 


1

ฉันคิดว่าคุณไม่ต้องการเพิ่มไดเรกทอรี tmp (แพลตฟอร์ม Visual Studio)

1- เพิ่มบรรทัดด้านล่างลงในไฟล์. gitignore ในเครื่องของคุณ

## ignore tmp
/tmp/
./tmp/

3- สำรองและลบโฟลเดอร์ tmp ในเครื่อง (สำรองข้อมูลที่อื่นเช่นเดสก์ท็อป?)

4- ยอมรับการเปลี่ยนแปลงเป็น Local มากกว่า Sync to Remote (เช่น github)

หลังจากขั้นตอนเหล่านี้ไดเรกทอรี tmp ของคุณจะไม่ถูกอัปโหลดอีก


0

จากman git-lsfiles :

-i, --ignored
Show ignored files in the output. Note that this also reverses any exclude list present.

โดยส่วนตัวแล้วฉันมักจะเก็บไฟล์ doxygen ไว้ในแผนผังซอร์สของฉันดังนั้นฉันจึงเพิ่มสิ่งนี้ลงใน. gitignore ของฉัน (ซึ่งอยู่ในไดเร็กทอรีบนสุดของแผนผังต้นทางของฉัน):

docs/*

หวังว่าจะช่วยได้


0

ขั้นตอนต่อไปนี้ใช้ได้กับไฟล์ที่ไม่ถูกติดตามเท่านั้น ข้อมูลนี้ใช้ได้กับการกำหนดค่าต่อไปนี้:

Platform: linux

Git version: git version 1.8.3.1

ใส่รายชื่อไฟล์ที่จะละเว้นในไฟล์ "ไม่รวม" ที่อยู่ในตำแหน่งต่อไปนี้

<path till .git directory>/.git/info/exclude

เนื้อหาเริ่มต้นของไฟล์ "ไม่รวม"

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~

เนื้อหาสุดท้ายของไฟล์ "ไม่รวม"

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~


*.tar
*.gch

0

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

บางอย่างเช่นgit update-index --assume-unchanged src/main/resources/config.properties โดยที่ src / main.resources / config.properties เป็นตัวอย่างสำหรับพา ธ ในการค้นหาไฟล์นั้นภายในโปรเจ็กต์ของคุณ

ตอนนี้ถ้าคุณต้องการลบไฟล์ทั้งหมดออกจากที่เก็บของคุณคุณอาจต้องการใช้remove cachedแทน `git rm --cached

สถานการณ์นี้สามารถใช้ได้กับสถานการณ์ต่อไปนี้:

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


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