2012-01-11 9 views
10

Có thể thao tác một thuộc tính lật đổ như svn:externals chỉ qua một URL không? (Tức mà không cần phải làm thao tác copy).Làm thế nào để sử dụng propset của subversion chống lại một URL?

Tôi muốn một kịch bản mà ghim svn:externals đến một phiên bản đặc biệt được đưa ra một URL lật đổ, nhưng điều này dường như là không thể:

$ svn propset foo bar https://example.com/svn/myproject/trunk 
svn: Setting property on non-local target 'https://example.com/svn/myproject/trunk' needs a base revision 

$ svn propset foo bar -r HEAD https://example.com/svn/myproject/trunk 
svn: Try 'svn help' for more info 
svn: Cannot specify revision for setting versioned property 'foo' 

$ svn propset foo bar --revprop -r HEAD https://example.com/svn/myproject/trunk 
svn: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent 
svn: At least one property change failed; repository is unchanged 
svn: Error setting property 'foo': 
could not remove a property 

(tôi nhận được cùng một kết quả nếu tôi sử dụng số sửa đổi thực tế thay vì HEAD.)

Trả lời

4

Không. Thay đổi thuộc tính trên tệp giống như thay đổi tệp - bạn cần một thư mục hoạt động. Có một vài lệnh Subversion thay đổi cam kết mà không yêu cầu bản sao làm việc: svn cp, svn mkdirsvn delete. Mọi thứ khác cần một thư mục làm việc để thực hiện thay đổi.

Nhân tiện, bạn có thể thực hiện thay đổi trên sửa đổi các thuộc tính không có bản sao làm việc. Thuộc tính sửa đổi là những thứ như nhận xét cam kết (svn: log), ID của người gửi (svn: author), và thời gian của commit (svn: date).

+3

Cách giải quyết có vẻ là 'svn checkout --depth = empty' vào một thư mục tạm thời với' mktemp' hoặc tương tự (điều này khá nhanh), sử dụng 'svn propset' để thực hiện thay đổi, cam kết và sau đó xóa thư mục tạm thời. – mjs

+2

Có một tùy chọn khác: svnmucc, được bao gồm trong các nguồn SVN nhưng không được xây dựng hoặc cài đặt theo mặc định. Bạn có thể đọc về nó tại http://svnbook.red-bean.com/en/1.8/svn.ref.svnmucc.re.html. – trent

+0

Thêm vào để lưu ý bởi @trent, TortoiseSVN hiện đang đóng gói svnmucc với trình cài đặt kể từ phiên bản 1.8.1 và mới hơn https://sourceforge.net/p/tortoisesvn/tickets/496/ –

9

Có, mặc dù đó là một chút hack; svn propedit có thể thay đổi mục tiêu URL:

svn propedit foo --editor-cmd "echo bar>" http://example.com/svn/myproject/trunk -m "Property changed"

+0

đó là một mẹo tuyệt vời nhưng tốt hơn là chỉ định thông báo trong dòng lệnh thông qua cờ '-m' nếu không trình soạn thảo cũng sẽ được gọi cho thông báo. –

+0

Bạn đúng, tất nhiên. Chỉnh sửa câu trả lời. –

0

Building khi Willem của excellent answer, đây là một ví dụ cho thấy làm thế nào để thiết lập SVN auto-props cho needs-lock cho tất cả các file và mime-type cho phần mở rộng đặc biệt sử dụng một URL:

svn propedit svn:auto-props --editor-cmd "echo \"* = svn:needs-lock=* 
*.os = svn:mime-type=application/octet-stream 
*.osproj = svn:mime-type=application/octet-stream\" >" http://example.com/svn/myproject/trunk -m "Setting auto-props." 
3

Bạn có thể sử dụng lệnh svnmucc đối với các thuộc tính không tương tác của URL chẳng hạn như svn:externals.

Ví dụ:

$ svnmucc --root-url https://example.com/svn -m 'reference other/yap' \ 
    propset svn:externals "^/otherproject/tag/xyz other 
^/yetanother/tag/123 yap" myproject/trunk 

Lưu ý rằng svnmucc cũng hỗ trợ các lệnh khác ngoài propset và nó có thể chuỗi nhiều lệnh trong một cuộc gọi (vì vậy tên). Kết quả chỉ là một changeset.

Lệnh svnmucc là một phần của gói nguồn lật đổ và thường có sẵn thông qua trình quản lý gói của phân phối. Ví dụ, Fedora 25 bao gồm nó trong gói subversion-tools. OpenCSW thậm chí bao gồm nó trong gói lật đổ chính.

+0

Bài đăng của bạn phải được đánh dấu là * Trả lời *. :) – bahrep