Gitignore không làm việc


276

.gitignoreVì một số lý do, tệp của tôi không hoạt động và không có số lượng Google nào có thể sửa được. Đây là những gì tôi có:

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

Nó nằm trong thư mục master, đó là repo git của tôi. Tôi đang chạy Git 1.8.4.2 vì tôi đang dùng MacBook chạy OSX 10.8.6.


4
1. những tập tin nào được lập chỉ mục mặc dù chúng không nên? 2. bạn đã thêm .gitignore sau khi bạn thêm các tệp này vào repo chưa?
Ahmad

2
@Ahmad Trong nhiều dự án, /bin/thư mục vẫn hiển thị khi tôi thực hiện git status. Tôi đã không thay đổi các tệp đó kể từ khi tôi thêm.gitignore
user3280133

1
"kể từ khi tôi thêm .gitignore" - vì vậy bạn đã thêm .gitignore sau khi thêm tệp?
Ahmad

3
bản sao có thể của .gitignore không hoạt động
Liam

Câu trả lời:


687

Các tệp / thư mục trong kiểm soát phiên bản của bạn sẽ không tự xóa chỉ vì bạn đã thêm chúng vào .gitignore. Chúng đã có trong kho lưu trữ và bạn phải loại bỏ chúng. Bạn chỉ có thể làm điều đó với điều này:

( Hãy nhớ cam kết mọi thứ bạn đã thay đổi trước khi bạn làm điều này. )

git rm -rf --cached .
git add .

Thao tác này sẽ xóa tất cả các tệp khỏi kho lưu trữ và thêm chúng trở lại (lần này tôn trọng các quy tắc trong của bạn .gitignore).


2
hoặc bạn chỉ có thể thử hoàn nguyên các tệp / thư mục mà bạn đã thêm vào .gitignore bằng thư mục git checkout_to_ignore / *
Zahra

1
@Greenish nhưng sẽ không hoạt động nếu chúng đã được cam kết, sẽ chỉ hoạt động nếu chúng được dàn dựng, trong trường hợp thư mục đã có trong .gitignore không nên xảy ra (trừ khi bạn buộc thêm) :)
Ahmad

1
không hoạt động với tôi khi tôi thay đổi github. Nói tất cả mọi thứ là cập nhật !!!!
Bác sĩ Younes Henni

1
Xin lỗi Ahmed Tôi đã khắc phục sự cố của mình bằng cách xóa tệp gitignore và kéo và đẩy một lần nữa vào repo từ xa. Tôi không còn nhớ những gì nó nói khi tôi gõ trạng thái git. Vấn đề của tôi là cố định. Cảm ơn rất nhiều.
Bác sĩ Younes Henni

3
Tôi nghĩ rằng tốt hơn là git thêm lệnh 'git ign' để đơn giản hóa việc này. Vì vậy, chúng tôi có thể sử dụng git ignore path/filebất cứ lúc nào.
Tiw

123

Để hủy theo dõi một tệp đã được thêm / khởi tạo vào kho lưu trữ của bạn, nghĩa là dừng theo dõi tệp nhưng không xóa tệp khỏi hệ thống của bạn, sử dụng: git rm --cached filename

Để mở khóa mọi tệp hiện có trong .gitignore:

Đầu tiên cam kết bất kỳ thay đổi mã nổi bật, và sau đó, chạy lệnh này:

git rm -r --cached .

Thao tác này sẽ xóa mọi tệp đã thay đổi khỏi chỉ mục (khu vực tổ chức), sau đó chỉ cần chạy:

git add .

Cam kết:

git commit -m ".gitignore is now working"

Hãy chắc chắn để hợp nhất các nhánh của bạn trở lại thành chủ hoặc di chuyển con trỏ của bạn bởi vì khi tôi thử điều này, tôi đã mất cả hai nhánh tính năng của mình. May mắn là tôi đã không mất bất kỳ công việc nào, tất cả các cập nhật gần đây nhất của tôi từ nhánh làm việc đã được đặt lại thành nhánh chính nhưng tùy thuộc vào thiết lập của bạn, hành vi này có thể không mong muốn.
Sledge

Làm thế nào bạn sẽ sử dụng lệnh này để loại bỏ một thư mục ra khỏi bộ đệm thay vì một tập tin?
RealMJDev

15

Sau khi đi xuống một chút lỗ thỏ cố gắng làm theo các câu trả lời cho câu hỏi này (có lẽ vì tôi phải làm điều này trong một dự án phòng thu trực quan), tôi thấy con đường dễ dàng hơn là

  1. Cắt và dán (các) tệp Tôi không còn muốn theo dõi vào một vị trí tạm thời

  2. Cam kết "xóa" các tệp đó

  3. Cam kết sửa đổi .gitignoređể loại trừ các tệp tôi đã tạm thời di chuyển

  4. Di chuyển các tập tin trở lại vào thư mục.

Tôi thấy đây là cách dễ dàng nhất để thực hiện (ít nhất là trong một phòng thu trực quan, hoặc tôi sẽ giả sử môi trường dựa trên IDE khác như Android Studio), mà không vô tình tự bắn vào chân mình bằng một sự lan tỏa khá tốt git rm -rf --cached ., sau đó dự án phòng thu trực quan tôi đang làm việc không tải.


2
Tôi khá thích cách tiếp cận này - dường như ít phá hoại hơn, ngay cả khi nó không được coi là "phù hợp".
theyetiman

6

Trong trường hợp của tôi, đó là một khoảng trống ở đầu tệp hiển thị rõ ràng khi tôi mở tệp trong Notepad, không rõ ràng trong Visual Studio Code.


4

Tôi đã sử dụng một cái gì đó để tạo ra chung .gitignorecho tôi và tôi gặp phải điều này. Sau khi đọc câu trả lời @Ozesh, tôi đã mở trong Mã VS vì nó có một chỉ báo đẹp ở dưới cùng bên phải hiển thị loại kết thúc dòng. Đó là LF nên tôi đã chuyển đổi sang CRLF như đề xuất nhưng không có xúc xắc.

Sau đó, tôi nhìn bên cạnh các kết thúc dòng và nhận thấy nó đã được lưu bằng UTF16. Vì vậy, tôi đã lưu lại bằng cách sử dụng UTF8 mã hóa một voila, nó đã hoạt động. Tôi không nghĩ rằng CRLF có vấn đề nên tôi đã đổi nó thành LF để chắc chắn và nó vẫn hoạt động.

Tất nhiên đây không phải là vấn đề của OP vì anh ấy đã cam kết các tập tin nên chúng đã được lập chỉ mục, nhưng tôi nghĩ tôi sẽ chia sẻ trong trường hợp có người khác vấp phải điều này.

TLDR ; Nếu bạn chưa cam kết các tệp và .gitignore vẫn không được tôn trọng thì hãy kiểm tra mã hóa tệp và đảm bảo UTF8 của nó và nếu điều đó không hoạt động thì có thể thử làm rối với các kết thúc dòng.


1
UTF16 là thủ phạm đối với tôi. Đã mở mã VS> đã mở .gitignore> đã mở dấu nhắc lệnh> "Thay đổi mã hóa tệp"> "UTF-8"> Lưu tệp
Michael

3

Trong trường hợp của tôi, khoảng trắng ở cuối dòng .gitignore là nguyên nhân. Vì vậy, xem ra cho khoảng trắng trong .gitignore!


2

Tôi đã giải quyết vấn đề của mình bằng cách làm như sau:

Trước hết, tôi là một người dùng windows, nhưng tôi đã gặp phải vấn đề tương tự. Vì vậy, tôi đang đăng giải pháp của tôi ở đây.

Có một lý do đơn giản tại sao đôi khi .gitignore không hoạt động như mong muốn. Đó là do hành vi chuyển đổi EOL.

Đây là một sửa chữa nhanh chóng cho điều đó

Chỉnh sửa> Chuyển đổi EOL> Định dạng Windows> Lưu

Bạn có thể đổ lỗi cho cài đặt trình soạn thảo văn bản của mình cho điều đó.

Ví dụ:

Vì tôi là một nhà phát triển windows, tôi thường sử dụng Notepad ++ để chỉnh sửa văn bản của mình không giống như người dùng Vim.

Vì vậy, những gì xảy ra là, khi tôi mở tệp .gitignore của mình bằng Notepad ++, nó trông giống như thế này:

## 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

Nếu tôi mở cùng một tệp bằng Notepad mặc định, đây là những gì tôi nhận được

## 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 

Vì vậy, bạn có thể đã đoán được bằng cách nhìn vào đầu ra. Mọi thứ trong .gitignore đã trở thành một lớp lót và vì có ## khi bắt đầu, nó hoạt động như thể mọi thứ được nhận xét.

Cách khắc phục rất đơn giản: Chỉ cần mở tệp .gitignore của bạn bằng Notepad ++, sau đó thực hiện như sau

Chỉnh sửa> Chuyển đổi EOL> Định dạng Windows> Lưu

Lần tới khi bạn mở cùng một tệp với notepad mặc định của windows, mọi thứ sẽ được định dạng chính xác. Hãy thử nó và xem nếu điều này làm việc cho bạn.


1

Ngoài ra, ý kiến ​​phải được trên dòng riêng của họ. Họ không thể được đặt sau một mục. Vì vậy, điều này sẽ không hoạt động:

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

Nhưng điều này sẽ làm việc:

# fine to comment here
/node_modules

0

git reset --hardlàm việc cho ai không? Tôi không nói rằng đây là một giải pháp tốt, nó chỉ có vẻ hoạt động lần đầu tiên tôi đã thử.


Hãy bỏ qua bình luận của tôi ở trên. Một người nào đó trong công việc đã làm điều gì đó rất sai trong Git, nó đã gây ra các thư mục trùng lặp và tôi đã không nhận thức được khá lâu. Cảm ơn.
dùng1889992

0

Tôi đã mắc một lỗi rất lớn khi chỉnh sửa dockerignore của mình, đã hoạt động rất tốt sau khi tôi tìm thấy tệp bỏ qua đúng: p


0

Thêm bit của tôi vì đây là một câu hỏi phổ biến.

Tôi không thể đặt thư mục .history bên trong .gitignore vì cho dù tôi đã thử kết hợp với cái gì, nó vẫn không hoạt động. Windows tiếp tục tạo các tệp mới sau mỗi lần lưu và tôi không muốn thấy những tệp này.

nhập mô tả hình ảnh ở đây

Nhưng sau đó tôi nhận ra, đây chỉ là môi trường phát triển cá nhân của tôi trên máy. Những thứ như .history hoặc .vscode là dành riêng cho tôi vì vậy sẽ thật kỳ lạ nếu mọi người bao gồm các mục .gitignore của riêng họ dựa trên IDE hoặc HĐH họ đang sử dụng.

Vì vậy, điều này làm việc cho tôi, chỉ cần thêm ".history" vào .git / thông tin / loại trừ

echo ".history" >> .git/info/exclude
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.