13

Tôi muốn thêm thuộc tính svn (như svn: keyword = Id Ngày Rev Author) vào tệp khi cam kết tệp mới.Tự động thêm thuộc tính từ khóa svn cho các tệp mới (phía máy chủ)

Để làm việc này có thể có hai lựa chọn chính:

  1. Client-side: thay đổi autoprops trong cấu hình svn client
  2. Server-side: làm một số ma thuật với cam-móc

Phía máy khách không phải lúc nào cũng mong muốn, vì việc kiểm soát thiết lập máy khách là cần thiết. Tôi muốn giải quyết vấn đề này trên máy chủ. Điều này có thể giải quyết như thế nào.

Trả lời

6

Tài liệu Subversion nói đó là bad idea to modify a commit on the server side.

Thay vào đó, bạn có thể làm điều gì đó giống như phiên bản tùy chỉnh của tập lệnh svn_apply_autoprops định kỳ thông qua cron (hoặc thậm chí trên máy chủ được kích hoạt bởi cam kết). Kịch bản lệnh svn_apply_autoprops là tổng quát hơn một chút so với những gì bạn cần, nhưng nó phải là straighforward để thiết lập tệp cấu hình thích hợp.

Vì bài đăng này, subversion web site đang di chuyển theo apache.org và tôi không thể tìm thấy tài liệu cho các công cụ đóng góp.

+0

Các cron script chà mà sửa đổi thuộc tính svn trên các tập tin là con đường của tôi để đi. Tôi đã đọc cùng một nhận xét về 'sửa đổi cam kết'. Hiện tại, tôi yêu cầu người dùng tải một kịch bản cấu hình svn trong máy khách svn của họ (tortoisesvn). – jochem

+0

Lưu ý rằng đây là câu trả lời cũ… câu trả lời hiện đại cũng có thể được tìm thấy trong câu hỏi này: http://stackoverflow.com/a/40282610/97627 –

1

Bất cứ khi nào bạn có nhiều người cam kết, có thể bạn có cấu hình lật đổ không nhất quán.

Giải quyết vấn đề này hai lần, như bạn nói, ở mức độ khách hàng và mức độ máy chủ:

  1. ĐỪNG sửa đổi đạo cụ tự động trong máy chủ cam kết. Điều này gần như chắc chắn sẽ cắn bạn trong mông sau khi bạn có một ngoại lệ cho quy tắc của bạn và bạn không thể vượt qua nó.

  2. Gửi email cho tất cả các nhà phát triển với định hướng cho việc thay đổi tập tin cấu hình của họ, như trong:

 
    Attention, teammates: 

    On ALL the boxes you work on, please modify the file: ~/.subversion/config 

    * under the section [miscellany], uncomment the line: 
    enable-auto-props = yes 

    under the section [auto-props], add or uncomment lines so they read: 

    *.py = svn:eol-style="LF";svn:executable="ON";keywords="Id"; 

    Note: you may test this is working by doing the following in your sandbox directory: 

    touch delete.me.py 
    svn add delete.me.py 
    ls -al delete.me.py # you will see: 
    -rwxrwxr-x 1 krice4 krice4 0 Apr 19 12:05 delete.me.py 
    svn proplist delete.me.py # you will see: 
    Properties on 'delme.py': 
     svn:executable 
     keywords 
     svn:eol-style 
    svn revert delete.me.py 
    rm delete.me.py 

3.After gửi email, đó là thời gian để thêm một chiếc thắt lưng cho những người bị ngưng chức, bởi vì một số nhà phát triển sẽ quên làm những gì họ phải làm. Vì vậy, tạo ra một cảnh báo gây phiền nhiễu mỗi khi ai đó cam kết mà không cần thiết lập đúng đạo cụ.

Tôi sẽ khuyên các móc phát hiện sau cho tệp Python. Tất cả nên in cảnh báo NOT ngăn chặn các hoạt động subversion, như đã nói ở trên, các trường hợp ngoại lệ sẽ giết bạn. Lưu ý rằng các ngoại lệ có thể gửi email cho người dùng hoặc gửi email cho toàn bộ nhóm phát triển, với chủ đề:

"Người dùng ngu ngốc Kevin vừa cam kết tệp có các tab trong đó!"

  • xác minh svn: thực thi ON
  • xác minh svn: từ khóa "Id"
  • xác minh svn: eol-style "LF" hệ thống # linux
  • xác minh Không Tabs Trong tập tin!(Những mớ hỗn độn với những thứ khác nhau)

Đối với làm thế nào để viết một trong những cam kết móc, xem: http://wordaligned.org/articles/a-subversion-pre-commit-hook

+0

Ưu tiên sử dụng các tab để lưu giữ trong các tệp nguồn. Vì vậy, mỗi thành viên trong nhóm có thể có kích thước tab ưa thích của cô ấy (2, 4, ...) - Tên tôi KHÔNG phải là Kevin ;-) – hfrmobile

+0

IMHO, trong Python, tab là một con quái vật khủng khiếp khổng lồ để defenestrate, slay, stomp on , gấp, trục chính, cắt xén và la lên. Nó có thể được okay để có tất cả các tab và không gian hàng đầu, nhưng tất cả chúng ta đều biết điều đó là không thể trên mọi dòng của mỗi tập tin. Vì vậy, KHÔNG BAO GIỜ sử dụng chúng. Tất cả các biên tập viên hiện đại đều có cài đặt để tự động thay thế 'em. NGUYÊN NHÂN: Python xử lý (dòng 1 w/tab và dòng 2 không có tab) là mơ hồ và do đó bad-luck-drivien. –

2

Kể từ phiên bản 1.8 có thể sử dụng một tính năng repository dictated configuration để tự động thiết lập các thuộc tính trên phía máy chủ.

Từ Automatic Property Setting:

[...] một tập hợp các định nghĩa tài sản mà tất cả khách hàng kết nối tự động xem xét khi hoạt động trên các bản sao làm việc kiểm tra ra từ một máy chủ nhất định. Subversion 1.8 và các máy khách mới hơn hỗ trợ chức năng như vậy thông qua thuộc tính có thể thừa kế svn:auto-props.

Lưu ý rằng bạn chỉ cần đủ mới khách hàng. Dưới đây bạn sẽ tìm thấy một ví dụ hoàn chỉnh mà tôi đã sử dụng svn command line client 1.8.8. với máy chủ svn 1.6.11.

svn phiên bản client 1.8+ cần

[email protected]:/tmp/testrepo/text-files$ svn --version --quiet 
1.8.8 

tập tin được tạo ra trước khi tự động đạo cụ sở hữu thiết

[email protected]:/tmp/testrepo/text-files$ file f?.txt 
f1.txt: UTF-8 Unicode text 
f2.txt: UTF-8 Unicode text, with CRLF line terminators 
f3.txt: ASCII text, with CRLF line terminators 
[email protected]:/tmp/testrepo/text-files$  

Set auto-props

[email protected]:/tmp/testrepo/text-files$ svn propset svn:auto-props "*.txt = svn:eol-style=LF" . 
property 'svn:auto-props' set on '.' 
[email protected]:/tmp/testrepo/text-files$ svn proplist -v --recursive 
Properties on '.': 
    svn:auto-props 
    *.txt = svn:eol-style=LF 
[email protected]:/tmp/testrepo/text-files$  

Tạo f4.txt file mới với Terminators dòng CRLF

[email protected]:/tmp/testrepo/text-files$ file f?.txt 
f1.txt: UTF-8 Unicode text 
f2.txt: UTF-8 Unicode text, with CRLF line terminators 
f3.txt: ASCII text, with CRLF line terminators 
f4.txt: UTF-8 Unicode text, with CRLF line terminators 
[email protected]:/tmp/testrepo/text-files$  

Các Terminators dòng thay đổi f4.txt sau khi cam kết

[email protected]:/tmp/testrepo/text-files$ svn add f4.txt 
A   f4.txt 
[email protected]:/tmp/testrepo/text-files$ svn commit -m 'just another test' . 
Adding   f4.txt 
Transmitting file data . 
Committed revision 5. 
[email protected]:/tmp/testrepo/text-files$ file f?.txt 
f1.txt: UTF-8 Unicode text 
f2.txt: UTF-8 Unicode text, with CRLF line terminators 
f3.txt: ASCII text, with CRLF line terminators 
f4.txt: UTF-8 Unicode text 
[email protected]:/tmp/testrepo/text-files$ svn proplist -v --recursive 
Properties on '.': 
    svn:auto-props 
    *.txt = svn:eol-style=LF 

Properties on 'text-files/f4.txt': 
    svn:eol-style 
    LF 
[email protected]:/tmp/testrepo/text-files$