2011-06-29 40 views
6

IDE riêng biệt của chúng tôi xuất ra các tệp XML có mã hóa làm cho chúng trông giống như tệp nhị phân. Sự khác biệt và hợp nhất của các tệp này không thành công.Để móc hoặc không móc - git

Chúng tôi có thể tạo phiên bản ASCII của những tệp này bằng lệnh tr. Tôi muốn nhận được một trạng thái mà các tập tin này luôn được tự động chuyển đổi thành ascii trước khi chúng được cam kết.

Tôi đã chọn bản sao của Kiểm soát phiên bản với Git và nó hết lòng cảnh báo tôi tránh sử dụng móc trừ khi tôi thực sự cần.

Tôi có nên sử dụng móc cho mục đích này không? Hoặc tôi có thể làm điều gì đó khác để đảm bảo các tệp luôn được chuyển đổi trước khi cam kết không?

Windows XP với msysgit 1.7.4

- = update = -

Cảm ơn tất cả mọi người để được giúp đỡ và sự kiên nhẫn của bạn. Nhìn vào this question Tôi đã thử những điều sau đây, nhưng nó không hoạt động:

echo "*.xrp filter=xrp" > .git/info/attributes 
git config --global filter.xrp.clean 'tr -cd '\''\11\12\15\40-\176'\''' 
git config --global filter.xrp.smudge cat 
git checkout --force 

Các tệp vẫn không thay đổi sau khi thay đổi cấu hình này. Ngay cả khi tôi xóa và thanh toán lại.

Lệnh tr được định cấu hình làm nhiệm vụ rõ ràng làm hoạt động cách ly. Bằng chứng:

$ head -n 1 cashflow/repo/C_GMM_CashflowRepo.xrp 
ÿþ< ! - - X M L R e p o s i t o r y f i l e 1 . 0 - - > 

$ tr -cd '\''\11\12\15\40-\176'\' < cashflow/repo/C_GMM_CashflowRepo.xrp | head -n 1 
<!-- XML Repository file 1.0 --> 

Mọi người có thể thấy cấu hình của tôi có vấn đề gì không?

+0

Bản kê khai khác biệt hoặc hợp nhất không thành công như thế nào? Cách hợp nhất thất bại là gì? – ralphtheninja

+0

Diff phản hồi: "tệp nhị phân khác". Câu hỏi hay mặc dù, tôi chỉ giả định rằng việc hợp nhất sẽ thất bại như là một hệ quả của việc không thể khác biệt. Bất kể, có khả năng khác biệt sẽ tốt đẹp. – Synesso

Trả lời

5

Một vấn đề với móc là chúng không được phân phối.

.gitattributes có một số chỉ thị để quản lý khác và nội dung của một tập tin, nhưng tùy chọn khác sẽ là một attribute filter (vẫn còn trong .gitattributes), và có thể tự động chuyển đổi những tập tin trên cam kết.
(Tức là nếu kịch bản sạch có thể detect those files based on their content alone)


mỗi cuộc thảo luận trò chuyện này, OP Synesso báo cáo thành công:

.gitattributes: 
*.xrp filter=xrp 

~/.gitconfig: 
[filter "xrp"] 
clean = \"C:/Program Files/Git/bin/tr.exe\" -cd "\\''\\11\\12\\15\\40-\\176'\\'" 
smudge = cat 

Sau đó, tôi đã phải sửa đổi các tập tin, thêm, cam kết, xóa, thanh toán ... và THEN nó đã được sửa. :)

Lưu ý rằng, đối với bất kỳ sửa đổi nào không chỉ liên quan đến một người dùng, nhưng có khả năng bất kỳ người dùng nào nhân bản repo đó, tôi muốn thêm (và cam kết) thêm .gitattributes tệp trong đó bộ lọc được khai báo thay đổi tập tin .git/info/attribute (không được nhân bản).

Từ gitattributes man page:

  • Nếu bạn muốn chỉ ảnh hưởng đến một kho lưu trữ duy nhất (ví dụ, để gán thuộc tính các tập tin được đặc biệt đến công việc của một người dùng cho kho đó), sau đó các thuộc tính nên được đặt trong tệp $GIT_DIR/info/attributes.
  • Thuộc tính cần được kiểm soát phiên bản và phân phối cho các kho lưu trữ khác (nghĩa là các thuộc tính quan tâm đến tất cả người dùng) phải đi vào các tệp .gitattributes.
  • Thuộc tính sẽ ảnh hưởng đến tất cả các kho lưu trữ cho một người dùng nên được đặt trong tệp được chỉ định theo tùy chọn cấu hình core.attributesfile.
  • Thuộc tính cho tất cả người dùng trên hệ thống phải được đặt trong tệp $ (tiền tố)/etc/gitattributes.

http://git-scm.com/docs/gitattributes


phyatt thêm in the comments:

tôi đã thực hiện một ví dụ tương tự như sau cho sqlite3.
Bạn có thể thêm nó vào tập tin chính xác với hai dòng:

git config diff.sqlite3.textconv 'sqlite3 $1 .dump' 
echo '*.db diff=sqlite3' >> $(git rev-parse --show-toplevel)/.gitattributes 

dòng tương tự có thể được sử dụng để viết các con đường git config khác.

+0

Cảm ơn. Bộ lọc thuộc tính âm thanh không kém phần thú vị. – Synesso

+0

Tôi đã tìm thấy bộ lọc thuộc tính hữu ích nhất. Cuối cùng tôi đã nhận được câu hỏi này: http://stackoverflow.com/questions/2316677/can-git-automatically-switch-between-spaces-and-tabs/2318063#2318063 - Tôi đã thử một giải pháp nhưng nó không hoạt động. Đã cập nhật câu hỏi. – Synesso

+0

@Synesso: bạn đã thử thanh toán lại tất cả kho lưu trữ ở một nơi khác? – VonC

2

Khác biệt có khả năng hoạt động trên chúng như (tức là chúng chỉ chứa một số lượng byte lạ nhưng văn bản khác) hay không? Nếu có, bạn chỉ có thể buộc git xử lý chúng dưới dạng văn bản với .gitattributes. Nếu không, nó vẫn có thể tốt hơn để tạo các tập lệnh tùy chỉnh và hợp nhất tùy chỉnh (sẽ sử dụng tr khi cần để chuyển đổi) và yêu cầu git sử dụng nó, lần nữa với .gitattributes.

Trong cả hai trường hợp, bạn sẽ không sử dụng móc (chỉ dành cho hoạt động trong các hoạt động cụ thể), nhưng .gitattributes, là tệp cụ thể.

+0

Các tập tin là XML, nhưng khi tôi nhìn vào chúng trong hexdump mỗi byte được xen kẽ với 00. Kết quả là chúng được coi là nhị phân bởi diff. Giải pháp của bạn nghe rất dễ. Tôi sẽ thử nó vào ngày mai. – Synesso

2

Nếu định dạng chỉnh sửa ưa thích của bạn là ASCII và chỉ xây dựng của bạn yêu cầu tệp nhị phân tôi khuyên bạn nên sử dụng quy tắc xây dựng để tạo phiên bản nhị phân từ nguồn ưa thích mà bạn sẽ cam kết vào kho lưu trữ.

Do IDE của bạn tạo các tệp ở định dạng nhị phân, tôi nghĩ điều tốt nhất là lưu trữ chúng trong kho lưu trữ ở định dạng đó.

Thay vì móc, hãy xem git help attributes, đặc biệt là difftextconv cho phép bạn định cấu hình các tệp phù hợp với các mẫu nhất định để sử dụng các phương tiện thay thế khác. Bạn sẽ có thể tạo ra các khác biệt ASCII làm việc mà không phải thỏa hiệp cách bạn lưu trữ các tệp hoặc chỉnh sửa chúng.

EDIT: Dựa trên nhận xét của bạn ở nơi khác rằng "mỗi byte khác là 0" đề xuất tệp là UTF-16 hoặc UCS-2. Xem câu trả lời này cho số diff có thể xử lý unicode: Can I make git recognize a UTF-16 file as text?

+0

Cảm ơn. Tôi nên đã làm rõ rằng IDE là một fruitcake và viết các tập tin như nhị phân khi họ thực sự không. Không có lợi ích gì cả với nhị phân của họ. Cảm ơn câu trả lời hữu ích của bạn! – Synesso

+0

+1 để tạo các tệp XML theo yêu cầu và chỉ cam kết (các) tài liệu nguồn mà XML được tạo ra. –

+0

@Synesso dựa trên nhận xét của bạn Tôi đã thêm liên kết vào câu hỏi liên quan. –