2015-06-05 58 views
10

Khi tôi git add một thư mục, toàn bộ nội dung và tất cả các thư mục con được tổ chức tự động. Trong trường hợp thư mục chứa các thư mục con mà tôi không muốn cam kết, tôi phải unstage chúng bằng tay và thêm chúng vào .gitignore sau đó. Các unstaging rõ ràng cảm thấy như tôi đang làm một cái gì đó sai ở đây.Làm thế nào để `git add` không đệ quy?

Giải pháp là chỉnh sửa .gitignore trước khi thêm. Nhưng trong trường hợp cấu trúc thư mục rất sâu/phức tạp thì điều này hơi phức tạp một chút, bởi vì rất dễ quên bỏ qua một số tệp/thư mục lồng nhau sâu sắc.

Điều tôi đang tìm kiếm là một bước add như SVN's --non-recursive, cho phép thêm mức thư mục theo cấp mà không cần dàn dựng toàn bộ nội dung. Tuy nhiên tôi không thể tìm thấy chức năng này cho git add. Vì vậy, tôi tự hỏi: công việc git được đề nghị cho một bổ sung không đệ quy là gì?

Xem xét những người khác có chính xác opposite problem: Có thể hành vi tôi đã mô tả ở trên là vấn đề với phiên bản git (1.9.1)/cài đặt của tôi?

+1

Nếu bạn chỉ có vài thư mục, bạn có thể thêm '.gitignore' vào thư mục con trước khi bạn sử dụng' git add' – Raptor

+1

@Raptor: Tôi hoàn toàn quên rằng tôi chỉ có thể sử dụng '.gitignore' trong thư mục con, dễ dàng hơn nhiều thay vì chỉnh sửa trung tâm '.gitignore'. Kết hợp với '--dry-run' và khả năng chỉ định ** file **, tôi xem xét vấn đề của mình đã được giải quyết. – bluenote10

+0

Không có cách nào để làm điều này một cách tổng quát hơn? Không có giải pháp nào dưới đây mang lại cho tôi giải pháp hữu ích. – LovesTha

Trả lời

4

Thêm một hệ thống phân cấp thư mục phức tạp là một điều không bình thường để làm (và chắc chắn không phải thứ gì đó xảy ra như một phần của quy trình phát triển git thông thường), vì vậy git không có tính năng đặc biệt cho nó. Bạn luôn có thể sử dụng công cụ bên ngoài để tập hợp danh sách các tệp bạn muốn thêm và thêm danh sách đó vào git add, ví dụ: chỉ thêm các tập tin trong thư mục hiện hành không đệ quy, làm

git add $(find . -type f -maxdepth 1) 

Ngoài ra, bạn có thể sử dụng

git ls-files --others --directory > file-list 

để tạo ra một danh sách các file untracked trong thư mục hiện tại của bạn, và chỉnh sửa nó trong một trình chỉnh sửa để xóa mọi thứ bạn không muốn thêm. (Hãy chắc chắn để loại bỏ file-list chính nó.) Sau đó, bạn có thể sử dụng

để thêm các tệp và thư mục trong danh sách đã chỉnh sửa. (Các thư mục bạn đăng nhập sẽ vẫn được thêm vào đệ quy).

+0

Câu trả lời hay. Nên có 'git add $ (find. -type f -maxdepth 1)' (thiếu. Cho đường dẫn tìm) – Ben

+1

@Ben Dấu chấm chỉ cần thiết nếu bạn đang sử dụng phiên bản kỳ lạ của Apple là 'find'. Trên Linux, chúng ta có GNU tìm và không cần dấu chấm. –

+0

Ah, xin lỗi vì đã khiến chúng tôi thấy có một số ít "chúng tôi" – Ben

0

Nếu bạn muốn thêm chỉ các tập tin từ thư mục mà không cần bất kỳ thư mục con khác mà bạn có thể làm điều gì đó như:

git add FolderName/\*.* 

đâu *.* có nghĩa là mỗi tập tin, từ tất cả các loại tập tin. Thư mục không có tiện ích để chúng không vượt qua.

+0

Điều gì xảy ra nếu các thư mục có phần mở rộng và tệp thiếu tiện ích mở rộng? – skyking

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