2011-09-16 38 views
117

Một trong các lệnh mà tôi thấy cực kỳ hữu ích trong Git là git add -u để ném tất cả mọi thứ trừ các tệp không được theo dõi vào chỉ mục. Có một nghịch đảo của điều đó? Trong vài tháng qua, tôi thường thấy mình ở vị trí mà tôi đã thêm tương tác một số cập nhật vào chỉ mục và tôi muốn thêm tất cả các tệp không được theo dõi vào chỉ mục đó trước khi tôi cam kết.Chỉ thêm các tập tin chưa được chỉnh sửa

Có cách nào để thêm chỉ các tệp không được theo dõi vào chỉ mục mà không nhận dạng chúng riêng lẻ không? Tôi không thấy bất cứ điều gì rõ ràng trong tài liệu trợ giúp, nhưng có lẽ tôi đang thiếu nó?

Cảm ơn.

+1

Về "vứt bỏ mọi thứ trừ các tệp không được xếp vào chỉ mục", '.gitignore' được thiết kế riêng cho mục đích đó chứ không phải' git add -u'. – Pacerier

+0

Ngoài ra, bạn có yêu cầu thêm các tập tin không được theo dõi trong khi xóa tất cả các tệp đang được theo dõi hay đang yêu cầu thêm các tệp không được theo dõi ** lên đầu ** của các tệp đang được theo dõi (làm mọi thứ được theo dõi)? – Pacerier

Trả lời

162

Thật dễ dàng với git add -i. Nhập a (cho "thêm chưa được theo dõi"), sau đó * (cho "tất cả"), sau đó q (để thoát) và bạn đã hoàn tất.

Để làm điều đó với một lệnh duy nhất: echo -e "a\n*\nq\n"|git add -i

+3

Tôi đã hy vọng có cái gì đó ít hơn, tốt, tương tác, nhưng nó chắc chắn tốt hơn so với tập tin theo tập tin. :-) –

+28

'echo -e" a \ n * \ nq \ n "| git add -i' – Mat

+1

@Mat Tôi đã tự động hóa hoàn toàn như trong chú thích ở trên. Cảm ơn bạn. –

23

git ls-files -o --exclude-standard cho file untracked, vì vậy bạn có thể làm điều gì đó như dưới đây (hoặc thêm một bí danh cho nó):

git add $(git ls-files -o --exclude-standard) 
+1

bí danh gau = "git ls-files -o - loại trừ tiêu chuẩn | xargs -i git add '{}'" phù hợp với tôi – Stephan

+0

git ls-files --help khá hữu ích: '-o, --others' ' Hiển thị các tệp khác (tức là chưa được giải quyết) trong đầu ra' –

8

Bạn có thể thêm video này vào tập tin ~/.gitconfig của bạn:

[alias] 
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add" 

Sau đó, từ dòng lệnh, chỉ cần chạy:

012.
git add-untracked 
+0

Tôi thích cách tiếp cận này, nhưng nó không xử lý các khoảng trống trong tên tệp. –

9

Không chính xác những gì bạn đang tìm kiếm, nhưng tôi đã thấy điều này khá hữu ích:

git add -AN 

Sẽ thêm tất cả các tập tin vào chỉ số, nhưng không có nội dung của họ. Các tập tin đã được untracked bây giờ cư xử như thể chúng đã được theo dõi. Nội dung của họ sẽ được hiển thị trong git diff và bạn có thể thêm sau đó tương tác với git add -p.

2

git ls-files liệt kê các tệp trong thư mục hiện tại. Nếu bạn muốn liệt kê các file untracked từ bất cứ nơi nào trong cây, điều này có thể làm việc tốt hơn:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) 

Để thêm tất cả các file untracked trong cây:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add 
+0

Dunno tại sao đây là điều duy nhất để làm việc, nhưng đó là, cảm ơn – slackbot39243

-3

Để thêm tất cả các file untracked lệnh git là

git add -A

Ngoài ra nếu bạn muốn biết thêm chi tiết về các lựa chọn có sẵn khác nhau, bạn có thể gõ lệnh

git add -i

thay vì lệnh đầu tiên, với điều này bạn sẽ nhận được thêm nhiều lựa chọn trong đó có tùy chọn để thêm tất cả các tệp không được theo dõi như được hiển thị bên dưới:

$ git add -i warning: LF sẽ được thay thế bằng CRLF trong README.txt.Tệp sẽ có dòng cuối cùng trong thư mục làm việc của bạn. Cảnh báo : LF sẽ được thay thế bằng CRLF trong package.json.

* Commands * 1: tình trạng 2: cập nhật 3: trở lại 4: thêm untracked 5: vá 6: diff 7: bỏ 8: giúp đỡ gì bây giờ> một

8

dân đã gợi ý đường ống đầu ra của git ls-files đến git add nhưng điều này sẽ thất bại trong trường hợp có tên tệp có chứa khoảng trắng hoặc các ký tự glob như *.

Cách an toàn sẽ được sử dụng:

git ls-files -o --exclude-standard -z | xargs -0 git add 

nơi -z nói git để sử dụng \0 Terminators dòng và -0 nói xargs giống nhau. Nhược điểm duy nhất của phương pháp này là tùy chọn -0 là không chuẩn, vì vậy chỉ một số phiên bản của xargs hỗ trợ tùy chọn này.

0

Nếu bạn có hàng nghìn tệp không được trả lời (ugh, đừng hỏi) thì git add -i sẽ không hoạt động khi thêm *. Bạn sẽ gặp lỗi khi ghi rõ số Argument list too long.

Nếu bạn sau đó cũng là trên Windows (đừng hỏi # 2 :-) và cần phải sử dụng PowerShell để thêm tất cả các file untracked, bạn có thể sử dụng lệnh này:

git ls-files -o --exclude-standard | select | foreach { git add $_ } 
0

tôi đã cố gắng này và nó làm việc:

git stash && git add . && git stash pop 

git stash sẽ chỉ đưa tất cả các file theo dõi biến đổi thành các ngăn xếp riêng biệt, sau đó còn sót lại file là file được theo dõi. Sau đó, bằng cách thực hiện git add . sẽ hiển thị tất cả các tệp không được theo dõi, theo yêu cầu. Cuối cùng, để có được tập hợp tất cả các tệp đã sửa đổi từ ngăn xếp theo git stash pop

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