2013-04-02 32 views
11

Có cách nào để chỉ thêm tệp mới và không thêm tệp đã sửa đổi với git không? Đó là, các tệp được liệt kê là không được theo dõi với trạng thái git.Git chỉ thêm tất cả các tệp mới, chứ không phải các tệp đã sửa đổi

Khác với ofcourse thêm từng tệp riêng biệt.

Đó không phải là hoàn toàn cần thiết để làm điều này trong trường hợp của tôi, câu hỏi thực sự đối với tôi là đã trả lời ở đây: How to make git-diff and git log ignore new and deleted files?

Đó là, không hiển thị khác trên các tập tin mới, vì vậy tôi đang yêu cầu này hơn, vì tôi không thể tìm thấy câu trả lời cho nó ở bất cứ đâu.

+0

các trường hợp sử dụng cho điều đó là gì? Bởi vì tôi không thấy làm thế nào nó sẽ có ý nghĩa để thêm tập tin và không thêm những thay đổi có liên quan trong các tập tin hiện có và nếu những thay đổi không liên quan hơn những thay đổi được cam kết có thể cần phải được chọn thủ công trên một số tiêu chí khác. –

+0

Luồng công việc của tôi là tôi kiểm tra từng tệp có diff và sau đó thêm nó vào "loại bỏ nó". Vì vậy, mà git diff bây giờ chỉ hiển thị các tập tin còn lại cho tôi để kiểm tra. Vì vậy, tôi muốn thêm các tập tin mới (giả sử hoặc tin rằng chúng được "ok") để có được chúng ra khỏi con đường. –

Trả lời

12

lẽ

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

git ls-files cho phép bạn liệt kê các tập tin bằng cách git được quản lý, được lọc bởi một số tùy chọn. -o trong trường hợp này bộ lọc nó để chỉ hiển thị "người khác (ví dụ: file untracked)"

Các $(...) tuyên bố vượt qua giá trị trả về của lệnh đó như một cuộc tranh cãi để git add.

+0

Bạn sẽ cần phải loại trừ các tập tin bị bỏ qua một lần nữa, nếu không 'git add' sẽ khiếu nại. Ví dụ. bằng cách sử dụng cờ '--exclude-standard' để gọi' git ls-files -o'. –

+0

OK, không biết điều đó. Cảm ơn! –

+0

Nếu tôi nhớ chính xác, nó * chỉ * phàn nàn, nói với bạn rằng nó sẽ bỏ qua các tệp đó và nếu bạn muốn thêm chúng, bạn sẽ phải sử dụng cờ '--force'. Tuy nhiên, khó chịu. –

2

Bạn có thể sử dụng chế độ ngắn về tình trạng git (xem man git-status(1)), trong đó cung cấp cho các đầu ra sau đây:

Nếu không có chế độ ngắn hạn:

$ git status 

... 


# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# README 
# application/libraries/Membres_exception.php 
no changes added to commit (use "git add" and/or "git commit -a") 

Với chế độ ngắn hạn:

$ git status -s 
M application/models/membre_model.php 
?? README 
?? application/libraries/Membres_exception.php 

Sau đó, sử dụng grep, awk và xarg, bạn có thể thêm các tệp có cột đầu tiên là ??.

$ git status -s | grep '??' | awk '{ print $2 }' | xargs git add 

và thấy rằng nó làm việc:

$ git status 
# On branch new 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# new file: README 
# new file: application/libraries/Membres_exception.php 
+0

ý tưởng hay, mặc dù có một vấn đề: trong trường hợp filepath chứa các khoảng trống 'awk' {print $ 2} ''sẽ chỉ lấy phần đầu tiên của filepath như vậy. –

+0

Làm thế nào về điều này: 'git status -s | grep '??' | awk '{print substr ($ 0, index ($ 0, $ 2))}' | xargs git add' –

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