Câu hỏi .gitignore không hoạt động


Của tôi .gitignore tệp có vẻ bị bỏ qua bởi git - có thể .gitignore tệp bị hỏng? Định dạng tệp, ngôn ngữ hoặc văn hóa nào git mong đợi?

Của tôi .gitignore:

#this is a comment
debug.log
nbproject/

Đầu ra từ 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)

tôi muốn debug.log và nbproject/ không xuất hiện trong danh sách các tập tin không được theo dõi.

Tôi nên bắt đầu tìm cách sửa lỗi này ở đâu?


1075
2017-07-12 12:09


gốc


Hãy chắc chắn rằng bạn .gitignore sử dụng tập tin ANSI hoặc là UTF-8 mã hóa. Nếu nó sử dụng một cái gì đó khác như Unicode BOM, có thể Git không thể đọc được tập tin. - ADTC
Có thể trùng lặp Làm thế nào để làm cho Git "quên" về một tập tin đã được theo dõi nhưng bây giờ là trong .gitignore? - Lore
@ADTC đây chính xác là vấn đề trên máy của tôi (Windows). Tôi đã sử dụng echo "file" > .gitignore trong PowerShell, tệp có mã hóa UCS-2! - MarioDS
git rm --cached debug.log nbproject/ - reversiblean
Tại sao bình luận đầu tiên ở đây không phải là câu trả lời nằm ngoài tôi - RedOrav


Các câu trả lời:


Ngay cả khi bạn chưa theo dõi các tệp cho đến nay, git dường như có thể "biết" về chúng ngay cả sau khi bạn thêm chúng vào .gitignore.

CHÚ THÍCH : Đầu tiên cam kết những thay đổi hiện tại của bạn, hoặc bạn sẽ mất chúng.

Sau đó chạy các lệnh sau từ thư mục trên cùng của repo git của bạn:

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

2258
2017-07-12 12:20



Tôi đã "sử dụng: git rm [tùy chọn] [-] <file> ..." được in khi tôi thử "git rm -r --cached". Nếu nó quan trọng, tôi đang sử dụng Git từ bên trong PowerShell sau khi nhấp vào "Tools-> Open a shell here" trong GitHub cho Windows. - Soonts
trên Windows: git rm. -r-cached và  git add. - Beachhouse
Hãy nhận biết cam kết tất cả các thay đổi của bạn trước đây, nếu không bạn sẽ mất quyền kiểm soát tất cả các tệp đã thay đổi !! - Cosmin
3 bình luận đầu tiên dường như đã bỏ lỡ dấu chấm ở cuối. Điều này có nghĩa là mọi tập tin. "git-rm -r - cắt." <- chú ý dấu chấm. - Christophe De Troyer
Nếu bạn không muốn cam kết, giải pháp thay thế là đặt các thay đổi của bạn lên giá: "git stash". Chạy các lệnh trên. và chạy "git stash pop" - Ivan Voroshilin


Khi tệp .gitignore không hoạt động (thêm nội dung nào đó vào tệp .gitignore hoặc xóa nội dung nào đó khỏi tệp .gitignore), bạn có thể kiểm tra các mẹo sau:

  1. bạn phải chú ý đến tệp gitignore toàn cầu mà đôi khi có thể ảnh hưởng đến gitignore của bạn.
  2. Khi bạn thêm nội dung nào đó vào tệp .gitignore, là người đã trả lời câu hỏi này đầu tiên:

    git rm -r --cached .
    git add .
    git commit -m "fixed untracked files"  
    
  1. Khi bạn loại bỏ một cái gì đó từ tập tin .gitignore.Các bước trên sẽ   không làm việc cho bạn. Bạn có thể thử điều này:
    git add -f "filetype"
    git commit -m "Refresh removing filetype from .gitignore file."

"filetype" có nghĩa là tệp hoặc loại tệp bạn muốn xóa khỏi tệp .gitignore. Bạn muốn làm cho filetype được theo dõi một lần nữa.


213
2017-09-03 13:54



Có lẽ bạn có thể chỉnh sửa câu trả lời của @AlinHuruba để thêm bước 3 của bạn? - Benj
@ Benj Cảm ơn lời khuyên của bạn, tôi không tìm thấy câu trả lời của AlinHuruba, tôi không biết sự khác biệt là gì, vì vậy hãy nói trực tiếp với tôi. - ifeegoo
Chỉ cần cuộn cho đến khi bạn nhìn thấy câu trả lời 1800 điểm - Benj
Bước 3 là những gì tôi cần. Hầu hết các câu trả lời chỉ cho biết làm thế nào để loại bỏ các tập tin mà chúng tôi muốn untrack. Cảm ơn quan điểm ngược lại. - Yeung
Bước (1) và (2) hoạt động tốt. Câu trả lời rất hay - JnL


Đã sửa. Ok, tôi đã tạo tệp .gitignore trong notepad trên cửa sổ và nó không hoạt động. Khi tôi xem các tập tin .gitignore trong linux nó trông giống như tổ chức vô nghĩa - có lẽ notepad đã viết ra unicode chứ không phải là ascii hoặc bất cứ điều gì 8-bit được.

Vì vậy, tôi viết lại các tập tin trên hộp linux của tôi, và khi tôi kéo nó trở lại vào cửa sổ nó hoạt động tốt! Tiếng hoan hô!


131
2017-07-12 12:30



Trong Notepad, bạn chỉ cần chọn mã hóa "ANSI" trong hộp thoại "Lưu dưới dạng". Hoặc tốt hơn, có được một trình soạn thảo văn bản thích hợp - sau khi tất cả các bạn là một lập trình viên :) ... Tôi có thể giới thiệu "Programmer's Notepad", những người khác thích Notepad ++ và có nghĩa là hàng trăm người ngoài kia. - 0xC0000022L
hehe, vâng, tôi nên tạo ra nó trong netbeans (mà tôi đã sử dụng vào thời điểm đó), eclipse hoặc visual studio. Tôi chỉ gọi nó từ dòng lệnh nghĩ rằng nó sẽ không tạo ra sự khác biệt. - Matt Parkins
Chúng ta cần sử dụng linux / unix như đường dẫn tương đối chứ không phải đường dẫn windows (tức là sử dụng "/" thay vì "\") ngay cả khi bạn đang sử dụng hệ điều hành windows và lưu nó trong ANSI như đã đề cập trong phần bình luận trước. - Dhaval Desai
Vấn đề của tôi là tương tự - my .gitignore đang sử dụng UTF8 với một BOM. Chỉ cần lưu nó như là UTF8 mà không có một BOM và nó kỳ diệu bắt đầu làm việc. - Phil
Đây cũng là vấn đề của tôi. Tôi đã tạo tập tin .gitignore với "echo dirName> .gitignore" vì Windows làm cho nó đau như vậy để tạo các tệp bắt đầu bằng ".". Mã hóa của tệp được tạo theo cách này không thể đọc được bằng git và thay vào đó nó giải thích nó dưới dạng tệp nhị phân. Đã nhấp vào "Encoding -> UTF-8" trong Notepad ++, lưu, hoàn tất. - Laura


Không thêm cam kết khác vào dự án của bạn, một dòng sẽ đủ để tạo .gitignore làm việc như nó được cho là:

git rm -r --cached debug.log nbproject

Điều này sẽ loại bỏ nó khỏi kho lưu trữ nhưng vẫn giữ chúng trên thực tế, bằng tiếng Anh đơn giản, nó xóa bất kỳ lịch sử thay đổi nào liên quan đến chúng, và cũng sẽ không theo dõi sự thay đổi của chúng trong bất kỳ cam kết nào trong tương lai. Một giải thích tốt hơn bạn có thể tìm thấy nó đây.


77
2018-03-19 23:40



Làm việc chính xác như tôi muốn - Tôi chỉ có 1 tệp không được theo dõi đúng cách. Tôi đã lưu nội dung của nó trong notepad, và đã làm: git rm -r --cached someFile.php và nó hoạt động như một nét duyên dáng :) - ShayLivyatan
Bạn có thể giải thích lệnh này làm gì không? Cảm ơn bạn. - FMFF
@FMFF Điều này sẽ loại bỏ nó khỏi kho lưu trữ nhưng vẫn giữ chúng về thể chất, bằng tiếng Anh đơn giản, nó xóa bất kỳ lịch sử thay đổi nào liên quan đến chúng, và cũng sẽ không theo dõi sự thay đổi của chúng trong bất kỳ cam kết nào trong tương lai. Một giải thích tốt hơn bạn có thể tìm thấy ở đây: stackoverflow.com/questions/37279654/… - H Aßdøµ


Một nguyên nhân khác của vấn đề này là các khoảng trống hoặc các tab trước câu lệnh:

Thí dụ:

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

Và như được chỉ ra bởi bình luận dưới một khoảng trắng phía sau có thể là một vấn đề

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

31
2017-12-23 01:48



Một khoảng trống phía sau là vấn đề của tôi, thậm chí còn khó khăn hơn để tìm ra. - amr
cũng có một vấn đề về khoảng trống phía sau. - Trefex
Vâng, cũng vậy. Tôi nghĩ tôi có thể viết bình luận sau mẫu tập tin: *.txt # Tex files. Nhưng git hiểu: "Bỏ qua các tệp có phần mở rộng txt " - Adam Libuša
Từ của tôi, đã cho tôi 2 ngày để tìm câu trả lời 15-upvoted này. Điều này xứng đáng hơn. - fordcars
Bạn vừa giải quyết một vấn đề tôi đã có trong nhiều tháng ... Cảm ơn bạn! - Arkellys


Tôi nhận thấy rằng mã hóa của .gitignore đã có hiệu lực - nếu tập tin là Unicode, nó bị bỏ qua, nếu nó là ASCII, thì không.

Quá trình:

  1. Xác minh trạng thái: PS> git status
  2. Tạo hàm cho Get-FileEncoding
  3. Kiểm tra .gitignoreMã hóa của: PS> Get-FileEncoding .gitignore
  4. Thay đổi mã hóa tới ASCII: PS> Set-Content .gitignore -Encoding Ascii -Value (Get-Content .gitignore)
  5. Xác nhận: PS> git status

27
2017-08-13 21:14



1000 cảm ơn vì điều này. Tôi đã tạo tệp .gitignore trên hệ thống của mình bằng cách sử dụng touch .gitignore và echo ".db" >> .gitignore tuyến đường qua powershell. Tôi thấy rằng echo ".db" >> .gitignore" đã thiết lập mã hóa tập tin thành UCS-2 LE-BOM, một chuyển đổi nhanh sang ASCII và gitignore bắt đầu hoạt động. - impr0t
Điều này đã giúp tôi. Cảm ơn. - DG3
Bạn có thể thử bằng cách bỏ qua Bước 2 & 3. - Aniket Bhansali


Như với các giải pháp khác, cam kết trước tiên và lưu ý rằng bạn S lose mất bất kỳ thay đổi chưa cam kết nào.

Tôi đã có kết quả tốt hơn với điều này:

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

lưu ý rằng trạng thái hiện không có tệp được sửa đổi.


16
2017-11-14 23:13



cái này không có tác dụng với tôi nhưng câu trả lời của ifeegoo - fanny