ฉันเพิ่มบรรทัดต่อไปนี้ใน.gitignore
:
sites/default/settings.php
แต่เมื่อฉันพิมพ์git status
มันจะแสดงไฟล์เป็นไฟล์ที่ไม่มีการจัดฉาก
มีปัญหาอะไร? รูปแบบอื่น ๆ ทั้งหมดทำงานได้ดี
ฉันเพิ่มบรรทัดต่อไปนี้ใน.gitignore
:
sites/default/settings.php
แต่เมื่อฉันพิมพ์git status
มันจะแสดงไฟล์เป็นไฟล์ที่ไม่มีการจัดฉาก
มีปัญหาอะไร? รูปแบบอื่น ๆ ทั้งหมดทำงานได้ดี
คำตอบ:
ตรวจสอบให้แน่ใจว่าคุณ.gitignore
อยู่ในรากของไดเรกทอรีการทำงานและในระยะไดเรกทอรีที่git status
และคัดลอก.gitignore
เส้นทางไปยังแฟ้มจากการแสดงผลสถานะและวางมันลงไป
หากวิธีนี้ใช้ไม่ได้แสดงว่าไฟล์ของคุณถูกติดตามโดย Git แล้ว git status
คุณสามารถยืนยันนี้ผ่านการส่งออกของ หากไฟล์นั้นไม่ปรากฏในส่วน“ ไฟล์ที่ไม่ได้ติดตาม” แสดงว่าไฟล์นั้นถูกติดตามโดย Git แล้วและจะไม่สนใจกฎจาก.gitignore
ไฟล์นั้น
เหตุผลในการเพิกเฉยไฟล์ใน Git คือเพื่อไม่ให้เพิ่มลงในที่เก็บ หากก่อนหน้านี้คุณเพิ่มไฟล์ที่คุณต้องการเพิกเฉยมันจะถูกติดตามโดย Git และกฎการเพิกเฉยที่ตรงกับมันจะถูกข้ามไป Git ทำเช่นนี้เนื่องจากไฟล์เป็นส่วนหนึ่งของที่เก็บข้อมูลอยู่แล้ว
ในการเพิกเฉยต่อไฟล์จริงๆคุณต้องยกเลิกการติดตามและลบออกจากพื้นที่เก็บข้อมูล git rm --cached sites/default/settings.php
คุณสามารถทำได้โดยใช้ สิ่งนี้จะลบไฟล์ออกจากพื้นที่เก็บข้อมูลโดยไม่ต้องลบไฟล์ทางกายภาพ (นั่นคือสิ่งที่--cached
ทำ) หลังจากยอมรับการเปลี่ยนแปลงไฟล์จะถูกลบออกจากที่เก็บและไม่ควรดำเนินการอย่างถูกต้อง
.git
ไดเร็กทอรีอยู่และตัวเองเป็นรูทของที่เก็บ เช่นเดียวกับเมื่อคุณโคลนที่เก็บข้อมูล/xy/
จากนั้น/xy/
เป็นไดเรกทอรีการทำงานของคุณด้วย/xy/.git/
ภายใน
git add .
ครู่git rm --cached
เพื่อสร้างดัชนีใหม่อย่างถูกต้อง
ฉันพบสิ่งนี้มันเป็นคำถามเก่า แต่ฉันต้องการให้ไฟล์นั้นถูกติดตาม แต่จะไม่ติดตามในสำเนาที่ทำงานได้เพื่อที่คุณจะได้ทำงาน
git update-index --assume-unchanged sites/default/settings.php
. gitignore จะเพิกเฉยต่อไฟล์ที่คุณยังไม่ได้เพิ่มในที่เก็บของคุณ
ถ้าคุณทำgit add .
และไฟล์ถูกเพิ่มไปยังดัชนี. gitignore จะไม่ช่วยคุณ คุณจะต้องทำgit rm sites/default/settings.php
เพื่อลบมันแล้วมันจะถูกละเว้น
git rm
ควรทำเช่นนั้น แต่อาจขอให้คุณใช้ตัวเลือก -f ซึ่งจะลบออกจากไดเรกทอรีการทำงาน ฉันไม่ได้คิดเรื่องนี้นอกจากทำสำเนาไฟล์ทำgit rm -f
แล้วกู้คืนสำเนา
กรุณาใช้คำสั่งนี้
git rm -rf --cached .
git add .
บางครั้งไฟล์. gignignore ไม่ทำงานแม้ว่าจะถูกต้อง เหตุผลที่ Git เพิกเฉยไฟล์คือพวกเขาไม่ได้ถูกเพิ่มในที่เก็บ หากคุณเพิ่มไฟล์ที่คุณต้องการเพิกเฉยก่อนหน้าไฟล์นั้นจะถูกติดตามโดย Git และกฎการจับคู่ที่ข้ามจะถูกข้ามไป Git ทำเช่นนี้เพราะไฟล์เป็นส่วนหนึ่งของที่เก็บข้อมูลอยู่แล้ว
ผมมีปัญหาเหมือนกัน. ไฟล์ที่กำหนดไว้ในสถานที่ที่ระบุว่าเป็นไฟล์ที่ไม่ได้ติดตามเมื่อทำงาน.gitingore
git status
เหตุผลก็คือ.gitignore
ไฟล์ถูกบันทึกในการUTF-16LE
เข้ารหัสไม่ใช่การUTF8
เข้ารหัส
หลังจากเปลี่ยนการเข้ารหัส.gitignore
ไฟล์เป็นไฟล์ที่UTF8
ใช้งานได้สำหรับฉัน
สิ่งที่ฉันทำเพื่อละเว้นไฟล์settings.phpสำเร็จ:
ฉันคิดว่าถ้ามีไฟล์ที่มุ่งมั่นใน Git แล้วละเว้นไม่ทำงานตามที่คาดไว้ เพียงแค่ลบไฟล์และกระทำ หลังจากนั้นมันจะไม่สนใจ
มีอินสแตนซ์เช่นไฟล์ Application Configuration ซึ่งฉันต้องการติดตามใน git (ดังนั้น. gignignore จะไม่ทำงาน) แต่ฉันต้องเปลี่ยนการตั้งค่าท้องถิ่น ฉันไม่ต้องการให้คอมไพล์จัดการไฟล์เหล่านี้หรือแสดงว่าถูกแก้ไข เมื่อต้องการทำสิ่งนี้ฉันใช้ skip-worktree:
git update-index --skip-worktree path/to/file
คุณสามารถยืนยันว่าไฟล์ถูกข้ามโดยการแสดงไฟล์และตรวจสอบบรรทัดที่ขึ้นต้นด้วย S เพื่อข้าม
git ls-files -v | grep ^S
หากในอนาคตคุณต้องการให้ git จัดการไฟล์ภายในเครื่องอีกครั้งให้เรียกใช้:
git update-index --no-skip-worktree path/to/file
เมสคาลิโตด้านบนมีคำตอบที่ดีซึ่งทำให้ฉันลงไปในเส้นทางที่ถูกต้อง แต่
git update-index - สมมติว่าไฟล์ไม่เปลี่ยนแปลง / ถึง / ไม่สนใจ. php
มีสัญญากับ git ซึ่งผู้ใช้สัญญาว่าจะไม่เปลี่ยนแปลงไฟล์และอนุญาตให้ Git สมมติว่าไฟล์แผนผังการทำงานตรงกับสิ่งที่บันทึกไว้ในดัชนี
อย่างไรก็ตามฉันเปลี่ยนเนื้อหาของไฟล์ดังนั้นในกรณีของฉัน --skip-worktree เป็นตัวเลือกที่ดีกว่า
เว็บไซต์ของ Toshiharu Nishina ให้คำอธิบายที่ยอดเยี่ยมเกี่ยวกับการข้ามงานและข้อสมมติที่ไม่เปลี่ยนแปลง: ละเว้นไฟล์ที่จัดการกับ Git แล้ว
อีกเหตุผลที่เป็นไปได้ - บางกรณีของลูกค้าของคอมไพล์ทำงานในเวลาเดียวกัน ตัวอย่างเช่น "git shell" + "GitHub Desktop" ฯลฯ
สิ่งนี้เกิดขึ้นกับฉันฉันใช้ "GitHub Desktop" เป็นลูกค้าหลักและไม่สนใจการตั้งค่า. gitignore ใหม่: กระทำหลังจากคอมมิท:
สาเหตุ : ตัวแก้ไขรหัส Visual Studio ถูกเรียกใช้ในพื้นหลังที่มีที่เก็บเปิดเดียวกัน รหัส VS มีการควบคุมคอมไพล์ในตัวและสิ่งนี้ทำให้เกิดความขัดแย้ง
วิธีแก้ปัญหา : ตรวจสอบไคลเอ็นต์ git ที่ซ่อนอยู่หลายรายการและใช้ไคลเอ็นต์ git เพียงครั้งเดียวโดยเฉพาะในขณะที่ล้างแคช git
ตรวจสอบให้แน่ใจว่า. gignignore ไม่มีส่วนขยาย !! ไม่สามารถเป็น. gitignore.txt ใน windows เพียงตั้งชื่อไฟล์. gitignore และมันจะทำงาน
ฉันเพิ่งลองกับ git 1.7.3.1 และให้โครงสร้างเช่น:
repo/.git/
repo/.gitignore
repo/sites/default/settings.php
โดยที่repo
"ราก" ดังกล่าวข้างต้น (ฉันจะเรียกมันว่ารากของต้นไม้ทำงานของคุณ) และ.gitignore
มีเพียงsites/default/settings.php
การเพิกเฉยใช้งานได้สำหรับฉัน (และมันไม่สำคัญว่าจะ.gitignore
ถูกเพิ่มลงใน repo หรือไม่) สิ่งนี้ตรงกับรูปแบบ repo ของคุณหรือไม่? ถ้าไม่แตกต่างอะไร
ในกรณีที่ทุกคนในอนาคตมีปัญหาเดียวกันกับที่ฉันทำ:
ถ้าคุณใช้
*
!/**/
!*.*
เคล็ดลับในการลบไฟล์ไบนารีที่ไม่มีส่วนขยายตรวจสอบให้แน่ใจว่าบรรทัด gitignore อื่นทั้งหมดอยู่ด้านล่าง Git จะอ่านจาก. gitignore จากด้านบนดังนั้นแม้ว่าฉันจะมี 'test.go' ใน gitignore ของฉันมันเป็นครั้งแรกในไฟล์และกลายเป็น 'unignored' หลังจาก
!*.*
ฉันลองคำสั่งส่วนใหญ่ข้างต้นใน VS Code terminal และฉันพบข้อผิดพลาดเช่น:
fatal: pathspec '[dir]/[file]' did not match any files
ฉันเปิดโครงการบน GitHub Desktop และไม่สนใจจากที่นั่นและใช้งานได้