2010-05-03 34 views
30

Tôi hơi mới với git và tôi không hiểu tại sao git commit -a chỉ các giai đoạn đã thay đổi và xóa các tệp nhưng không phải là tệp mới.Tại sao không git commit -a thêm tập tin mới?

Mọi người có thể giải thích tại sao nó như thế này và tại sao không có cờ cam kết nào khác để bật thêm tệp và cam kết in one command?

BTW, hg commit -A thêm cả file mới và xóa để cam kết

+1

Bạn có thể muốn hỏi tại sao nó lại nằm trong danh sách git . Đây có thể là một tính năng hữu ích vì vậy nếu có ai quan tâm đủ để thêm nó. – xenoterracide

+0

Tôi đoán rằng không có 'git commit -A' vì 1.) thêm các tệp mới tương đối không phổ biến; cũng hầu hết các VCS khác yêu cầu rõ ràng 'scm add ' bước 2.) '.gitignore' và giống như các tệp không hoàn hảo, điều này có thể dẫn đến việc thêm các tệp không mong muốn để cam kết. –

+0

Điều này chắc chắn phải là mặc định '-a' hành vi – juliangonzalez

Trả lời

17

Git là về việc theo dõi thay đổi. Nó dựa vào bạn để cho nó biết những tập tin nào là quan trọng, đủ để theo dõi. Bạn có thể đạt được các ảnh hưởng mong muốn như vậy:

git add . ;git commit -a 

Đảm bảo tệp .gitignore của bạn được cập nhật.

+0

Vâng. Điều này cho phép bạn giữ các tệp khác nhau mà bạn không muốn theo dõi trong kho lưu trữ và chỉ thêm những gì bạn chắc chắn muốn theo dõi. – Kzqai

+1

-a là dự phòng nếu được thực hiện trong thư mục gốc của kho lưu trữ. về cơ bản người hỏi cần – xenoterracide

+3

Không, '-a' không thừa. Nó đảm bảo rằng việc xóa cũng được tổ chức. –

6

Kelly đúng nhưng tôi nghĩ một yếu tố khác là rất nhiều người mong đợi hành vi đó vì CVS, Subversion và hầu hết các công cụ khác đều làm theo cách đó.

Nếu Git cam kết tệp mới, bạn có thể nhận thấy rằng bạn đã cam kết .o tệp trước đây và thậm chí tệ hơn chúng có thể gây hại cho bản dựng.

+1

Tôi không muốn nó là mặc định, nhưng tôi muốn nó cho phép tôi làm điều đó. Tôi có thể làm git add., Vậy tại sao không cho phép tôi làm điều đó như một phần của lệnh git commit? – splintor

9

Tôi đề nghị một giải pháp khác: sử dụng git commit --interactive -m "your commit message" sẽ cho bạn thấy menu này

*** Commands *** 
    1: [s]tatus  2: [u]pdate  3: [r]evert  4: [a]dd untracked 
    5: [p]atch  6: [d]iff 7: [q]uit 8: [h]elp 

cho phép bạn kiểm tra tình trạng, thêm các tập tin untracked và vân vân sử dụng tổ hợp phím đơn giản.

6

Tôi nghi ngờ câu trả lời rất đơn giản (nhưng tôi nghi ngờ tôi sẽ rất nổi tiếng khi nói điều đó!) - có khả năng không có ý định "tại sao" này, khác với cách nó rơi ra khi các nhà phát triển triển khai nó. Ưu tiên của dự án Git chưa bao giờ được dễ sử dụng hoặc thân thiện với người dùng.

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