আমি কীভাবে এসভিএন-তে কোনও ফাইলের সমস্ত changesতিহাসিক পরিবর্তনগুলি দেখতে পারি


169

আমি জানি যে আমি svn diff -r a:b repo দুটি নির্দিষ্ট সংশোধনগুলির মধ্যে পরিবর্তনগুলি দেখতে পারি । আমি যা চাই তা প্রতিটি পরিবর্তনের জন্য একটি ফাইল যা পরিবর্তিত হয়েছে is এই জাতীয় আদেশ পাওয়া যায়?


16
এটি অদ্ভুতভাবে নাম করা "দোষ" কমান্ডের মধ্যে লুকানো আছে।
গুজম্যানজ্যাক 19

6
আমি ভেবেছিলাম @ গুজম্যানজ্যাক রসিকতা করছেন, যতক্ষণ না চেষ্টা করেছি।
এসএসএইচ এই

উত্তর:


181

এটির জন্য কোনও অন্তর্নির্মিত কমান্ড নেই, তাই আমি সাধারণত এই জাতীয় কিছু করি:

#!/bin/bash

# history_of_file
#
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs.  The first revision of the file is emitted as
# full text since there's not previous version to compare it to.

function history_of_file() {
    url=$1 # current url of file
    svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -n | {

#       first revision as full text
        echo
        read r
        svn log -r$r $url@HEAD
        svn cat -r$r $url@HEAD
        echo

#       remaining revisions as differences to previous revision
        while read r
        do
            echo
            svn log -r$r $url@HEAD
            svn diff -c$r $url@HEAD
            echo
        done
    }
}

তারপরে, আপনি এটি দিয়ে কল করতে পারেন:

history_of_file $1

35
আমি "ব্রাসেড ব্লকটিতে পাইপিং" ট্রিকটি এর আগে কখনও দেখিনি। ঝরঝরে।

5
এই স্ক্রিপ্টের ব্যাচ ফাইল সংস্করণ , fww।
ল্যাডেজ

আমি এটি আমার .bashrc ফাইলটিতে যুক্ত করেছি। আমি যখন স্টার্ট-আপ করি তখন svn: '.' is not a working copy svn: Syntax error in revision argument '@HEAD' svn: Syntax error in revision argument '@HEAD'
ফ্রান্সিস্ক 0

1
@ ফ্রান্সিসকো0: আপনার বাশার্কে চূড়ান্ত লাইনটি অন্তর্ভুক্ত করবেন না। এটি ফাংশন সংজ্ঞাটির অংশ নয়, এটি ফাংশনে একটি কল কারণ প্রদত্ত উদাহরণটি একটি স্বতন্ত্র স্ক্রিপ্ট হিসাবে ব্যবহারের জন্য intended
বেন্ডিন

26
svn log --diff [path_to_file]ঠিক এইভাবে কাজ করে! stackoverflow.com/a/24938573/3185510
ওয়েবস্টার

143

আপনি যা বর্ণনা করেছেন তার থেকে কিছুটা পৃথক, তবে আমি মনে করি এটি সম্ভবত আপনার যা প্রয়োজন তা হতে পারে:

svn blame filename

এটি প্রতিবেদনের সময় এবং লেখক দ্বারা উপস্থাপিত প্রতিটি লাইনের সাথে ফাইলটি মুদ্রণ করবে যা সর্বশেষে এটি পরিবর্তন করেছে।


4
ওহ এই দুর্দান্ত! বছরের পর বছর ধরে এসভিএন ব্যবহার করা হয়েছে এবং এটি সম্পর্কে কখনই জানত না: ও
হ্যাঁ ব্যারি

4
টাইমস্ট্যাম্পটি দেখতে আপনার ভার্বোস / -v বিকল্পের প্রয়োজন হতে পারে (আমি আমার ডিফল্ট এসএনএন 1.7.9 তৈরি করতে পারি)।
ওয়েস্টন সি

আমার অধ্যাপক এসএনএন-তে প্রাথমিক দোষ প্লাগইন লিখেছিলেন। আমি এখনও এই তাকান ছিল। তিনি এই কার্যভারটি সম্পূর্ণরূপে একটি স্ব পূরণ করছেন। : পি
জোসেফ ডেইলি

93

আপনি যদি কোড পরিবর্তন সহ কোনও ফাইলের পুরো ইতিহাসটি দেখতে চান:

svn log --diff [path_to_file] > log.txt

3
আমি জানি না - - ডিফ বিকল্পটি কখন যুক্ত হয়েছে তবে এটি এসএনএন 1.8.10 এর সাথে কাজ করে, তাই বাশ স্ক্রিপ্টের দরকার নেই
গুইলিউম গ্রস

1
আমি মনে করি, এস.এন.এন. 1.7.4 বিকল্পটি চালু করেছে --diffকারণ এটির বিকল্পগুলির জন্য পরীক্ষা রয়েছে যেখানে 1.7.3 এর কোনওটি নেই - subversion/tests/cmdline/log_tests.py
বৈধ

কেবলমাত্র একটি ছোট নোট: ইতিহাসের দৈর্ঘ্যের উপর নির্ভর করে লগ.এসটিএসটি ফাইল সম্পূর্ণরূপে রেন্ডার হওয়ার আগে এটি বেশ কিছুটা সময় নিতে পারে (যদিও তা অবিলম্বে পাঠযোগ্য হবে)।
ইভান ডার্স্ট

1
কীভাবে একজন এটি সাম্প্রতিক এক্স সংশোধনগুলির মধ্যে সীমাবদ্ধ করে?
এনিগমা

@ এনিগমা: --limit <number>বিকল্প সহ with ভালো লেগেছে:svn log --diff --limit 5 [path_to_file]
রিড

37

আপনি git-svnগিট সংগ্রহস্থলটিতে সংগ্রহস্থলটি আমদানি করতে ব্যবহার করতে পারেন , তারপরে ব্যবহার করুন git log -p filename। এটি ফাইলের জন্য প্রতিটি লগ এন্ট্রি দেখায় যার পরে এটি সম্পর্কিত ডিফ হয়।


27
গিট ইনস্টল করুন, গিট সংগ্রহস্থল তৈরি করুন, গিট কমান্ড ব্যবহার করবেন? প্রশ্ন ট্যাগ করা হয়েছিল এবং সাবভারশন সম্পর্কে জিজ্ঞাসা করা হয়েছিল।
কেন সৌম্য

21
আমি গিট-এসএনএন সহ সাবভার্সন ক্লায়েন্ট হিসাবে গিট ব্যবহার করি। সাবভার্সন সংগ্রহস্থলের বিরুদ্ধে লগ + ডিফারেশন অপারেশনটি এইভাবেই করব। সংগ্রহশালা দেখার জন্য গিটের কিছু সত্যিকারের দুর্দান্ত সরঞ্জাম রয়েছে, এটি এ জাতীয় কোনও বিদেশী ধারণা নয়।
গ্রেগ হিউগিল

10
সর্বোপরি কারো (যথাযথভাবে) একটি দুর্দান্ত স্ক্রিপ্ট লেখার জন্য অভিনন্দন - এসভিএন-তে উপস্থিত না থাকা কার্যকারিতা সরবরাহ করার জন্য। গিটটি স্থানীয় বলে আপনি যদি না চাপেন তবে এই সরঞ্জামটি আপনি কল করতে পারেন, জিনিসগুলি সম্পর্কে সমস্ত বিচলিত হওয়ার দরকার নেই।
অ্যাডাম টলি

এটি কেবলমাত্র একমাত্র উত্তর যা আপনাকে ফাইলের ইতিহাস দেখতে একটি GUI (পছন্দসই) ব্যবহার করতে দেয়। অন্যান্য উত্তরগুলিও সর্বশেষ এক্স সংশোধনীর (কীভাবে সম্ভব?) সীমাবদ্ধ রাখার ব্যাখ্যা দেয় নি, যা গিটারে সহজ। git log X..Y -o filename
TamaMcGlinn

21

শুরু করা

svn log -q file | grep '^r' | cut -f1 -d' '

এটি আপনাকে পুনর্বিবেচনার একটি তালিকা পাবে যেখানে ফাইলটি পরিবর্তন হয়েছে, যা আপনি বার বার কল করতে স্ক্রিপ্টে ব্যবহার করতে পারেন svn diff


4
বা ... চালিয়ে যান! svn log -q some_file.xxx | grep ^r | awk '{print $1}' | sed -e 's/^r//' | xargs -i svn diff -rHEAD:{} some_file.xxx > ~/file_history.txtসুন্দর ছোট ওয়ান-লাইনার (awk কাট হিসাবে একই কাজ করে)
কাসাপো

8

অদ্ভুতভাবে নাম করা "দোষ" কমান্ড এটি করে। আপনি যদি কচ্ছপ ব্যবহার করেন তবে এটি আপনাকে "রিভিশন থেকে" ডায়ালগ দেয়, তারপরে একটি সংশোধন নম্বর এবং তার পাশের লেখকের লাইনের সূচক দ্বারা একটি লাইনের সাথে একটি ফাইল তালিকাবদ্ধ করে।

আপনি যদি পুনর্বিবেচনা তথ্যটিতে ডান ক্লিক করেন তবে আপনি একটি "লগ দেখান" ডায়ালগ আনতে পারেন যা চেকইনের অংশ ছিল এমন অন্যান্য ফাইলগুলির সাথে পুরো চেকইন তথ্য দেয়।


1
এটি খুব দরকারী, তবে ওপি যা খুঁজছিল তা নয়, যা কেবল ফাইলের theতিহাসিক অবদান নয়, ফাইলটির সম্পূর্ণ ইতিহাস। নির্দিষ্ট কোডটি কেন সরানো বা পরিবর্তন করা হয়েছে এবং কখন, তা নির্ধারণ করার জন্য পিছনে তাকানোর সময় এই সম্পূর্ণ ইতিহাসটি কার্যকর।
অ্যাডাম টলি

বিপরীতে, নামটি বেশ সঠিক। এটি আপনাকে বলে যে কোনও নির্দিষ্ট কোডটির (ক্রপ্পি / বগি / আপত্তিহীন) দায়বদ্ধ করার জন্য।
আইভান_পোজদেদেভ

কমান্ডের সুস্পষ্ট নাম "দোষ" না দিয়ে "ক্রেডিট" হলে কি ভাল হত? :)
নিক

1
@ নিক এসএনএন প্রশংসা হ'ল এসএনএন দোষের একটি উপনাম, এটি কেমন অনুভব করে তার উপর নির্ভর করে।
স্টেফগোসেলিন

@ স্টেফগোসেলিন - এই নোটের জন্য ধন্যবাদ। আমি একটি পছন্দ আছে জানতে পেরে আনন্দিত! :)
নিক

3

যতদূর আমি জানি যে এটি সম্পাদন করার জন্য এসএনএন কমান্ডে কোনও বিল্ট নেই। সমস্ত ভিন্নতা তৈরি করতে আপনাকে বিভিন্ন কমান্ড চালাতে একটি স্ক্রিপ্ট লিখতে হবে। একটি সহজ পদ্ধতির হ'ল যদি কোনও বিকল্প হয় তবে জিইউআই এসএনএন ক্লায়েন্ট ব্যবহার করা। তাদের মধ্যে অনেকগুলি যেমন- Eclipse এর জন্য সাবস্ট্রিভ প্লাগইন কোনও ফাইলের ইতিহাসের তালিকা তৈরি করার পাশাপাশি আপনাকে প্রতিটি পুনর্বিবেচনার ভিন্নতা দেখতে দেয়।


3

ধন্যবাদ, বেনডিন আমি আপনার সমাধান খুব পছন্দ করি।

আমি প্রথমে সাম্প্রতিক পরিবর্তনগুলি দেখিয়ে বিপরীত ক্রমে কাজ করে এটি পরিবর্তন করেছি। দীর্ঘস্থায়ী কোড সহ যা বেশ কয়েক বছর ধরে বজায় রাখা গুরুত্বপূর্ণ। আমি সাধারণত এটি আরও পাইপ।

svnhistory elements.py |more

আমি সাজানো -r যোগ। আমি কল্পনা সরিয়েছি। 'প্রথম রেকর্ড' জন্য পরিচালনা। এটি হ'ল এটি সর্বশেষ এন্ট্রিতে ত্রুটিযুক্ত হবে কারণ এর সাথে আলাদা করার মতো কিছুই নেই। যদিও আমি এর সাথেই থাকি কারণ আমি কখনই এখান থেকে নামি না।

#!/bin/bash                                                                    

# history_of_file                                                              
#                                                                              
# Bendin on Stack Overflow: http://stackoverflow.com/questions/282802          
#   Outputs the full history of a given file as a sequence of                  
#   logentry/diff pairs.  The first revision of the file is emitted as         
#   full text since there's not previous version to compare it to.             
#                                                                              
# Dlink                                                                        
#   Made to work in reverse order                                              

function history_of_file() {
    url=$1 # current url of file                                               
    svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -nr | {
        while read r
    do
            echo
            svn log -r$r $url@HEAD
            svn diff -c$r $url@HEAD
            echo
    done
    }
}

history_of_file $1

0

আমি এই বিষয়টি গবেষণা করার সময় বেশ কয়েকটি আংশিক উত্তর দেখেছি seen এটিই আমার পক্ষে কাজ করেছে এবং আশা করি এটি অন্যকে সহায়তা করে। এই কমান্ডটি কমান্ড লাইনে আউটপুট প্রদর্শন করবে, যা সংশোধন নম্বর, লেখক, পুনর্বিবেচনার টাইমস্ট্যাম্প এবং করা পরিবর্তনগুলি দেখায়:

svn blame -v <filename>

আপনার অনুসন্ধানকে আরও সহজ করার জন্য, আপনি কোনও ফাইলে আউটপুট লিখতে পারেন এবং আপনি যা খুঁজছেন তা গ্রেপ করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.