Gitignore ไม่ทำงาน


275

.gitignoreไฟล์ของฉันใช้งานไม่ได้ด้วยเหตุผลบางอย่างและไม่สามารถแก้ไขจำนวน Googling ได้ นี่คือสิ่งที่ฉันมี:

*.apk
*.ap_
*.dex
*.class
**/bin/
**/gen/
.gradle/
build/
local.properties
**/proguard/
*.log

มันอยู่ในไดเรกทอรีmasterซึ่งเป็น repit คอมไพล์ของฉัน ฉันใช้ Git 1.8.4.2 อยู่เพราะฉันใช้ MacBook ที่ใช้ OSX 10.8.6


4
1. ไฟล์ใดที่ถูกทำดัชนีแม้ว่าไม่ควรทำ? 2. คุณเพิ่ม. gitignore หลังจากที่คุณเพิ่มไฟล์เหล่านี้ไปยัง repo หรือไม่?
Ahmad

2
@Ahmad ในโครงการหลายโฟลเดอร์ยังคงแสดงให้เห็นว่าเมื่อฉันทำ/bin/ git statusฉันไม่ได้เปลี่ยนไฟล์เหล่านั้นตั้งแต่ฉันเพิ่ม.gitignore
user3280133

1
"ตั้งแต่ฉันเพิ่ม. gitignore" - คุณเพิ่ม. gitignore หลังจากเพิ่มไฟล์เหรอ?
Ahmad

3
สำเนาซ้ำของ. gignignore ไม่ทำงาน
Liam

คำตอบ:


686

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

( อย่าลืมคอมมิตทุกสิ่งที่คุณเปลี่ยนไปก่อนที่จะทำ )

git rm -rf --cached .
git add .

สิ่งนี้จะลบไฟล์ทั้งหมดออกจากพื้นที่เก็บข้อมูลและเพิ่มกลับมา (ในครั้งนี้เป็นไปตามกฎในของคุณ.gitignore)


2
หรือคุณอาจลองคืนค่าไฟล์ / โฟลเดอร์ที่คุณเพิ่มไปยัง. gitignore โดยใช้ git checkout folder_to_ignore / *
Zahra

1
@Greenish แต่จะไม่ทำงานหากพวกเขาได้รับการยอมรับแล้วจะทำงานเฉพาะเมื่อพวกเขาได้รับการจัดฉากซึ่งในกรณีที่โฟลเดอร์ที่มีอยู่แล้วใน. gitignore ไม่ควรเกิดขึ้น (เว้นแต่คุณจะเพิ่ม) :)
Ahmad

1
ไม่ทำงานสำหรับฉันเมื่อฉันผลักดันการเปลี่ยนแปลงไปยัง GitHub บอกว่าทุกอย่างทันสมัยแล้ว !!!!
ดร. Younes Henni

1
ขออภัยอาเหม็ดฉันแก้ไขปัญหาของฉันโดยการลบไฟล์ gitignore และดึงและดันอีกครั้งไปยัง repo ระยะไกล ฉันจำไม่ได้ว่ามันพูดอะไรเมื่อฉันพิมพ์สถานะ git ปัญหาของฉันได้รับการแก้ไข ขอบคุณมาก.
ดร. Younes Henni

3
ฉันคิดว่ามันจะดีกว่า git เพิ่มคำสั่ง 'git ละเว้น' เพื่อทำให้สิ่งนี้ง่ายขึ้น ดังนั้นเราสามารถใช้งานgit ignore path/fileได้ตลอดเวลา
Tiw

123

หากต้องการยกเลิกการติดตามไฟล์เดียวที่เพิ่ม / เริ่มต้นไปยังที่เก็บข้อมูลของคุณแล้วให้หยุดการติดตามไฟล์ แต่ไม่ลบไฟล์ออกจากระบบของคุณ: git rm --cached filename

หากต้องการยกเลิกการติดตามทุกไฟล์ที่อยู่ในตอนนี้.gitignore:

ก่อนอื่นยอมรับการเปลี่ยนแปลงรหัสคงค้างจากนั้นให้เรียกใช้คำสั่งนี้:

git rm -r --cached .

สิ่งนี้จะลบไฟล์ที่เปลี่ยนแปลงใด ๆ ออกจากดัชนี (พื้นที่การจัดเตรียม) จากนั้นให้เรียกใช้:

git add .

กระทำมัน

git commit -m ".gitignore is now working"

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

คุณจะใช้คำสั่งนี้เพื่อลบโฟลเดอร์ออกจากแคชแทนที่จะเป็นไฟล์ได้อย่างไร?
RealMJDev

15

หลังจากลงไปเล็กน้อยจากช่องกระต่ายพยายามทำตามคำตอบของคำถามนี้ (อาจเป็นเพราะฉันต้องทำสิ่งนี้ในโครงการ Visual Studio) ฉันพบเส้นทางที่ง่ายขึ้นคือ

  1. ตัดและวางไฟล์ที่ฉันไม่ต้องการติดตามในตำแหน่งชั่วคราวอีกต่อไป

  2. ยอมรับ "การลบ" ของไฟล์เหล่านั้น

  3. ยอมรับการแก้ไข.gitignoreเพื่อยกเว้นไฟล์ที่ฉันย้ายชั่วคราว

  4. ย้ายไฟล์กลับเข้าไปในโฟลเดอร์

ฉันพบว่านี่เป็นวิธีที่ตรงไปตรงมามากที่สุด (อย่างน้อยในสตูดิโอภาพหรือฉันจะสมมติ IDE สภาพแวดล้อมอื่น ๆ เช่น Android Studio) โดยไม่ตั้งใจยิงตัวเองด้วยเท้าที่ค่อนข้างแพร่หลายgit rm -rf --cached .หลังจากนั้น โครงการ visual studio ที่ฉันทำงานอยู่ไม่ได้โหลด


2
ฉันค่อนข้างชอบวิธีการนี้ - ดูเหมือนจะทำลายล้างน้อยลงแม้ว่าจะไม่ถือว่า "เหมาะสม"
Theyetiman

6

ในกรณีของฉันมันเป็นช่องว่างที่จุดเริ่มต้นของไฟล์ที่ปรากฏอย่างชัดเจนเมื่อฉันเปิดไฟล์ใน Notepad ไม่ชัดเจนใน Visual Studio Code


4

ฉันใช้บางสิ่งเพื่อสร้างสิ่งที่เหมือนกัน.gitignoreสำหรับฉันและฉันพบเจอสิ่งนี้ หลังจากอ่านคำตอบ @Ozesh ฉันเปิดในรหัส VS เพราะมันมีตัวบ่งชี้ที่ดีที่ด้านล่างขวาแสดงประเภทของการสิ้นสุดบรรทัด มันเป็น LF ดังนั้นฉันจึงเปลี่ยนเป็น CRLF ตามที่แนะนำ แต่ไม่มีลูกเต๋า

จากนั้นฉันดูถัดจากตอนท้ายของบรรทัดและสังเกตว่ามันถูกบันทึกโดยใช้ UTF16 ดังนั้นฉันบันทึกใหม่โดยใช้ UTF8 เข้ารหัส voila มันทำงานได้ ฉันไม่คิดว่า CRLF สำคัญดังนั้นฉันจึงเปลี่ยนเป็น LF เพื่อให้แน่ใจและยังใช้งานได้

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

TLDR ; หากคุณยังไม่ได้กำหนดไฟล์และ. gitignore ยังไม่ได้รับการยอมรับจากนั้นตรวจสอบการเข้ารหัสไฟล์และตรวจสอบให้แน่ใจว่าเป็น UTF8 และหากไม่ได้ผลให้ลองใช้งานด้วยการสิ้นสุดของบรรทัด


1
UTF16 เป็นตัวการสำคัญสำหรับฉัน เปิดรหัส VS> เปิด. gitignore> เปิดพร้อมท์คำสั่ง> "เปลี่ยนการเข้ารหัสไฟล์"> "UTF-8"> บันทึกไฟล์
Michael

3

ในกรณีของฉัน whitespaces ในตอนท้ายของบรรทัดของ. gitignore เป็นสาเหตุ ดังนั้นระวังช่องว่างใน. gitignore!


2

ฉันแก้ไขปัญหาของฉันโดยทำสิ่งต่อไปนี้:

ก่อนอื่นฉันเป็นผู้ใช้ windows แต่ฉันประสบปัญหาคล้ายกัน ดังนั้นฉันกำลังโพสต์โซลูชั่นของฉันที่นี่

มีเหตุผลง่ายๆว่าทำไมบางครั้ง. gignignore ไม่ทำงานเหมือนที่ควรจะเป็น มันเป็นเพราะพฤติกรรมการแปลง EOL

นี่คือการแก้ไขด่วนสำหรับสิ่งนั้น

แก้ไข> การแปลง EOL> รูปแบบ Windows> บันทึก

คุณสามารถตำหนิการตั้งค่าแก้ไขข้อความของคุณที่

ตัวอย่างเช่น:

ในฐานะที่ฉันเป็นนักพัฒนา windows ฉันมักจะใช้Notepad ++เพื่อแก้ไขข้อความของฉันไม่เหมือนกับผู้ใช้ Vim

ดังนั้นสิ่งที่เกิดขึ้นคือเมื่อฉันเปิดไฟล์. gignignore ของฉันโดยใช้ Notepad ++ ดูเหมือนว่า:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore


# See https://help.github.com/ignore-files/ for more about ignoring files.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
*.dll
*.force
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

หากฉันเปิดไฟล์เดียวกันโดยใช้ Notepad เริ่มต้นนี่คือสิ่งที่ฉันได้รับ

## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from  https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # See https://help.github.com/ignore-files/ for more about ignoring files. # User-specific files *.suo *.user *.userosscache 

ดังนั้นคุณอาจเดาได้แล้วโดยดูที่ผลลัพธ์ ทุกอย่างใน. gitignore ได้กลายเป็นหนึ่งซับและเนื่องจากมี ## ในการเริ่มต้นมันทำหน้าที่ราวกับว่าทุกอย่างถูกแสดงความคิดเห็น

วิธีการแก้ไขปัญหานี้ง่ายมากเพียงแค่เปิดไฟล์. gitignore ของคุณด้วย Notepad ++ จากนั้นทำดังต่อไปนี้

แก้ไข> การแปลง EOL> รูปแบบ Windows> บันทึก

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


1

นอกจากนี้ความคิดเห็นจะต้องอยู่ในสายของตัวเอง พวกเขาไม่สามารถใส่หลังจากรายการ ดังนั้นสิ่งนี้จะไม่ทำงาน:

/node_modules  # DON'T COMMENT HERE (since nullifies entire line)

แต่สิ่งนี้จะได้ผล:

# fine to comment here
/node_modules

0

ไม่git reset --hardทำงานให้ใคร? ฉันไม่ได้บอกว่านี่เป็นวิธีแก้ปัญหาที่ดีมันก็ดูเหมือนว่าจะได้ทำงานครั้งแรกที่ฉันพยายาม


โปรดละเว้นความคิดเห็นของฉันด้านบน ที่ทำงานบางคนทำอะไรผิดอย่างมากใน Git มันทำให้เกิดโฟลเดอร์ซ้ำกันและฉันก็ไม่รู้ตัวซักพักนึง ขอบคุณ
user1889992

0

ฉันทำผิดพลาดมากในการแก้ไข dockerignore ของฉันทำงานได้ดีหลังจากฉันพบไฟล์ที่ถูกละเว้น: p


0

การเพิ่มบิตของฉันเนื่องจากนี่เป็นคำถามยอดนิยม

ฉันไม่สามารถวางไดเรกทอรีประวัติภายใน. gignignore เพราะไม่ว่าฉันจะลองใช้คำสั่งผสมแบบใดมันก็ไม่ได้ผล Windows ยังคงสร้างไฟล์ใหม่ในทุก ๆ บันทึกและฉันไม่ต้องการเห็นไฟล์เหล่านี้เลย

ป้อนคำอธิบายรูปภาพที่นี่

แต่ฉันก็รู้ว่านี่เป็นเพียงสภาพแวดล้อมการพัฒนาส่วนบุคคลของฉันบนเครื่องของฉัน สิ่งต่าง ๆ เช่น. history หรือ. vscode นั้นมีลักษณะเฉพาะสำหรับฉันดังนั้นมันจะแปลกถ้าทุกคนรวมรายการ. gitignore ของตนเองขึ้นอยู่กับ IDE หรือ OS ที่ใช้

ดังนั้นนี่ใช้งานได้สำหรับฉันเพียงเพิ่ม ".history" เป็น. git / info / ไม่รวม

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