.gitignore ถูกละเว้นโดย Git


1511

.gitignoreดูเหมือนว่าไฟล์ของฉันจะถูกละเว้นโดย Git - .gitignoreไฟล์อาจเสียหายหรือไม่? รูปแบบไฟล์สถานที่หรือวัฒนธรรมที่ Git คาดหวัง?

ของฉัน.gitignore:

# This is a comment
debug.log
nbproject/

ผลลัพธ์จากgit status:

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       debug.log
#       nbproject/
nothing added to commit but untracked files present (use "git add" to track)

ฉันต้องการdebug.logและnbproject/ไม่ให้ปรากฏในรายการไฟล์ที่ไม่ได้ติดตาม

ฉันจะเริ่มมองหาวิธีแก้ไขได้ที่ไหน


56
ตรวจสอบให้แน่ใจว่า.gitignoreไฟล์ของคุณใช้ANSIหรือUTF-8เข้ารหัส หากใช้อย่างอื่นUnicode BOMเป็นไปได้ว่า Git ไม่สามารถอ่านไฟล์ได้
ADTC

8
@ADTC นี่เป็นปัญหาที่เกิดขึ้นกับเครื่องของฉัน (Windows) ฉันใช้echo "file" > .gitignoreใน PowerShell ไฟล์นั้นมีการเข้ารหัส UCS-2!
MarioDS

7
git rm --cached debug.log nbproject/
Gayan Weerakutti

4
ทำไมความคิดเห็นแรกที่นี่ไม่ใช่คำตอบก็คือฉัน
RedOrav

2
@ MattParkins อ่าฉันเห็นแล้วตอนนี้มันยังคงทำให้ฉันประหลาดใจที่คำตอบง่ายๆและตรงประเด็นนั้นถูกฝังไว้เป็นความคิดเห็นหรือคำตอบที่แท้จริงยอมรับได้ ขอบคุณ!
RedOrav

คำตอบ:


3118

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

คำเตือน:ก่อนอื่นยอมรับการเปลี่ยนแปลงในปัจจุบันของคุณหรือคุณจะสูญเสียพวกเขา

จากนั้นเรียกใช้คำสั่งต่อไปนี้จากโฟลเดอร์ด้านบนของที่เก็บ Git ของคุณ:

git rm -r --cached .
git add .
git commit -m "fixed untracked files"

8
ฉันได้รับ "การใช้งาน: git rm [ตัวเลือก] [-] <file> ... " พิมพ์เมื่อฉันพยายาม "git rm -r --cached" หากเป็นเรื่องสำคัญฉันกำลังใช้ Git จากภายใน PowerShell หลังจากคลิก "เครื่องมือ -> เปิดเชลล์ที่นี่" ใน GitHub สำหรับ Windows
Soonts

61
บน Windows: git rm -r - แคชและ git เพิ่ม
Beachhouse

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

45
3 คนแรกที่แสดงความคิดเห็นดูเหมือนจะพลาดจุดในท้ายที่สุด ซึ่งหมายความว่าทุกไฟล์ "git -rm -r --cached" <- สังเกตเห็นจุด
Christophe De Troyer

18
หากคุณไม่ต้องการที่จะกระทำการแก้ปัญหาคือการใส่การเปลี่ยนแปลงลงในชั้นวาง: "git stash" เรียกใช้คำสั่งข้างต้น และเรียกใช้ "git stash pop"
Ivan Voroshilin

335

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

  • อาจมี.gitignoreไฟล์ส่วนกลางที่อาจรบกวนไฟล์ในเครื่องของคุณ
  • เมื่อคุณเพิ่มบางอย่างลงในไฟล์. gitignore ให้ลองทำดังนี้:

    git add [uncommitted changes you want to keep] && git commit
    git rm -r --cached .
    git add .
    git commit -m "fixed untracked files"
    
  • หากคุณลบบางสิ่งออกจากไฟล์. gitignore และขั้นตอนด้านบนอาจไม่ทำงานหากคุณพบว่าขั้นตอนข้างต้นไม่ทำงานให้ลองทำดังนี้:

    git add -f [files you want to track again]
    git commit -m "Refresh removing files from .gitignore file."
    
    // For example, if you want the .java type file to be tracked again,
    // The command should be:
    //     git add -f *.java
    

3
บางทีคุณสามารถแก้ไขคำตอบของ @AlinHuruba เพื่อเพิ่มขั้นตอนที่ 3 ของคุณได้ไหม
Benj

@Benj ขอบคุณสำหรับคำแนะนำของคุณฉันไม่พบคำตอบของ AlinHuruba ฉันไม่ทราบว่ามีความแตกต่างอะไรดังนั้นโปรดบอกฉันโดยตรง
ifeegoo

2
ขั้นตอนที่ 3 คือสิ่งที่ฉันต้องการ คำตอบส่วนใหญ่เพียงบอกวิธีลบไฟล์ที่เราต้องการยกเลิกการติดตาม ขอบคุณสำหรับมุมมองตรงกันข้าม
Yeung

หวังว่านี่จะช่วยคุณได้!
ifeegoo

7
git rm -r --cached .ทำงานให้ฉัน
Jason

198

แก้ไขแล้ว. ตกลงฉันสร้างไฟล์. gignignore ใน Notepad บน Windows และมันไม่ทำงาน เมื่อฉันดูไฟล์. gitignore บน Linux มันดูเหมือนว่าเป็นการพูดที่ไร้สาระ - Notepad อาจเขียน Unicode แทน ASCII หรือ 8 บิต

ดังนั้นฉันจึงเขียนไฟล์ลงบนกล่อง Linux ของฉันและเมื่อฉันดึงมันกลับเข้าไปใน Windows มันก็ใช้ได้ดี เย่!


77
ใน Notepad เพียงเลือกการเข้ารหัส "ANSI" ในกล่องโต้ตอบ "บันทึกเป็น" หรือดีกว่ายังได้รับการแก้ไขข้อความที่เหมาะสม - หลังจากที่คุณเป็นโปรแกรมเมอร์ :) ... ฉันสามารถแนะนำ "โปรแกรมเมอร์ของ Notepad" คนอื่นชอบ Notepad ++ และมีหลายร้อยแท้จริงออกมี
0xC0000022L

1
ฮิฮิใช่ฉันควรจะสร้างมันในเน็ต (ซึ่งฉันใช้ในเวลา), คราสหรือสตูดิโอภาพ ฉันเพิ่งเรียกมันจาก commandline คิดว่ามันจะไม่สร้างความแตกต่าง
Matt Parkins

8
ปัญหาของฉันเป็นที่คล้ายกัน - .gitignore ของฉันถูกใช้ UTF8 กับBOM เพิ่งบันทึกเป็น UTF8 โดยไม่มี BOM และเริ่มทำงานได้อย่างน่าอัศจรรย์
Phil

13
นี่คือปัญหาของฉันเช่นกัน ฉันสร้างไฟล์. gitignore ด้วย "echo dirName> .gitignore" เพราะ Windows ทำให้การสร้างไฟล์ที่เริ่มต้นด้วยความเจ็บปวดนั้นเป็นเช่นนั้น " การเข้ารหัสไฟล์ที่สร้างด้วยวิธีนี้ไม่สามารถอ่านได้โดย git และตีความว่าเป็นไฟล์ไบนารีแทน คลิก "การเข้ารหัส -> UTF-8" ใน Notepad ++ บันทึกเสร็จแล้ว
ลอร่า

4
พบปัญหาเดียวกันกับ @Laura ใน powershell - ไฟล์จะถูกบันทึกเป็นค่าเริ่มต้นเป็น UTF16
mrówa

113

หากไม่เพิ่มการผูกมัดอื่นให้กับโครงการของคุณหนึ่งบรรทัดจะเพียงพอที่จะ.gitignoreทำงานตามที่ควรจะเป็น:

git rm -r --cached debug.log nbproject

สิ่งนี้จะลบพวกเขาออกจากพื้นที่เก็บข้อมูล แต่ยังคงรักษาไว้ ในภาษาอังกฤษแบบธรรมดาจะลบประวัติการเปลี่ยนแปลงใด ๆ ที่เกี่ยวข้องกับพวกเขาและจะไม่ติดตามการเปลี่ยนแปลงในการกระทำในอนาคต คุณอาจจะหาคำอธิบายที่ดีกว่าที่นี่


1
ทำงานได้ตรงตามที่ฉันต้องการ - ฉันมีเพียง 1 ไฟล์ซึ่งไม่ได้ติดตามอย่างถูกต้อง ฉันบันทึกเนื้อหาใน notepad และได้กระทำgit rm -r --cached someFile.phpและการทำงานเช่นเสน่ห์ :)
ShayLivyatan

@FMFF สิ่งนี้จะลบออกจากที่เก็บ แต่ยังคงเก็บไว้เป็นภาษาอังกฤษธรรมดาจะลบประวัติการเปลี่ยนแปลงใด ๆ ที่เกี่ยวข้องกับพวกเขาและจะไม่ติดตามการเปลี่ยนแปลงในการกระทำในอนาคต คำอธิบายที่ดีกว่านี้คุณอาจพบได้ที่นี่: stackoverflow.com/questions/37279654/…
H Aßdø

ฉันได้รับ "fatal: pathspec 'debug.log' ไม่ตรงกับไฟล์ใด ๆ "
Michael

45

สาเหตุอื่นของปัญหานี้คือช่องว่างหรือแท็บก่อนหน้าคำสั่ง:

ตัวอย่าง:

# Be aware of the following:
 notWorkingIgnore.*
workingIgnore.*

และตามที่ระบุไว้โดยความคิดเห็นด้านล่างพื้นที่ต่อท้ายอาจเป็นปัญหาเช่นกัน:

# Be aware of the following:
notWorkingIgnore.* #<-Space
workingIgnore.*#<-Nospace

11
พื้นที่ต่อท้ายคือปัญหาของฉันซึ่งเป็นเรื่องยากที่จะค้นหา
amr

3
ยังมีปัญหาช่องว่างต่อท้าย
Trefex

3
ใช่เหมือนกันที่นี่ ฉันคิดว่าฉันสามารถเขียนความคิดเห็นหลังจากรูปแบบไฟล์: *.txt # Tex files. แต่เข้าใจคอมไพล์: "ละเว้นไฟล์ที่มีนามสกุลtxt "
Adam Libuša

3
คำพูดของฉันใช้เวลา 2 วันในการหาคำตอบที่เพิ่มขึ้น 15 ข้อนี้ สิ่งนี้สมควรมากกว่า
fordcars

2
คุณเพิ่งแก้ไขปัญหาที่ฉันมีเป็นเวลาหลายเดือน ... ขอบคุณ!
Arkellys

36

ฉันสังเกตเห็นว่าการเข้ารหัสของไฟล์.gitignoreนั้นมีผลกระทบ - หากไฟล์เป็น Unicode มันจะถูกละเว้นหากเป็น ASCII นั่นไม่ใช่

กระบวนการ:

  1. ยืนยันสถานะ: PS> git status
  2. สร้างฟังก์ชั่นเพื่อGet-FileEncoding
  3. การ.gitignoreเข้ารหัสการทดสอบ:PS> Get-FileEncoding .gitignore
  4. เปลี่ยนการเข้ารหัสเป็น ASCII:PS> Set-Content .gitignore -Encoding Ascii -Value (Get-Content .gitignore)
  5. ยืนยัน: PS> git status

5
1,000 ขอบคุณสำหรับสิ่งนี้ ฉันกำลังสร้างไฟล์. gignignore บนระบบของฉันโดยใช้touch .gitignoreและecho ".db" >> .gitignoreเส้นทางผ่าน PowerShell ฉันพบว่าการecho ".db" >> .gitignore"ตั้งค่าการเข้ารหัสไฟล์เป็น UCS-2 LE-BOM การแปลงอย่างรวดเร็วเป็น ASCII และ gitignore เริ่มทำงาน
B-Rad

2
คุณสามารถลองได้โดยข้ามขั้นตอนที่ 2 และ 3
Aniket Bhansali

32

เช่นเดียวกับโซลูชันอื่น ๆ ให้ยอมรับก่อนและระวังว่าคุณจะสูญเสียการเปลี่ยนแปลงใด ๆ

ฉันได้ผลลัพธ์ที่ดีขึ้นด้วยสิ่งนี้:

git rm -r --cached .
git reset HEAD --hard
git status

โปรดทราบว่าสถานะไม่ควรมีไฟล์ที่แก้ไขใด ๆ ในขณะนี้


2
อันนี้ไม่ทำงานสำหรับฉัน แต่คำตอบของ ifeegoo ทำ
fanny

21

ในกรณีของฉันมันเป็นเพราะไฟล์มีอยู่แล้วในที่เก็บและฉันพยายามที่จะไม่สนใจมัน

นี่คือสิ่งที่ฉันทำเพื่อแก้ไขปัญหา:

  • คัดลอกไฟล์ไปยังโฟลเดอร์ชั่วคราว
  • ลบออกจากโฟลเดอร์โครงการของฉัน
  • ยอมรับการเปลี่ยนแปลงที่ลบไฟล์เหล่านั้นออกจากที่เก็บ
  • เพิ่มไฟล์เหล่านั้นไปยังโฟลเดอร์โครงการของฉันอีกครั้ง

จากนั้นการเปลี่ยนแปลงใด ๆ ที่ฉันทำกับไฟล์เหล่านั้นจะถูกเพิกเฉย

ฉันคิดว่าคุณไม่สามารถละเลยไฟล์ที่มีอยู่แล้วในที่เก็บ


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

19

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

echo .idea/ >> .gitignore
git init

หากคุณมีการพัฒนาในชีวิตประจำวันผมแนะนำให้คุณเพิ่มไฟล์ละเว้นนิสัยของคุณไปยัง~/.gitignore_globalไฟล์ ด้วยวิธีนี้gitจะได้รู้ว่าไฟล์ใดที่คุณ (หมายถึง "ผู้ใช้ของคุณ" เนื่องจากเป็นไฟล์ในไดเรกทอรีบ้านของคุณ) โดยทั่วไปจะไม่สนใจ


ขอบคุณพระเจ้า ... ในที่สุดก็มีทางออกสำหรับฉัน
Dbl

~/.gitignore_globalเป็นชื่อที่กำหนดค่าได้ เรียกใช้git config --global core.excludesfileก่อนเพื่อดูว่าคุณมีไฟล์ที่กำหนดไว้แล้วหรือไม่ git config --global core.excludesfile ~/.gitignore_globalถ้าไม่ได้วิ่ง
Noumenon

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

15

ยังตรวจสอบไดเรกทอรี.gitignoreที่คุณใส่

มันควรจะอยู่ในรากของโครงการของคุณ :

./myproject/.gitignore

ไม่เข้า

./myproject/.git/.gitignore

9

สำหรับผู้ใช้ Windows โดยเฉพาะ: หากคุณมีไฟล์ที่ไม่ได้ติดตามและล้าง / ลบไฟล์ที่แคชไว้จะไม่ทำงาน ลองเปิด PowerShell และแปลงไฟล์. gignignore เป็นการเข้ารหัสแบบ UTF-8:

$Myfile = Get-Content .\.gitignore`
$Myfile | Out-File -Encoding "UTF8" .gitignore

คุณต้องทำสิ่งนี้เพียงครั้งเดียวเพื่อเข้ารหัสไฟล์. gitignore สำหรับไดเรกทอรีนั้นและเนื่องจากไฟล์นั้นได้รับการเข้ารหัสอย่างถูกต้องเมื่อใดก็ตามที่คุณแก้ไขไฟล์ในอนาคตควรจะทำงานได้ ฉันเชื่อว่านี่เป็นเพราะความผิดพลาดที่ GitHub ไม่ได้กำลังอ่านการเข้ารหัส UTF-8 ที่ไม่ใช่สำหรับไฟล์. gignignore เท่าที่ฉันทราบปัญหานี้ยังไม่ได้รับการแก้ไขสำหรับ Windows ข้อตกลงไม่ใหญ่เกินไปเพียงแค่แก้ข้อบกพร่องเมื่อไม่ทำงาน


8

มีปัญหาอื่น.gitignoreที่อาจเกิดขึ้นโดยเฉพาะอย่างยิ่งสำหรับผู้ใช้ Windows Git ไม่ชอบเมื่อคุณตั้งชื่อ.gitignore(เช่นunity.gitignore)

คุณจะต้องการตั้งชื่อ.gitignoreหรือบน Windows ตลอดเวลา.gitignore.เนื่องจาก Windows คิดว่าคุณกำลังพยายามเปลี่ยนชื่อโดยไม่มีชื่อไฟล์


7

ฉันเพิ่งพบปัญหานี้ เนื้อหาภายในไฟล์. gitignore ของฉันยังคงปรากฏในรายการไฟล์ที่ไม่ได้ติดตาม

ฉันใช้สิ่งนี้เพื่อสร้างไฟล์ข้าม:

echo "node_modules" > .gitignore

ปรากฎว่าใบเสนอราคาสองครั้งทำให้เกิดปัญหาสำหรับฉัน ฉันลบไฟล์ละเว้นแล้วใช้คำสั่งอีกครั้งโดยไม่มีเครื่องหมายอัญประกาศและทำงานตามที่คาดไว้ ฉันไม่จำเป็นต้องยุ่งกับการเข้ารหัสไฟล์ ฉันบนเครื่อง Windows 10 โดยใช้Cmder

ตัวอย่าง:

echo node_modules > .gitignore

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

6

สำหรับฉันคำตอบก่อนหน้านี้ไม่ทำงาน ฉันต้องคัดลอก.gitignoreข้อความลงในexclude.txtไฟล์ที่พบที่

<Your-project-folder>\.git\info

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


6

ปัญหาของฉันคือ (ตามที่แนะนำโดย OP) ไฟล์. gitignore ที่เสียหาย ฉันไม่เชื่อว่ามันเป็นและเพิกเฉยต่อความเป็นไปได้จนกว่าทุกอย่างจะล้มเหลว ความเสียหายไม่ปรากฏขึ้นviแต่มีสองไบต์ในการเริ่มต้นของไฟล์ที่ทำให้ไฟล์. gitignore ถูกละเว้น สำหรับฉันสิ่งเหล่านี้ปรากฏขึ้นเมื่อฉันพิมพ์cat .gitignoreซึ่งแสดงให้เห็น:

��# Built application files
*.apk
*.ap_

# ...

ฉันไม่รู้ว่าสิ่งเหล่านี้มาอยู่ที่นั่นได้อย่างไร แต่การสร้างไฟล์ใหม่ช่วยแก้ไขปัญหาได้ การวิเคราะห์ฐานสิบหกของไฟล์ที่เสียหายแสดงดังต่อไปนี้:

user@dev ~/project/myproject $ xxd -b .gitignore
00000000: 11111111 11111110 00100011 00000000 00100000 00000000  ..#. .
00000006: 01000010 00000000 01110101 00000000 01101001 00000000  B.u.i.

2
ดูเหมือนว่าเครื่องหมายคำสั่ง UTF-16 ในไฟล์ที่เข้ารหัส UTF-8 en.wikipedia.org/wiki/Byte_order_mark
jsageryd

6

ฉันมีปัญหานี้ด้วยไฟล์. gitignore ที่มีบรรทัดนี้:

lib/ext/

ฉันเพิ่งรู้ว่าอันที่จริงไดเรกทอรีนี้เป็นลิงก์สัญลักษณ์ไปยังโฟลเดอร์อื่น:

ls -la lib/ext/
lrwxr-xr-x 1 roipoussiere users 47 Feb  6 14:16 lib/ext -> /home/roipoussiere/real/path/to/the/lib

ในบรรทัดlib/ext/Git จะค้นหาโฟลเดอร์แต่ลิงก์สัญลักษณ์เป็นไฟล์ดังนั้นlibโฟลเดอร์ของฉันจะไม่ถูกละเว้น

ฉันแก้ไขสิ่งนี้โดยแทนที่lib/ext/ด้วยlib/extในไฟล์. gitignore ของฉัน


5

ฉันมีปัญหาเดียวกันนี้ ฉันเชื่อว่าปัญหานี้เป็นความขัดแย้งของ CR กับ CR + LF ฉัน stashed สิ่งใน. gitignore ของฉันโดยใช้ CMD (บน Windows 7) และคำสั่งต่อไปนี้:

แย่:

echo "file_to_be_ignored.py" >> .gitignore<br>
echo "*~" >> .gitignore

เป็นต้น

ปัญหาคือว่าคำสั่งนี้ไม่ได้วางเครื่องหมายสิ้นสุดของบรรทัดที่ถูกต้องสำหรับ Git ที่จะรับรู้การขึ้นบรรทัดใหม่ (ทั้ง CR หรือ CR + LF เมื่อ Git คาดว่าอีก) ฉันแก้ไขปัญหาด้วยการแทนที่แต่ละบรรทัดใหม่ใน Vim (Vim เพื่อช่วยเหลือ!) และทำงานได้อย่างสมบูรณ์

ลองแก้ไข. gitignore ของคุณใน Notepad ++ หรือ Vim (นึกคิด) แม้ว่าไฟล์จะดูเหมือนว่าอยู่ในรูปแบบที่ถูกต้องลองเปลี่ยนบรรทัดใหม่ ฟังดูแปลก ๆ ฉันรู้ แต่มันใช้ได้กับฉัน : D


4

ตกลงดังนั้นในกรณีของฉันโซลูชันที่ยอมรับไม่ทำงานและสิ่งที่ใช้งานได้อธิบายไว้ที่นี่:

Visual Studio 2013 ละเลยไฟล์. gitignore ของคุณหรือไม่

ในระยะสั้น:

  • ปิด Visual Studio
  • นำทางไปยังโฟลเดอร์. git ของคุณ
  • ลบ ms-persist.xml
  • เริ่ม Visual Studio ใหม่

3

สิ่งหนึ่งที่จะต้องดู: คุณบันทึกไฟล์. gitignore ของคุณด้วยการจบบรรทัดที่ถูกต้องหรือไม่?

ของ windows:

หากคุณกำลังใช้งานบน Windows คุณกำลังบันทึกด้วยปลายสายของ Windows หรือไม่ ไม่ใช่ทุกโปรแกรมที่จะทำสิ่งนี้ตามค่าเริ่มต้น Notepad ++ และตัวแก้ไข PHP หลาย ๆ ค่าเริ่มต้นสำหรับการสิ้นสุดของบรรทัด Linux ดังนั้นไฟล์จะเข้ากันได้กับเซิร์ฟเวอร์ วิธีง่ายๆในการตรวจสอบคือเปิดไฟล์ใน Windows Notepad หากทุกอย่างปรากฏในหนึ่งบรรทัดแสดงว่าไฟล์นั้นถูกบันทึกด้วยการจบบรรทัดของ Linux

ลินุกซ์:

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


3

อีกเหตุผลที่เป็นไปได้ - บางกรณีลูกค้า Git ทำงานในเวลาเดียวกัน ตัวอย่างเช่น "git shell" + "GitHub Desktop" ฯลฯ


เรื่องนี้เกิดขึ้นกับฉัน ฉันใช้ "GitHub Desktop" เป็นไคลเอนต์หลักและละเว้นการตั้งค่า. gitignore ใหม่: กระทำหลังจากคอมมิชชัน:

  1. คุณทำอะไรสักอย่าง
  2. ถัดไปยอมรับ: มันละเว้นการตั้งค่า. gignignore Commit มีไฟล์ชั่วคราวจำนวนมากที่กล่าวถึงใน. gitignore
  3. ล้างแคช Git; ตรวจสอบว่า. gignignore เป็น UTF-8 หรือไม่ ลบไฟล์→กระทำ→ย้ายไฟล์กลับ; ข้ามการคอมมิทหนึ่งครั้ง - ไม่มีอะไรช่วย

สาเหตุ : ตัวแก้ไขรหัส Visual Studio ถูกเรียกใช้ในพื้นหลังที่มีที่เก็บเปิดเดียวกัน Visual Studio Code มีการควบคุม Git ในตัวและสิ่งนี้ทำให้ความขัดแย้งบางอย่าง

วิธีแก้ไข : ตรวจสอบไคลเอ็นต์ Git ที่ซ่อนอยู่หลายรายการและใช้ไคลเอ็นต์ Git เพียงครั้งละหนึ่งรายการโดยเฉพาะในขณะที่ล้างแคช Git


3

มีคำตอบที่ยอดเยี่ยมอยู่แล้ว แต่สถานการณ์ของฉันน่าเบื่อ ฉันได้แก้ไขแหล่งที่มาของซอฟต์แวร์ PLM (การจัดการวงจรชีวิตผลิตภัณฑ์) ที่ติดตั้งใน Win10 และหลังจากนั้นตัดสินใจว่า "ฉันน่าจะทำให้ repo คอมไพล์นี้"

ดังนั้นตัวเลือกแคชจะไม่ทำงานสำหรับฉันโดยตรง โพสต์สำหรับคนอื่น ๆ ที่อาจเพิ่มการควบคุมแหล่งที่มาหลังจากทำงานเริ่มแรกและ.gitignoreไม่ทำงาน แต่คุณอาจกลัวที่จะสูญเสียงานจำนวนมากดังนั้นจึงgit rm --cachedไม่ใช่สำหรับคุณ

! สำคัญ:นี่เป็นเพราะฉันเพิ่ม git สายเกินไปที่จะ "โครงการ" ที่มีขนาดใหญ่เกินไปและดูเหมือนจะไม่สนใจ. gitignore ของฉัน ฉันไม่เคยทำผิด ฉันสามารถคอมไพล์กับสิ่งนี้ได้ :)

ก่อนอื่นฉันเพิ่งทำ:

rm -rf .git
rm -rf .gitignore

จากนั้นฉันต้องมีภาพการเปลี่ยนแปลงของฉัน นี่เป็นผลิตภัณฑ์ติดตั้งที่ฉันได้ทำการเปลี่ยนแปลงอีกครั้ง สายไปแล้วสำหรับการส่งครั้งแรกของสาขาต้นแบบที่บริสุทธิ์ ดังนั้นฉันต้องการรายการสิ่งที่ฉันเปลี่ยนแปลงเนื่องจากฉันติดตั้งโปรแกรมโดยเพิ่ม> changed.logลงในรายการใดรายการหนึ่งต่อไปนี้:

PowerShell

# Get files modified since date.
Get-ChildItem -Path path\to\installed\software\ -Recurse -File | Where-Object -FilterScript {($_.LastWriteTime -gt '2020-02-25')} | Select-Object FullName

ทุบตี

# Get files modified in the last 10 days...
find ./ -type f -mtime -10

ตอนนี้ฉันมีรายการสิ่งที่ฉันเปลี่ยนไปในช่วงสิบวันที่ผ่านมา (อย่าทำแนวปฏิบัติที่ดีที่สุดที่นี่นอกจากจะบอกว่าใช่ฉันทำสิ่งนี้กับตัวเอง)

สำหรับการเริ่มต้นใหม่ตอนนี้:

git init .
# Create and edit .gitignore

ฉันต้องเปรียบเทียบรายการที่เปลี่ยนแปลงของฉันกับ. gignignore ที่กำลังเติบโตของฉันทำงานgit statusในขณะที่ฉันปรับปรุง แต่การแก้ไขของฉันใน. gitignore นั้นเป็นการอ่านในขณะที่ฉันไป

ในที่สุดฉันเป็นรายการของการเปลี่ยนแปลงที่ต้องการ! ในกรณีของฉันมันสำเร็จรูป - ชุดรูปแบบบางอย่างทำงานพร้อมกับเซิร์ฟเวอร์ xml config ที่เฉพาะเจาะจงในการใช้งานระบบ dev กับซอฟต์แวร์นี้ที่ฉันต้องการใส่ repo สำหรับ devs อื่น ๆ เพื่อคว้าและสนับสนุน ... นี่จะเป็นสาขาหลักของเราดังนั้น มุ่งมั่นผลักดันและในที่สุดก็แยกสาขาเพื่อทำงานใหม่!


2

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

    git rm -r -f "folder or files insides"

2

สิ่งหนึ่งที่ไม่ยุ่งยากในคำตอบอื่น ๆ ที่นี่คือไฟล์. gitignore จะไม่ทำงานหากคุณมีความคิดเห็นแบบอินไลน์เช่นนี้

foo/bar # The bar file contains sensitive data so we don't want to make this public

ดังนั้นหากคุณมีความคิดเห็นเช่นนั้นให้เปลี่ยนพวกเขาเช่นนี้:

# The bar file contains sensitive data so we don't want to make this public
foo/bar

2

นอกจากนี้ยังเป็นไปได้ที่คุณจะแก้ไข.gitignoreไฟล์ด้วยsudoคำสั่ง ฉันพบปัญหาเดียวกันและในขณะที่ดำเนินการคำสั่ง: git statusฉันยังคงเห็นไฟล์ "ควรถูกละเว้น"

เมื่อแก้ไขด้วยnano .gitignoreแทนsudo nano .gitignoreฉันสามารถเห็นการสะท้อนที่ถูกต้อง


2

ฉันได้สร้าง. gignignore โดยใช้echo "..." > .gitignoreใน PowerShell ใน Windows เพราะมันไม่อนุญาตให้สร้างใน Windows Explorer

ปัญหาในกรณีของฉันคือการเข้ารหัสของไฟล์ที่สร้างขึ้นและปัญหาได้รับการแก้ไขหลังจากที่ฉันเปลี่ยนเป็น ANSI


2

ฉันก็มีปัญหาเดียวกันบน Ubuntu ฉันสร้าง.gitignoreจากเทอร์มินัลและใช้งานได้สำหรับฉัน

touch .gitignore


2

ฉันไม่ทำงานเพราะฉันได้สร้างเอกสารข้อความชื่อ. gitignore ขึ้นมา

สร้างเอกสารข้อความแทนเปิดใน Notepad ++ จากนั้นบันทึกเป็น. gitignore

ตรวจสอบให้แน่ใจว่าได้เลือกทุกประเภท (*. *) จากรายการแบบเลื่อนลงเมื่อคุณบันทึก


หรือใน gitbash เพียงใช้ touch .gitignore


1

หากคุณเป็นผู้ใช้Notepad ++ลองทำสิ่งต่อไปนี้:

เปิดไฟล์. gitignore ของคุณโดยใช้ Notepad ++ และทำ:

เมนูแก้ไขEOL แปลงของ Windows รูปแบบ → บันทึก

ลองใช้git statusอีกครั้งและดูว่าเหมาะกับคุณหรือไม่

ผมได้โพสต์คำตอบของคำถามที่คล้ายกันที่นี่


1

สำหรับฉันมันเป็นปัญหาอีกอย่างหนึ่ง ไฟล์. gitignore ของฉันถูกตั้งค่าให้ละเว้นทุกอย่างยกเว้นสิ่งที่ฉันบอกว่าไม่สนใจ เช่นนี้

/*
!/content/

ตอนนี้ก็หมายความว่าฉันบอกให้ Git เพิกเฉยต่อไฟล์. gitignore ด้วย ซึ่งไม่ใช่ปัญหาตราบใดที่ฉันไม่ได้ติดตามไฟล์. gitignore แต่ในบางครั้งฉันก็ยอมรับไฟล์. gitignore เอง สิ่งนี้นำไปสู่ไฟล์. gitignore ที่ถูกละเว้นอย่างถูกต้อง

ดังนั้นการเพิ่มอีกหนึ่งบรรทัดคงที่:

/*
!/content/
!.gitignore

1

ปัญหาของฉันคือฉันเขียนไฟล์ลงไปเพื่อละเว้นด้วยเครื่องหมายอัญประกาศ "" ไม่ใช้เครื่องหมายทับ ""

สิ่งนี้ไม่ทำงานและถูกละเว้นโดย git:

"db.sqlite3"
"tdd_venv/"

สิ่งนี้ใช้ได้ดี:

/db.sqlite3
/tdd_venv/

ฉันตรวจสอบการเข้ารหัสไฟล์ใน windows ด้วย Notepad ++ ด้วย การเข้ารหัสถูกตั้งค่าเป็น UTF-8

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