2011-11-03 29 views
36

đây là những gì 'kết quả git status của tôi trông giống như:mô-đun con git có nội dung đã sửa đổi và không được sửa đổi - tại sao và cách xóa nội dung đó?

# On branch master 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# (commit or discard the untracked or modified content in submodules) 
# 
# modified: vim/bundle/pathogen (modified content) 
# modified: vim/bundle/sparkup (untracked content) 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

chạy git diff vim thấy điều này:

diff --git a/vim/bundle/pathogen b/vim/bundle/pathogen 
--- a/vim/bundle/pathogen 
+++ b/vim/bundle/pathogen 
@@ -1 +1 @@ 
-Subproject commit fcf77f5101f3e589ce006c40ad3a0432735a05cf 
+Subproject commit fcf77f5101f3e589ce006c40ad3a0432735a05cf-dirty 
diff --git a/vim/bundle/sparkup b/vim/bundle/sparkup 
--- a/vim/bundle/sparkup 
+++ b/vim/bundle/sparkup 
@@ -1 +1 @@ 
-Subproject commit 04a81b41f116a19184359a6f8685c192f5c36c70 
+Subproject commit 04a81b41f116a19184359a6f8685c192f5c36c70-dirty 

Tại sao là một untracked, sửa đổi khác, những gì hiện các diff nghĩa là gì? Nhưng quan trọng nhất: làm thế nào nó xảy ra và làm thế nào để thoát khỏi nó?

+0

Câu trả lời này: http://stackoverflow.com/a/5127213/199649 gợi lên tùy chọn hơn. – charlax

Trả lời

41

Một trong các tệp được theo dõi trong vim/bundle/pathogen đã được sửa đổi bằng cách nào đó. Ngoài ra còn có một số nội dung không được theo dõi (không được kiểm duyệt) trong tiểu đơn vị vim/bundle/sparkup. Trong cả hai trường hợp, cách để tìm ra những gì được sửa đổi/không được sửa đổi là thay đổi vào thư mục submodule và chạy git status. (Trong trường hợp file untracked trong một submodule, điều này thường xuyên là một sản phẩm xây dựng mà không được bổ sung vào .gitignore ở thượng nguồn.)

+14

+1 về 'thay đổi vào thư mục submodule'! –

+0

+1 có vẻ hiển nhiên, nhưng điều này làm tôi bối rối một chút. Submodule của tôi đã không bỏ qua bất cứ điều gì, nhưng repo gốc là. – bentford

1

Là tác giả của tiểu bang mầm bệnh trong FAQ, bạn có thể bỏ qua thẻ trên toàn cầu:

git config --global core.excludesfile '~/.cvsignore' 
echo tags >> ~/.cvsignore 
17

Đi vào thư mục của mô-đun con và đảm bảo không có bất kỳ thứ gì được tạo (đầu ra của một số loại) bạn biết.

cd submoduledir/ 
git status 

Nếu bạn thấy bất kỳ tập tin untracked ở đây, chỉ cần làm điều này để loại bỏ chúng:

git reset --hard HEAD 
git clean -fxd 
+1

Tôi thấy rằng mặc dù các tập tin không đúng cách không thực sự tồn tại trên đĩa, Git dường như cư xử như thể chúng. Tôi không biết tại sao điều này xảy ra, nhưng bằng cách sử dụng lệnh sạch theo ví dụ của bạn làm việc. –

+2

Cảm ơn bạn đã xóa mọi thứ dưới .gitignore. Bây giờ toàn bộ cấu hình IDE và bộ nhớ cache của nhà cung cấp của tôi đã biến mất ... N.B. điều này sẽ xóa mọi thứ .gitignore'd –

3

Nếu bạn thực sự chắc chắn rằng bạn muốn chỉ làm điều đó (tôi quản lý bó vim với pathogen và git submodules và một số cách tôi quản lý để có được một số thẻ thư mục trong repos - và họ chỉ cần phải đi) bạn có thể lặp qua submodules và loại bỏ các tập tin untracked.

cd YOUR_REPO_WITH_SUBMODULES/ 
git submodule foreach git clean -f -d 

-f để buộc, -d để loại bỏ các thư mục

Bạn có thể kiểm tra các tài liệu ở đây: https://git-scm.com/docs/git-clean

Các vấn đề liên quan