2009-07-28 19 views
17

Khi nhóm của tôi lần đầu tiên bắt đầu với SVN, tất cả chúng tôi chỉ sử dụng tên của mình khi cam kết với kho lưu trữ, tuy nhiên, nhóm của chúng tôi đã phát triển, chúng tôi đang gặp sự cố vì chúng tôi chỉ thuê một số Mike thứ hai.Có cách nào để thay đổi tên người dùng SVN thông qua toàn bộ lịch sử kho lưu trữ không?

Điều chúng tôi muốn làm là thay đổi tên người dùng của mọi người giống với tên người dùng trên máy tính của họ (tên hoặc họ). Vấn đề mà tôi thấy là lịch sử SVN sẽ vẫn hiển thị tên người dùng cũ trên các cam kết.

Có công cụ nào để thay đổi tên người dùng trong toàn bộ lịch sử của kho lưu trữ không?

Ví dụ, tôi muốn tất cả các cam kết rằng hiện đang do Mike chuyển sang msmith, tất cả các cách trở lại phiên bản 1.

Suy nghĩ đầu tiên của tôi là tôi sẽ phải làm một số phân tích và xử lý trên một tệp kết xuất, nhưng một công cụ sẽ tốt đẹp.

+2

Bạn đã thử đổi tên Mike chưa? – Draemon

+4

Chúng tôi đã thực sự, trong một thời gian ngắn chúng tôi đã đề cập đến anh ta như Phil ... –

+1

Bạn đang chào đón, nếu chỉ là một trò đùa ... –

Trả lời

2

Phải mất rất nhiều tìm kiếm nhưng cuối cùng tôi đã tìm thấy một tập lệnh perl hoạt động chống lại tệp kết xuất SVN.

Tôi đã thử sáng nay trên một kho lưu trữ của mình và nó hoạt động hoàn hảo.

Here is the direct link

-2

Từ bộ nhớ, câu trả lời SVN tiêu chuẩn để thay đổi bất kỳ thứ gì trong lịch sử là thực hiện kết xuất văn bản của cơ sở dữ liệu, tìm kiếm thay thế và tạo lại cơ sở dữ liệu từ đó.

Nhưng tôi đã không thực sự nhìn vào bên trong của SVN từ 0.x-ngày của nó, vì vậy tôi có thể được tắt ...

11

vâng đó là:

svn propset --revprop -r revision_number svn:author new_username 

Tuy nhiên, svn không cho phép thay đổi thuộc tính sửa đổi theo mặc định. Bạn cần thiết lập pre-revprop-change hook script cho điều đó. Trên cửa sổ, nó cũng đủ để đưa một con dơi-file trong thư mục móc của kho lưu trữ của bạn mà chỉ đơn giản chứa một dòng:

exit 0 

Nếu được thiết lập, bạn sẽ có thể viết một kịch bản cho nhu cầu của bạn.

EDIT: Tôi đã không kiểm tra này thông qua, nhưng tôi nghĩ rằng điều này sẽ làm các trick trong PowerShell:

([xml] (svn log --xml)).log.logentry 
    | ? {$_.author -eq "Mike"} 
    | foreach {svn propset --revprop -r $_.revision svn:author msmith} 
+2

svnadmin được xung quanh vấn đề móc – Greg

3

Trong Thunder Below, những câu chuyện của USS Barb trong Thế chiến II, một sĩ quan mới đi trên tàu. Thuyền trưởng hỏi tên anh ta. "Mike", anh trả lời. "Không, chúng ta đã có một Mike", Captain nói. "Chúng tôi sẽ gọi anh là Robert. Trong chiến đấu, khi tôi gọi ra lệnh, không thể nhầm lẫn về việc tôi đang nói chuyện với ai."

Điều tôi nhận được là có tiền lệ để làm cho Mike mới của bạn chọn một tên khác.

20

Bạn có thể sử dụng svndumptool:

svnadmin đường dump/đến/my/repo> repo.dump

svndumptool transform-revprop svn: tác giả originalregexp newvalue repo.dump newrepo.đổ

+0

Tôi đã di chuyển một gói từ tư nhân repo đến repo cộng đồng nơi người dùng có tên tác giả khác nhau. Tôi đã sử dụng svndumptool và nó hoạt động hoàn hảo. – claytron

12

TortoiseSVN đã hỗ trợ tuyệt vời cho chức năng này: trong nó Revision Log Dialog ai có thể lọc theo tác giả (thậm chí thông qua biểu thức thông thường), chọn các phiên bản từ danh sách lọc như mong muốn (thường là tất cả như trong câu hỏi này) và chọn 'Edit tác giả 'từ trình đơn ngữ cảnh.

Điều kiện trước khi có pre-revprop-change hook tại chỗ như đã đề cập trong jeroenhs answer vẫn áp dụng, tất nhiên. Quá trình xử lý khá chậm, nhưng tùy thuộc vào nhu cầu có thể vẫn còn nhiều nhanh hơn và/hoặc thuận tiện hơn sau đó phải đổ toàn bộ kho lưu trữ và xử lý các tệp kết xuất có khả năng lớn này bằng tập lệnh.

6

Trên máy chủ kho, bạn có thể:

echo -n "msmith" > msmith.txt 
svn log /svn -q | grep Mike | cut -f 1 -d' ' | xargs -n1 svnadmin setrevprop /svn svn:author msmith.txt -r 

Đây là những gì mà đang làm:

  1. Store tên người dùng mới trong một tập tin mà không xuống dòng ở cuối (echo -n)
  2. Nhận nhật ký đầy đủ cho kho lưu trữ trong/svn, chỉ hiển thị thông tin tóm tắt (không phải thông báo tường trình) (svn log -q)
  3. Tìm các dòng với Mike (grep)
  4. Lọc hết mọi thứ trừ trường đầu tiên (bản sửa đổi #) (cắt)
  5. Chạy lệnh svnadmin trên mọi bản sửa đổi được tìm thấy trong bước 4 (xargs). Chỉ chuyển một bản sửa đổi cho mỗi lần thực hiện lệnh (-n1). Điều đó sẽ thay thế thuộc tính svn: author bằng nội dung của tệp msmith.txt.
+0

Đây là câu trả lời hay nhất! – gecco

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