2011-10-21 27 views
5

Tôi muốn có thể gọi một số tiền xử lý trên các tệp trước khi Git cố gắng hợp nhất chúng và sau quá trình kết quả đã hợp nhất. Ý tưởng chung ở đây là một số tệp khó tự động hợp nhất, nhưng có thể được chuyển đổi thành một biểu mẫu dễ xử lý hơn. Đây là trường hợp sử dụng cụ thể của tôi:Làm cách nào để kết hợp tập tin git với trước và sau xử lý?

Tôi có kho lưu trữ dữ liệu không phải là rất nhạy cảm. Trong kho lưu trữ đó, tôi có một chút dữ liệu nhạy cảm được mã hóa, trong một tệp có tên là sensitive.pgp. Tôi thích sự sắp xếp này bởi vì tôi không phải tin tưởng rằng kho lưu trữ của tôi đang được quản lý một cách an toàn, tôi chỉ phải tin vào mã hóa và mật khẩu. Việc nắm bắt tất nhiên là Git không thể hợp nhất văn bản được mã hóa, vì vậy nếu sensitive.pgp được sửa đổi trong hai lần kiểm tra cùng một lúc, không có khả năng hợp nhất - ngay cả khi các thay đổi đối với văn bản rõ ràng có thể dễ dàng tách ra. Quy trình làm việc thủ công giống như sau:

  1. Xung đột hợp nhất cho sensitive.pgp được phát hiện.
  2. Bắt đầu git-mergetool. Công cụ cũng không thể hợp nhất các tệp PGP.
  3. Bây giờ tôi có các tệp tạm thời cho phiên bản của mình, phiên bản cơ sở và phiên bản từ xa.
  4. Giải mã tất cả ba tệp.
  5. Gọi công cụ hợp nhất của tôi trên các phiên bản đã được giải mã.
  6. Mã hóa kết quả.
  7. git-thêm sensitive.pgp mới.

Tôi muốn yêu cầu Git áp dụng trước và sau xử lý của tôi trước khi nó cố hợp nhất để có thể xử lý tự động. Tôi có thể tưởng tượng rất nhiều kịch bản khác với cùng một mẫu chung: Khá nhiều lần bạn có định dạng tệp nén với cấu trúc cơ bản giống như văn bản (ví dụ: PDF, OpenOffice, Word) chẳng hạn.

Mọi đề xuất?

+0

Điểm thưởng: Có cách nào để định cấu hình thao tác này chỉ được thực hiện trên các tệp hoặc loại tệp cụ thể, ngoài việc đặt logic đó vào trước và sau xử lý không? –

Trả lời

4

Bạn có một vài lựa chọn:

  1. định nghĩa một thanh toán/lọc checkin trong .gitattributes (xem git help attributes) để giải mã các tập tin lúc thanh toán (để lại cho họ không được mã hóa trong cây làm việc của bạn) và mã hóa chúng trước khi check-in
  2. xác định một trình điều khiển tùy chỉnh hợp nhất (xem git help attributesmerge.<driver>.* tùy chọn trong git help config)
  3. xác định một công cụ tùy chỉnh hợp nhất (xem git help mergetoolmergetool.<tool>.* tùy chọn trong git help config) giải mã trước khi gọi công cụ hợp nhất thực và mã hóa khi công cụ hợp nhất thực trả về

Bạn chỉ có thể áp dụng bộ lọc tùy chỉnh và hợp nhất trình điều khiển vào tệp cụ thể, nhưng công cụ hợp nhất áp dụng cho toàn bộ kho trừ khi bạn giới hạn nó bằng cách chuyển tên tệp đến lệnh git mergetool. Bạn có thể thiết kế công cụ hợp nhất tùy chỉnh của mình để thay đổi hành vi của nó tùy thuộc vào tên của tệp đang được hợp nhất.

+0

Cảm ơn rất nhiều. Tôi đã bắt đầu mày mò với trình điều khiển hợp nhất tùy chỉnh và trông giống như một giải pháp tốt. –

+1

Đây là trình điều khiển hợp nhất thực hiện chính xác điều này: https://gist.github.com/2480455 –

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