2012-02-13 12 views
25

में पुराने कामों के लेखक को बदलें मेरे पास एक ऐसा उपयोगकर्ता है जिसने आज तक foo.bar कहा है। अब उस उपयोगकर्ता को यहां से fb के रूप में जाना जाएगा। लेकिन मैं सांख्यिकीय कारणों आदि के लिए पुराने उपयोगकर्ता के बजाय इस उपयोगकर्ता नाम को प्रतिबिंबित करने के लिए सभी पुराने कामों को अपडेट करना चाहता हूं। यह कैसे किया जा सकता है?सबवर्सन

मैं वाक्य रचना

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

के बारे में पता लेकिन वह शारीरिक श्रम का एक बहुत आवश्यकता होगी। क्या कोई मौजूदा फ़ंक्शन या स्क्रिप्ट है जो नाम बदलने के लिए नाम लेती है और नाम को इसके साथ बदलने के लिए?

अद्यतन:

यहां एक छोटा स्क्रिप्ट मैं इस के बाद से मैं उन का एक बहुत के लिए रेपोस का एक बहुत पर इस कर रही होगी संभाल करने के लिए किया है :) बस इसे बाहर की जाँच की भंडार फ़ोल्डर में चलाने तुम्हारी पसन्द का। ध्यान दें कि स्क्रिप्ट में त्रुटि प्रबंधन कम से कम है।

https://github.com/inquam/svn-rename-author

+1

+1 स्क्रिप्ट जो सिर्फ उम्मीद के रूप में काम करता है के लिए (बस में मेरी रेपो (रों) के लिए पथ को जोड़ने के लिए किया था प्रत्येक 'svn' कमांड का अंत)। नोट: 'प्री-रेप्रप्रॉप-चेंज' हुक को सक्रिय किया जाना चाहिए और 'revprop' कमांड –

उत्तर

19

खैर मार, आप एक आदेश का निर्माण कर सकते प्राप्त करने के लिए लॉग में संशोधन जो old_username ने किया है:

svn log | grep "^r[0-9]* | old_username" | cut -c 2- | awk '{print $1}' 

यह आदेश लॉग प्राप्त करता है, प्रत्येक संशोधन की शुरुआत में दिखाई देने वाली रेखाओं की खोज करता है, पहले वर्ण को छोड़ देता है (यानी। r) उन पंक्तियों से और फिर रेखा का पहला शेष भाग लेता है, जो संशोधन है।

आप इस जानकारी का विभिन्न तरीकों से उपयोग कर सकते हैं। bash में आप कर सकते हैं इसके साथ svn propset आदेशों के अनुक्रम का उत्पादन:

for f in `svn log | grep "^r[0-9]* | old_username" | cut -c 2- | awk '{print $1}'` 
do 
svn propset --revprop -r $f svn:author your_username 
done 

जो पहली अभिव्यक्ति (अब backquotes में) द्वारा बनाई गई मूल्यों पर दोहराता है और अपने svn propset आदेश के लिए उन मूल्यों का उपयोग करता है, के साथ $f की जगह उपयुक्त संशोधन मूल्य।

+0

बिल्कुल सही, बिल्कुल जिस तरह का समाधान मैं ढूंढ रहा था। – inquam

+1

नोबस के लिए संकेत (मेरे जैसा): इसे काम करने की प्रतिलिपि के अंदर टाइप करें, रेपो नहीं;) –

-5
  1. svnadmin dump
  2. संपादित डंप फ़ाइल
  3. वर्ष रेपो
  4. नया बनाएँ और svnadmin load संपादित डेटा
+0

पर 0 वापस लौटा जाना चाहिए भयानक विधि भारी डंपफाइल के साथ झुकाव से कहीं अधिक सुरक्षित और आसान है।सबवर्सन टूलचेन के मामले में डंपफाइल संपादित करना भी समर्थित नहीं है। नौकरी के लिए उपयुक्त उपकरण होने पर जोखिम भरा तरीका क्यों उपयोग करना है? –

+0

आप डंप फ़ाइल को कैसे संपादित करते हैं? क्या आप इसे मैन्युअल रूप से करते हैं, या ऐसा करने का एक स्वचालित तरीका है? ओपी जानता है कि रिपो डाउन किए बिना लेखक को कैसे बदला जाए और मैन्युअल रूप से डंप को संपादित करें (जिसे खराब परिवर्तन के बाद अनुशंसित नहीं किया जाता है) पूरे रेपो को नष्ट कर सकता है। लेखक बस प्रक्रिया को स्वचालित करने का एक तरीका चाहता है। –

0

मैंने पिछले system कमांड तक इसका परीक्षण किया है। (मैं अपने भंडार को बदलने के लिए नहीं करना चाहता था), लेकिन इस पर्ल कार्यक्रम काम करना चाहिए:

#! /usr/bin/env perl 
# 

use strict; 
use warnings; 
use feature qw(say); 
use autodie; #Don't have to test if open fails 

use constant { 
    SVN  => "svn", 
    REPOS => "http://source/src/myrepo", 
    OLD_NAME => "dbrown", 
    NEW_NAME => "db", 
}; 

open (my $log, "-|", LOG_CMD); 

while (my $line = <$log>) { 
    chomp $line; 

    # 
    # Is this a revision line? 
    # 

while (my $line = <$log>) { 
    chomp $line; 
    next unless $line =~ /^r  #Line starts with an "r" 
         (\d+)  #Followed by digits (Capture) 
         \s\|\s #And a "|" separator 
         ([^\|]+) #This should be the name (Capture) 
         \s+\|  #And another separator 
         /x; 
    my $revision = $1; 
    my $author = $2; 
    next unless $author eq OLD_NAME; 

    # 
    # Found the Author 
    # 
    my $command = qq(@{[SVN]} -r $revision pset --revprop svn:author @{[NEW_NAME]}); 
    my $error = system $command; 
    say STDERR qq(Couldn't modify revision $revision) if $error; 
} 
3

डालें अपने पूर्व revprop-change.bat में निम्नलिखित नामक फ़ोल्डर कुछ में (नोटपैड में खोलने से) इस तरह सी (आपके विन्यास के आधार पर): \ ASP.NET Projecten \ ProjectX \ हुक

set magProperyWijzigen = false; 
:: Only allow the log message and author to be changed. 
if("%propertyName%" == "svn:author") magProperyWijzigen = true; 
if("%propertyName%" == "svn:log") magProperyWijzigen = true; 

if "%magProperyWijzigen%" == "false" goto ERROR_PROPNAME