Giữ các tập tin bị bỏ qua khỏi trạng thái git


133

Tôi muốn ngăn Git hiển thị các tệp bị bỏ qua git status, bởi vì có hàng tấn tệp tài liệu và cấu hình trong danh sách các tệp đã thay đổi nhưng không được cập nhật , làm cho danh sách trở nên vô dụng.

Git có hiển thị các tệp này không?

Tôi đặt thông tin bỏ qua trong một .gitignoretệp trong thư mục gốc của kho Git và chúng không được thêm khi sử dụng git add .nhưng có vẻ như chúng cũng không bị bỏ qua hoàn toàn, vì chúng hiển thị trong danh sách nói trên và không hiển thị trong danh sách in bởi git ls-files --others -i --exclude-standard. Chỉ các tệp phù hợp với các mẫu trong ~/.gitignorehiển thị ở đó.

Có thể là vì ở giai đoạn trước tôi đã không bỏ qua chúng và do đó chúng đã được cam kết ít nhất một lần?

Câu trả lời:


231

Như tôi đã tìm thấy trong bài viết này , .gitignorechỉ hoạt động cho các tập tin chưa được theo dõi. Nếu bạn đã thêm tệp vào kho lưu trữ, bạn có thể:

git update-index --assume-unchanged <file>

hoặc xóa chúng khỏi kho lưu trữ bằng cách

git rm --cached <file>

Biên tập

Bài viết này cũng giải thích rằng


4
cập nhật chỉ số làm việc cho tôi. Vấn đề tương tự trong đó trạng thái git đang hiển thị các tệp bị bỏ qua ... rất khó chịu. +1
Abe Petrillo

3
Tôi vẫn gặp phải vấn đề này. Cả hai lệnh trên đều không có tác dụng với tôi. Trong cả hai trường hợp, git nói rằng nó không có kiến ​​thức về các tệp được đề cập nhưng chúng vẫn hiển thị ở trạng thái git :(
Cfreak

5
@Cfreak Có git status -- <file>hiển thị "Thay đổi không được phân loại cho cam kết" hoặc "Tệp không bị theo dõi" cho tệp của bạn không? Trước đây là nếu bạn đã có tệp trong chỉ mục và tôi sẽ cần thêm thông tin để giải quyết vấn đề của bạn (tốt hơn là tạo câu hỏi riêng biệt với các thông điệp git được hiển thị và chỉ cần đăng liên kết đến nó trong bình luận). Cái sau là cho các tệp không được theo dõi bởi git (chưa), nhưng không có trong .gitignoretệp và có thể được tự do thêm vào chỉ mục.
MBO

1
@MBO - đúng vậy. Cảm ơn bạn! Nhận xét của bạn đã giúp tôi tìm thấy câu trả lời này: stackoverflow.com/questions/594757/ cấp đã làm việc cho tôi.
Cfreak

1
Tùy chọn đầu tiên hoạt động như một nét duyên dáng. Tôi đã thử cái thứ hai và nó khiến các tập tin bị dàn dựng là "bị loại bỏ" và tôi chắc chắn không muốn điều đó.
Carrm

16

Tôi cũng gặp phải vấn đề này, có lẽ là do bạn đã thêm thư mục / tệp bị bỏ qua của mình vào .gitignore sau khi chúng được GIT đánh dấu là "được theo dõi" trong luồng cam kết ban đầu.

Vì vậy, bạn cần phải xóa bộ đệm theo dõi git như vậy:

git rm --cached -r [folder/file name]

Một lời giải thích chi tiết hơn có thể được đọc ở đây: http://www.frontendjunkie.com/2014/12/stop-git-from-tracking-changes-to.html

Lệnh trên cũng loại bỏ phần còn lại của thư mục / tệp khỏi nguồn gốc GIT từ xa của bạn. Vì vậy, repos GIT của bạn trở nên sạch sẽ.


11

Vấn đề có thể là tập tin này vẫn còn trong bộ đệm git. Để giải quyết vấn đề này cần thiết lập lại bộ đệm git.

Đặt lại bộ đệm git. Điều này loại bỏ mọi thứ khỏi chỉ mục.

git rm -r --cached . 

Thêm tất cả các tệp một lần nữa:

git add . 

Cam kết:

git commit -m ".gitignore was fixed." 

2

Điều này chắc chắn hoạt động,

git rm --cached -r [folder/file name]


1

Tôi giả sử bạn không muốn thêm thư mục tmp (Nền tảng Visual Studio)

1- thêm dòng dưới đây vào tệp .gitignore cục bộ của bạn

## ignore tmp
/tmp/
./tmp/

3- Sao lưu và xóa thư mục tmp cục bộ. (Sao lưu ở một nơi khác. Ví dụ: máy tính để bàn?)

4- Cam kết thay đổi thành cục bộ hơn đồng bộ hóa từ xa (ví dụ: github).

Sau các bước này, thư mục tmp của bạn sẽ không được tải lên lại.


0

Từ người đàn ông git-lsfiles :

-i, --ignored
Show ignored files in the output. Note that this also reverses any exclude list present.

Cá nhân tôi có xu hướng giữ các tệp doxygen trong cây nguồn của mình, vì vậy tôi chỉ cần thêm tệp này vào .gitignore của tôi (nằm trong thư mục trên cùng của cây nguồn của tôi):

docs/*

Mong rằng sẽ giúp.


0

Các bước sau chỉ hoạt động đối với các tệp không bị theo dõi . Thông tin này được áp dụng cho cấu hình sau:

Platform: linux

Git version: git version 1.8.3.1

Đặt danh sách các tệp sẽ bị bỏ qua trong tệp "loại trừ" có ở vị trí sau.

<path till .git directory>/.git/info/exclude

Nội dung ban đầu của tệp "loại trừ"

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~

Nội dung cuối cùng của tệp "loại trừ"

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~


*.tar
*.gch

0

Theo câu trả lời được chấp nhận, bạn có thể giả sử tệp không thay đổi , do đó, bất cứ điều gì bạn làm trên máy cục bộ của bạn không được cam kết với chi nhánh từ xa của bạn.

Cái gì đó như git update-index --assume-unchanged src/main/resources/config.properties nơi src / main.resource / config.properIES là một mẫu cho đường dẫn để tìm tệp đó trong dự án của bạn.

Bây giờ, nếu bạn muốn xóa hoàn toàn tệp khỏi kho lưu trữ của mình, bạn có thể muốn sử dụngremove cached thay vì `git rm --cached

Kịch bản này có thể được áp dụng trong tình huống sau:

Giả sử tôi có một tệp nơi tôi lưu trữ mật khẩu. Ban đầu tôi đã cam kết tệp đó có chi tiết sai, chỉ để các đồng nghiệp của tôi có cùng tệp đó trên máy của họ. Tuy nhiên, bây giờ tôi đã thêm chi tiết chính xác của mình vào máy cục bộ. Làm cách nào để ngăn chặn tệp đó vô tình được cam kết lại với các chi tiết mật khẩu chính xác?


-1

như thế này

git --ignored myfolder

Và sẽ chỉ hiển thị trạng thái cho myfolder

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.