2011-01-06 33 views
26

Tôi có một dự án có cấu trúc thư mục sau:các tệp không được theo dõi không được hiển thị trong trạng thái git

Tất cả các tệp dự án đều nằm trong thư mục base_fldr. Ngoài ra tôi có một vài thư mục bên trong base_fldr được gọi là sub_fldr1 và sub_fldr2. Các thư mục con này cũng chứa một số tệp.

Nếu tôi sửa đổi bất kỳ tệp nào trong base_fldr hoặc base_fldr \ sub_fldr \ thì trạng thái git hiển thị chúng dưới dạng sửa đổi. Ngoài ra nếu tôi thêm một tệp mới vào base_fldr, trạng thái git sẽ hiển thị tệp đó dưới dạng tệp không được theo dõi.

Vấn đề của tôi là nếu tôi thêm tệp mới bên trong base_fldr \ sub_fldr \ thì trạng thái git không hiển thị tệp là không được theo dõi. Nó thậm chí sẽ không cung cấp bất kỳ thông tin nào về tệp.

Tệp hoặc tiện ích của tệp KHÔNG nằm trong danh sách .gitignore của tôi. Ngoài ra tôi đã cố gắng git thêm sub_fldr \ file_name nhưng không phải nó đã đưa ra một lỗi và nó cũng không thêm tập tin vào chỉ mục.

Bất kỳ ý tưởng nào đang xảy ra ở đây? Cảm ơn!

+3

Tệp có hiển thị nếu bạn chạy 'git status -u' –

+1

Không có tệp nào không. git status -u đang hiển thị các tệp mới được thêm vào bên trong base_fldr của tôi nhưng không hiển thị bên trong base_fldr \ sub_fldr | – kriver

Trả lời

20

Tôi đã tìm ra điều gì đã xảy ra. Về cơ bản dòng đầu tiên trong tệp .gitignore của tôi là "* /". Điều này khiến bất kỳ tệp nào được thêm vào thư mục con bị bỏ qua bởi lệnh git status. Nhưng điều buồn cười là nếu tôi sửa đổi bất kỳ tệp nào trong thư mục con, trạng thái git hiển thị chính xác chúng dưới dạng sửa đổi vì tệp đã có trong kho git, nhưng bỏ qua các tệp mới trong thư mục con.

Tôi đã khắc phục sự cố bằng cách xóa dòng trong tệp .gitignore để không bỏ qua các thay đổi trong thư mục con, sau đó thêm tệp mới vào chỉ mục và sau đó thêm lại dòng trong .gitignore để nó bỏ qua mọi tệp được tạo trong thư mục con.

Cảm ơn tất cả các câu trả lời.

+3

Điều tương tự đã xảy ra với tôi và cuối cùng tôi nhận ra rằng tôi đã thực sự đã thêm tên thư mục mà tôi đã tạo vào tệp .gitignore tháng trước mà không có lý do rõ ràng nào! Nhưng 1 cho câu trả lời này làm cho tôi kiểm tra nó ;-) ... và -1 cho tôi để tìm kiếm StackOverflow trước khi thậm chí kiểm tra đầu tiên – PandaWood

8

Bạn có một thư mục con .git bên trong thư mục sub_fldr của mình không? Git có thể nghĩ bạn đang cố gắng sử dụng submodules.

+0

Không có thư mục .git bên trong sub_fldr – kriver

+0

Nếu bạn đã có thư mục con .git bên dưới, các thay đổi sẽ vẫn hiển thị trong phụ huynh – quantumpotato

+0

đảm bảo bạn đã đặt "hiển thị tất cả tệp" - điều đó khiến tôi bận trong vài giờ. Tôi đã có một thư mục con ".git", tôi không thể nhìn thấy nó. Nhưng Git có thể ... – TobyEvans

13

Điều này có thể vì base_fldr \ sub_fldr \ thư mục của bạn là untracked, nếu bạn chạy:

git add base_fldr\sub_fldr\ 

Từ bên trong thư mục gốc bản sao làm việc của bạn, nó sẽ tự động thêm các thư mục và các file khác và thư mục trong thư mục đó như tốt.

Theo mặc định, git sẽ không hiển thị các tệp trong các thư mục không được theo dõi.

+0

OP nói rằng các tệp đã sửa đổi bên trong 'sub_fldr' * được hiển thị trong trạng thái' git'. –

+0

My base_fldr \ sub_fldr \ được theo dõi. Trên thực tế, nếu tôi sửa đổi một trạng thái git tập tin hiện có một cách chính xác cho thấy các tập tin bên trong sub_fldr như sửa đổi. – kriver

2

Dưới đây là một nguyên nhân khác của hành vi được mô tả trong câu hỏi này (danh sách tệp không được theo dõi trạng thái git không bao gồm tệp không được theo dõi trong thư mục con). Nếu tệp không được tải xuống do tệp .gitignore trong thư mục con thì tệp sẽ không được đưa vào danh sách tệp không được theo dõi trạng thái git.

14

Tôi gặp sự cố tương tự với các tệp bị theo dõi bị thiếu.Trong khi thử nghiệm các cách để quản lý các phiên bản sửa đổi cục bộ các tập tin được theo dõi mà không cần phải liên tục tránh cam kết tình cờ, tôi chạy như sau:

git update-index --assume-unchanged my-tracked-file-that-is-awol 

tôi đã kết thúc scrapping ý tưởng này, nhưng quên để hoàn tác các lệnh nên các thay đổi tiếp theo để này và các tập tin --assume-không thay đổi khác đã hoàn toàn mất tích từ:

git status -u --ignored 

tôi đã mất một thời gian để tìm ra những gì đang xảy ra, nhưng tôi chỉ cần có để đảo ngược lệnh với:

git update-index --no-assume-unchanged my-tracked-file-that-is-awol 
Các vấn đề liên quan