2012-01-26 30 views
11

Tôi cần xuất sang lưu trữ một tập hợp các cam kết trong kho lưu trữ git. Làm cách nào để thực hiện việc này? Sử dụng svn, tôi có thể chọn cam kết và xuất thành zip.Git: truy xuất cam kết cụ thể

+0

bạn có nghĩa là sự khác biệt về xuất khẩu của các cam kết này? – CharlesB

+0

Vâng xin lỗi vì tôi nhận ra nó không dễ hiểu. Tôi cần một tệp lưu trữ có hầu hết các tệp cập nhật giữa 2 lần commit. – user1170896

Trả lời

18

Để xuất kho lưu trữ tối đa một cam kết nhất định:

git archive -o export.zip <COMMIT>. Thay thế <COMMIT> bằng số cam kết bạn muốn xuất.

Để tạo một bản vá giữa hai cam kết:

git diff COMMIT1 COMMIT2 > patch.txt

+0

Tôi mặc dù lệnh này sẽ xuất tất cả các cam kết trong kho lưu trữ cho đến khi cam kết được chỉ định được tìm thấy. Tôi chỉ cần xuất cam kết được chỉ định. Cũng giống như một miếng vá. – user1170896

+0

Trả lời câu trả lời. – tobiasbayer

+0

ok ... Nhưng một bản vá được sử dụng vào một kho lưu trữ khác. Nó chứa đánh dấu để hiểu nơi sửa đổi đã được thực hiện. Tôi cần lưu trữ chỉ với các tệp đã sửa đổi (cập nhật) giữa các cam kết được chỉ định. – user1170896

10

Git có một cách tiện dụng của việc tạo ra một bản vá cho từng cam kết. Mặc dù điều này ban đầu có nghĩa là một cách để định dạng các bản vá để chúng có thể được gửi qua email, chúng là một cách tiện dụng để trích xuất một tập hợp các thay đổi.

Lệnh bạn muốn là git format-patch và cách bạn áp dụng các bản vá lỗi được định dạng này trở lại git là với lệnh git am.

Ví dụ, nếu bạn bạn có hai cam kết C1 và Cn mà bạn muốn xuất như một tập hợp các bản vá lỗi git bạn chỉ cần:

git format-patch -k C1..Cn 

này sẽ tạo ra một tập hợp các bản vá lỗi đánh số (trong thư mục hiện tại của bạn). Mỗi bản vá sẽ khác với cam kết, cũng như thông tin cam kết (Tiêu đề, nhận xét, tác giả, ngày, v.v.).

Đây là nhiều hơn một tệp khác biệt đơn giản giữa hai cam kết sẽ cung cấp cho bạn.

+0

Tôi nghĩ điều này cần phải là 'git format-patch -k C1 ~ ..Cn' thay vì' git format-patch -k C1..Cn', bởi vì bên trái của phạm vi là _exclusive_, vì vậy bạn phải cung cấp _parent_ ('~') của lần commit đầu tiên. – nh2

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