2010-02-08 24 views
56

Tôi có một vài tệp màn hình bên trong /xxx/documentation và các thư mục con của nó đã được Git theo dõi.git: Làm cách nào để đệ quy thêm tất cả các tệp trong thư mục con phù hợp với mẫu hình cầu?

Sau khi sửa đổi nhiều trong những tập tin màn hình, tôi chạy git add documentation/\\*.screen -Như chỉ định bởi các ví dụ đầu tiên trong git-add của tài liệu-đến giai đoạn những tập tin này, nhưng lệnh thất bại:

fatal: pathspec 'documentation/\*.screen' did not match any files

là lệnh của tôi xấu, hoặc git có lỗi không?

Trả lời

59

Đó là một lỗi trong tài liệu. Trích dấu hoa thị với

$ git add documentation/\*.screen

hoặc

$ git add 'documentation/*.screen'

để nhận hành vi bạn muốn.

Nếu thay vào đó bạn muốn thêm các tập tin chỉ trong thư mục hiện hành, sử dụng

$ git add *.screen

UPDATE: Tôi đã gửi một patch mà sửa chữa vấn đề này, now fixed như các phiên bản 1.6.6.2.

+0

Hai lệnh này có dẫn đến cùng một kết quả không? Điều gì về chỉ thêm các tập tin trong thư mục hiện tại nhưng không phải các thư mục con của nó? –

+0

Nhân tiện, kubi đã nói rằng lệnh này hoạt động tốt trên máy tính của mình, bạn nói gì? –

+0

@Phuong Có, hai lệnh dẫn đến cùng một kết quả. Để chỉ thêm các tệp trong thư mục hiện tại, không trích dẫn đối số, (ví dụ: git add * .screen). Tôi tin rằng kubi và Aaron hiểu lầm câu hỏi của bạn bởi vì tôi đã rất ngạc nhiên khi học (cảm ơn vì đã nhắc tôi!) Rằng git-add có tính năng này. –

1

thử

git add ./documentation/*.screen 
+0

Không phải lệnh đó chỉ thêm tệp từ ./documentation, không phải từ các thư mục con của nó? –

+0

Bạn nói đúng. Tôi chỉ cố gắng lệnh ban đầu của bạn trên máy tính của tôi và nó đã làm việc tốt, mặc dù. – kubi

4

Bạn nói với vỏ để tìm *.screen (tức là chính xác chuỗi này - mà không tồn tại - thay vì những gì bạn muốn "tất cả các file kết thúc bằng .screen). Bỏ qua \\ nên vỏ có thể làm việc mở rộng tên file cho bạn.

+0

Trong hướng dẫn này, họ bảo tôi thêm các dấu gạch chéo ngược đôi http://www.kernel.org/pub/software/scm/git/docs/git-add.html. Bạn nói gì? –

+0

Tôi đã đọc ví dụ và tôi hiểu những gì họ muốn làm (đệ quy thêm) nhưng sau đó, tại sao lệnh thất bại? Lỗi này gợi ý rằng không có tệp nào có phần mở rộng ".screen" trong thư mục hoặc mẫu không được mở rộng. –

+0

Vâng, đó là lạ, bởi vì khi tôi loại bỏ các dấu gạch chéo ngược đôi sau đó lệnh sản xuất không có lỗi. –

17

Tôi đã thử câu trả lời được chấp nhận nhưng không hiệu quả đối với tôi .. vì vậy, đây chỉ là trường hợp ai đó muốn hoàn thành công việc mà không mất thời gian để phân tích các khía cạnh khác nhau có thể gây ra sự cố:

find documentation -name "*.screen" | xargs git add -u 

// tùy chọn -u để git-add thêm vào chỉ số chỉ các tập tin mà trước đây được theo dõi và điều chỉnh

+0

Trong trường hợp của bạn, là 'tài liệu' tên của một thư mục bên trong cây làm việc của repo hoặc một đường dẫn tương đối từ bên ngoài cây đang hoạt động đến sự lộn xộn của repo? –

4

này những gì tôi chỉ sử dụng cho một vấn đề tương tự của git thêm tất cả các tập tin trong một thư mục:

find . | sed "s/\(.*\)/\"\1\"/g" | xargs git add 

Đối với câu hỏi ban đầu lệnh sẽ là:

find -name "*.screen" | sed "s/\(.*\)/\"\1\"/g" | xargs git add 

Lưu ý rằng tôi đang đối phó với trường hợp một tên tập tin quy định đầy đủ chứa dấu cách. Đó là lý do tại sao câu trả lời của tôi. Chỉnh sửa phần trước | đầu tiên để chọn các tệp khác nhau cần thêm.

1

git add * .java hoạt động để tôi thêm đệ quy tất cả các tệp java

+1

Chà, nó cũng phù hợp với tôi! Nhưng chỉ khi không có tệp '.java' trong thư mục hiện tại. Nếu có, chỉ những tệp đó được thêm vào. –

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