2013-03-05 32 views
14

Tôi có một bản vá khổng lồ mà tôi muốn chia thành nhiều cam kết git logic. Một số lượng lớn các thay đổi chỉ đơn giản là thay đổi tên biến hoặc các cuộc gọi chức năng, sao cho chúng có thể dễ dàng được định vị bằng grep. Nếu tôi có thể thêm vào chỉ mục bất kỳ thay đổi nào phù hợp với regex sau đó làm sạch trong git gui, nó sẽ giúp tôi tiết kiệm rất nhiều công việc thủ công. Có cách nào tốt để cập nhật chỉ mục trên cơ sở từng dòng bằng cách sử dụng regex trong git hoặc từ một số đầu ra của grep (ví dụ: số dòng) không?Git thêm các dòng vào chỉ mục bằng grep/regex

Tôi tìm thấy a similar question, nhưng tôi không biết cách tạo tệp tạm thời từ tìm kiếm loại regex.

+1

Một số ví dụ có thể sẽ đi một chặng đường dài trong việc làm rõ những gì bạn đang cố gắng đạt được. – rvalvik

Trả lời

-1

xarg là thứ bạn đang tìm kiếm. Hãy thử điều này:

grep -irl 'regex_term_to_find' * | xargs -I FILE git add FILE 

Tính đến ống | là lệnh grep tiêu chuẩn của bạn để tìm kiếm tất cả các file *. Tùy chọn là:

  • i - case insensitive
  • r - đệ quy thông qua danh bạ
  • l - danh sách tên các tập tin chỉ

Trong xargs một phần của báo cáo kết quả FILE là tên của biến để sử dụng cho mỗi đối số/đối sánh được chuyển bởi lệnh grep. Sau đó, nhập lệnh mong muốn bằng cách sử dụng biến thích hợp.

+5

Cảm ơn, nhưng tôi muốn chỉ thêm một phần của một tệp chứ không phải toàn bộ tệp. – FazJaxton

+0

@FazJaxton, Vì điều đó, bạn sẽ cần phải thêm làm bản vá. Sử dụng tham số '-p' sau' git add' tuy nhiên tôi không chắc nó sẽ hoạt động như thế nào trong xargs vì quá trình vá được thực hiện bởi bạn (ví dụ, chọn những gì cần được thêm vào và cái gì không nên). – RDL

13

patchutils có lệnh grepdiff có thể sử dụng để đạt được điều này.

# check that the regex search correctly matches the changes you want. 
git diff -U0 | grepdiff 'regex search' --output-matching=hunk 

# then apply the changes to the index 
git diff -U0 | grepdiff 'regex search' --output-matching=hunk | git apply --cached --unidiff-zero 

Tôi sử dụng -U0 để tránh những thay đổi không liên quan. Bạn có thể muốn điều chỉnh giá trị này để phù hợp với tình huống của mình.

+0

Điều này làm việc khá tốt cho tôi, nhưng, như một lưu ý, 'hunk' không thực sự cung cấp đủ chi tiết nếu bạn đã sửa đổi các dòng lân cận mà không phù hợp với regex. – arcyqwerty

+0

Tôi tìm thấy một cách tốt là chỉ cần chạy dòng thứ hai và sau đó kiểm tra kết quả. 'git status -v' cho nội dung được dàn dựng và' git diff' để xem tất cả những thứ không được tổ chức. Sau đó, cam kết nếu tất cả có vẻ chính xác. – Gerry

0

Đơn giản hơn, bạn có thể sử dụng git add -p và sử dụng tùy chọn / để tìm kiếm trong phần khác biệt của bạn để biết thêm các bản vá. Nó không hoàn toàn tự động, nhưng nó dễ dàng hơn các lựa chọn thay thế khác mà tôi đã tìm thấy.

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