Như đã đề cập trong bài viết trên blog của Mark Longair Git Submodules Giải thích ,
Phiên bản 1.7.0 trở lên của git chứa một thay đổi khó chịu trong hành vi của mô hình con git.
Các mô hình con bây giờ được coi là bẩn nếu chúng có bất kỳ tệp sửa đổi hoặc các tệp không bị theo dõi nào , trong khi trước đó nó chỉ là trường hợp nếu CHÍNH trong mô hình con trỏ chỉ ra cam kết sai.
Ý nghĩa của dấu cộng ( +
) trong đầu ra của mô hình con git đã thay đổi và lần đầu tiên bạn bắt gặp điều này, phải mất một chút thời gian để tìm ra điều gì sai, ví dụ bằng cách xem qua các thay đổi hoặc sử dụng git bisect trên git .git để tìm sự thay đổi. Người dùng sẽ vui lòng giới thiệu một biểu tượng khác cho phiên bản được chỉ định, nhưng bẩn bẩn.
Bạn có thể sửa nó bằng cách:
hoặc cam kết hoặc hoàn tác các thay đổi / diễn biến trong mỗi mô hình con của bạn, trước khi quay lại repo gốc (nơi diff không báo cáo các tệp "bẩn" nữa). Để hoàn tác tất cả các thay đổi đối với mô hình con của bạn chỉ cần cd
vào thư mục gốc của mô hình con của bạn và làmgit checkout .
Nhận xét dotnetCarpenter mà bạn có thể thực hiện:git submodule foreach --recursive git checkout .
hoặc thêm --ignore-submodules
vào của bạn git diff
, để tạm thời bỏ qua các mô hình con "bẩn".
Mới trong phiên bản Git 1.7.2
Như Noam bình luận bên dưới , câu hỏi này đề cập rằng, kể từ phiên bản git 1.7.2, bạn có thể bỏ qua các mô hình con bẩn với:
git status --ignore-submodules=dirty
git commit -a
mà không phải lo lắng thêm các thay đổi này. Mặc dù chúng được đánh dấuM
ở phía trước, nhưng chúng sẽ không kết thúc trong cam kết của bạn.