2011-12-26 43 views
25

Tôi có dự án nhiều mô-đun maven có độ sâu khoảng 5 cấp.
Tôi hiện đang chuyển sang git và tôi thấy rằng rất nhiều nội dung của thư mục target được ghi lại bởi git là "Thay đổi không được thay đổi".
Tôi đã googled rất nhiều và tìm kiếm SO nhưng không thể tìm thấy một câu trả lời như thế nào để có được git bỏ qua các toàn bộ cây thư mục của thư mục target.
My .gitignore, mà cư trú ở thư mục gốc của dự án, trông như thế này:Vấn đề với bỏ qua thư mục con trong git

.project 
.classpath 
.settings/ 
target/ 

Điều kỳ lạ là rằng .class tác phẩm, mà cư trú ở đâu đó dưới gốc cây target, đừng bị bỏ qua bởi các định nghĩa trên nhưng các tệp như MANIFEST.MF, pom.properties hoặc các tệp thuộc tính ứng dụng của riêng tôi nằm ở đâu đó trong cây thư mục target không bị bỏ qua.
Tôi đã đọc Git Ignores and Maven targets nhưng giải pháp đó dường như không hoạt động đối với tôi.
Tôi cũng có thể nói rằng khi tôi cố gắng thêm quy tắc target/*, nó không thay đổi bất cứ điều gì và khi tôi thay thế target/ bằng target/* thì các tệp .class cũng xuất hiện dưới dạng không được tổ chức.
Tôi thực sự đánh giá cao một số hướng dẫn vì có vẻ như rất khó xảy ra với tôi rằng đám người sử dụng git và maven chưa giải quyết được vấn đề tương tự. Cảm ơn.

+0

Bạn có cam kết bất kỳ tệp nào trong thư mục 'target /' vào kho lưu trữ của bạn trước đó không? Việc thêm tệp vào '.gitignore' sẽ không có hiệu lực nếu tệp đã được git theo dõi. –

+0

@ KL-7 Đối tác của tôi đã thực hiện cam kết ban đầu nhưng thực sự có vẻ như đó có thể là vấn đề. Tôi sẽ kiểm tra và báo cáo lại. Nếu vậy bạn có thể đăng nó như một câu trả lời và tôi sẽ chấp nhận. – Ittai

Trả lời

49

Một trong những lý do có thể là bạn đã cam kết tệp đó với kho lưu trữ của mình. Trong trường hợp đó, thêm chúng vào .gitignore sẽ không ngăn git theo dõi các tệp này. Để khắc phục điều đó trước tiên bạn cần loại bỏ chúng khỏi kho lưu trữ như thế:

git rm -r target/ 

(Nếu dự án của bạn có mô-đun, bạn cần phải bao gồm đường dẫn xuống mục tiêu các mô-đun có liên quan của:
git rm -r parent_project/module_name/target/)

Nếu bạn muốn loại bỏ thư mục từ kho nhưng không phải từ đĩa bạn có thể sử dụng tùy chọn --cached:

git rm -r --cached target/ 

Trong mọi trường hợp thì bạn nên cam kết xóa đó đến kho (bạn có thể làm điều đó trong cùng một cam kết với việc thêm target/ đến .gitignore nếu bạn muốn).

+0

Xin lỗi vì noob nhưng khi tôi làm 'git rm -r --cached target /' nó chỉ xóa trong kho lưu trữ cục bộ của tôi? Nếu vậy, sau đó tôi cần phải đẩy kho lưu trữ cục bộ đến kho lưu trữ từ xa của tôi, đúng không? – Ittai

+0

Có, trước tiên bạn cần phải cam kết những thay đổi đó và sau đó đẩy tới kho lưu trữ từ xa. –

+0

Tôi chưa quên. Tôi đang gặp một số vấn đề với vấn đề này nhưng tôi nghĩ nó liên quan nhiều đến sự thiếu kinh nghiệm hiện tại của tôi với git hơn là giải pháp của bạn. Tôi sẽ đăng lại/chấp nhận câu trả lời của bạn khi tôi có thể. Cảm ơn. – Ittai

4
target 
target/* 

Thêm các dòng này vào gitignore để bỏ qua tệp đích và tất cả các tệp bên trong mục tiêu. Điều này sẽ không theo dõi thư mục đó và nội dung của thư mục đó nữa.

2

Cách khác, sử dụng tortoisegit trên mục tiêu thư mục chỉ cần chọn "Xóa và thêm vào danh sách bỏ qua".

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