Chỉ thêm các tệp không bị theo dõi


168

Một trong những lệnh tôi thấy cực kỳ hữu ích trong Git là git add -uném mọi thứ trừ các tệp không bị 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 ở một vị trí mà tôi đã tương tác thêm 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 bị theo dõi vào chỉ mục đó trước khi tôi cam kết.

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

Cảm ơn.


1
Về "ném tất cả mọi thứ nhưng các tập tin chưa được theo dõi vào chỉ mục", .gitignoređược thiết kế đặc biệt cho mục đích đó, không phải git add -u.
Pacerier

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

Câu trả lời:


236

Thật dễ dàng với git add -i. Nhập a(cho "thêm không bị 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


4
Tôi đã hy vọng có một 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ừng tệp. :-)
Rob Wilkerson

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

@Mat cảm ơn bạn vậy là lệnh hoàn chỉnh ----> git add -ia * q ??
BKSpurgeon

Argument list too long... Rất gần!
Simeon

1
Đối với tôi, git 2.21.0 git add -isau đó được 4thêm vào để không bị theo dõi và sau đó *tất cả sau đó qsẽ thoát
Harry B

36

git ls-files -o --exclude-standard cung cấp các tệp không bị theo dõi, vì vậy bạn có thể làm một cái gì đó như bên dưới (hoặc thêm bí danh cho nó):

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

1
alias gau = "git ls-files -o --exclude-standard | xargs -i git add '{}'" hoạt động với tôi
Stephan

git ls-files --help khá hữu ích khi đọc: -o, --others Show other (i.e. untracked) files in the output
Joshua Kunzmann

15

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 vào chỉ mục, nhưng không có nội dung của chúng. Các tập tin không được theo dõi bây giờ hoạt động như thể chúng được theo dõi. Nội dung của chúng sẽ được hiển thị git diffvà bạn có thể thêm sau đó tương tác với git add -p.


Đây chính xác là những gì tôi đang tìm kiếm - cũng cho phép git commit -pđi qua các tệp mới.
nitsujri

11

Bạn có thể thêm tệp này vào tệp ~ / .gitconfig:

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

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

git add-untracked

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

9

Người đã gợi ý đường ống đầu ra của git ls-filesđể git addnhưng điều này sẽ thất bại trong trường hợp có tên tập tin chứa không gian hoặc glob ký tự trắng như *.

Cách an toàn sẽ là sử dụng:

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

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


6

git ls-filesliệt kê các tập tin trong thư mục hiện tại Nếu bạn muốn liệt kê các tệp không bị theo dõi từ bất kỳ đâu trong cây, điều này có thể hoạt động tốt hơn:

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

Để thêm tất cả các tệp chưa được theo dõi trong cây:

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

6

Tôi đã thử điều này và nó đã làm việc:

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

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


0

Nếu bạn có hàng ngàn tệp chưa được theo dõi (ugh, đừng hỏi) thì git add -isẽ không hoạt động khi thêm *. Bạn sẽ nhận được một thông báo lỗi Argument list too long.

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

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

Một phiên bản cô đọng hơn:git ls-files -o --exclude-standard | % { git add $_ }
marckassay

0

Rất nhiều lời khuyên hay ở đây, nhưng bên trong Powershell tôi không thể làm cho nó hoạt động được.

Tôi là một nhà phát triển .NET và chúng tôi chủ yếu vẫn sử dụng HĐH Windows vì chúng tôi chưa sử dụng lõi .Net và nền tảng chéo rất nhiều, vì vậy việc sử dụng hàng ngày của tôi với Git là trong môi trường Windows, nơi trình bao được sử dụng thường xuyên hơn là Powershell và không phải Git bash.

Quy trình sau đây có thể được thực hiện để tạo một hàm bí danh để thêm các tệp không bị theo dõi vào kho Git.

Bên trong tệp hồ sơ $ Powershell của bạn (trong trường hợp bị thiếu - bạn có thể chạy: New-Item $ Profile)

notepad $ Hồ sơ

Bây giờ thêm phương thức Powershell này:

function AddUntracked-Git() {
 &git ls-files -o --exclude-standard | select | foreach { git add $_ }
}

Lưu tệp hồ sơ $ và tải lại vào Powershell. Sau đó tải lại tệp hồ sơ $ của bạn với :. $ hồ sơ

Điều này tương tự như lệnh nguồn trong môi trường * nix IMHO.

Vì vậy, lần tới, nếu bạn là nhà phát triển sử dụng Powershell trong Windows chống lại repo Git và muốn bao gồm các tệp không bị theo dõi, bạn có thể chạy:

AddUntracked-Git

Điều này tuân theo quy ước Powershell nơi bạn có động từ-danh từ.


0

git thêm. (thêm tất cả các tệp trong thư mục này)

git add -all (thêm tất cả các tệp trong tất cả các thư mục)

git add -N có thể hữu ích cho việc liệt kê những cái nào sau này ....


git add -usẽ thêm các tệp sửa đổi không bị theo dõi
Tarasovych

-3

Để thêm tất cả các tập tin, lệnh git không bị theo dõi là

git thêm -A

Ngoài ra nếu bạn muốn biết thêm chi tiết về các tùy chọn khả dụng khác nhau, bạn có thể nhập lệnh

git thêm -i

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

$ git add -i cảnh báo: LF sẽ được thay thế bằng CRLF trong README.txt. Các tập tin sẽ có kết thúc dòng ban đầu của nó 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 gói.json.

* Các lệnh * 1: trạng thái 2: cập nhật 3: hoàn nguyên 4: thêm không bị theo dõi 5: bản vá 6: diff 7: thoát 8: trợ giúp Bây giờ> a

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.