সাবভার্সন ইতিহাস অনুসন্ধান (সম্পূর্ণ পাঠ্য)


135

সমস্ত ইতিহাস সহ একটি সাবভার্সন সংগ্রহশালাটির একটি সম্পূর্ণ পাঠ্য অনুসন্ধান করার কোনও উপায় আছে কি?

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

2016-04-15 সম্পাদনা করুন: দয়া করে নোট করুন যে এখানে "সম্পূর্ণ পাঠ্য অনুসন্ধান" শব্দের দ্বারা যা জিজ্ঞাসা করা হয়েছে তা হল প্রতিশ্রুতিবদ্ধ ইতিহাসের প্রকৃত ভিন্নতাগুলি অনুসন্ধান করা, এবং ফাইলের নাম এবং / বা বার্তা দেওয়ার জন্য নয় । আমি এটিকে নির্দেশ করছি কারণ উপরের লেখকের ফ্রেসিংগুলি এটি খুব ভালভাবে প্রতিফলিত হয় না - যেহেতু তাঁর উদাহরণে তিনি কেবল একটি ফাইলের নাম এবং / অথবা প্রতিশ্রুতিবদ্ধ বার্তা সন্ধান করছেন। সুতরাং svn logউত্তর এবং মন্তব্য অনেক ।


6
আপাচি সাবভার্শন 1.8 কমান্ডের --searchপক্ষে যুক্তি গ্রহণ করে svn log। আমার উত্তর দেখার stackoverflow.com/a/17473516/761095
bahrep

3
svn log --search@rjmunro দ্বারা প্রয়োজনীয় হিসাবে একটি সম্পূর্ণ পাঠ্য অনুসন্ধান সম্পাদন করে না, তবে কেবল লেখক, তারিখ, লগ বার্তা এবং পরিবর্তিত পাথের তালিকা অনুসন্ধান করে।
zb226

উত্তর:


77
git svn clone <svn url>
git log -G<some regex>

1
ভাল যুক্তি. গিটক জিইউআই এই ধরণের অনুসন্ধান খুব ভাল করে এবং কোনও এসএনএন সংগ্রহস্থল অ্যাক্সেস করার জন্য গিট এসএনএন সরঞ্জামগুলি ব্যবহার করা সহজ। স্বীকৃতিস্বরূপ, আমি এই প্রশ্নটি জিজ্ঞাসা করার সময় থেকেই গিট ব্যবহারে সম্পূর্ণ সরে এসেছি, সুতরাং এই উত্তরটি গ্রহণ করা আমার কাছে কিছুটা নির্দিষ্ট হতে পারে।
rjmunro

4
পরামর্শ দিন, আপনার সংগ্রহস্থলের আকারের উপর নির্ভর করে এটি কিছুটা সময় নিতে পারে। আমার জন্য এটি এক ঘন্টারও বেশি সময় নিয়েছে।
ব্যবহারকারী 247702

20
একটি বড় এসভিএন সংগ্রহস্থলকে জিআইটিতে রূপান্তর করা আমি প্রায়শই সম্ভাব্য নয় বা অনেক বেশি সময় নিতে পারি বলে আমি এই সমাধানটিকে অগ্রাহ্য করেছি। এটি সি # ল্যাঙ্গুয়েজ কনস্ট্রাক্ট সম্পর্কে কোনও প্রশ্ন থাকার পরে জাভা সুপারিশ করার মতো।
অক্সি

3
এই কমান্ডের জন্য আপনাকে অতিরিক্ত প্যাকেজ ইনস্টল করতে হবে। উবুন্টু, আপনি করতে চান apt-get install git-svn

5
"এসএনএন লগ --verbose --diff | গ্রেপ ..." গিট ব্যবহার না করে আপনার প্রায় একই কার্যকারিতাটি কিনে না?
লাইট

41

svn logঅ্যাপাচি সাবভার্সিয়নে 1.8 একটি নতুন --searchবিকল্পকে সমর্থন করে । সুতরাং আপনি 3 য় পক্ষের সরঞ্জাম এবং স্ক্রিপ্ট ব্যবহার না করে সাবভার্সন সংগ্রহের ইতিহাস লগ বার্তাগুলি অনুসন্ধান করতে পারেন।

svn log --search লেখক, তারিখ, লগ বার্তা পাঠ্য এবং পরিবর্তিত পাথের তালিকা অনুসন্ধান করে।

এসভিএনবুকsvn log দেখুন | কমান্ড-লাইন রেফারেন্স


7
সহজ, কিন্তু পূর্ণ পাঠ্য অনুসন্ধান নয়। আমি গিট-
এসএনএন

4
এমন নয় যে এই মুহূর্তে গুগলকোডে এসএনএন রেপোস এখনও এসএনএন ১.6 এ চলছে ... দেখুন: Code.google.com/p/support/wiki/… ? তবে, আপনার ক্লায়েন্টকে ১,৮ এ আপডেট করা (এবং কোনও চেক আউট রেপোর এসএনএন আপগ্রেড) আপনাকে
রেপোতে এসএনএন

ওয়ার্কিং কপির সমস্ত আপডেট প্রয়োজন তবে এই কমান্ডটি সংশোধন নম্বর, পরিবর্তিত ফাইল এবং মন্তব্য সহ পুরো পরিবর্তনকে তালিকাভুক্ত করে। এটি কীভাবে পূর্ণ-পাঠ্য নয়?
বার্নহার্ড ডাবলার

24

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


SvnQuery এখনও বজায় থাকলে এটি দুর্দান্ত হবে তবে দুঃখজনকভাবে এটি মারা গিয়েছে এবং এখন এটি ঠিক কাজ করে না।
ড্যান অ্যাটকিনসন


21

আমি একটি ছোট শেলসক্রিপ্ট ব্যবহার করছি, তবে এটি কেবল একটি একক ফাইলের জন্য কাজ করে। আপনি অবশ্যই কোর্সটি আরও ফাইল অন্তর্ভুক্ত করতে এটির সাথে একত্রিত করতে পারেন।

#!/bin/bash
for REV in `svn log $1 | grep ^r[0-9] | awk '{print $1}'`; do 
  svn cat $1 -r $REV | grep -q $2
  if [ $? -eq 0 ]; then 
    echo "$REV"
  fi 
done

আপনি যদি সত্যিই সব কিছু অনুসন্ধান করতে চান তবে svnadmin dumpকমান্ডটি ব্যবহার করুন এবং এর মাধ্যমে গ্রেপ করুন।


আমাকে এর সাথে সংশোধন নম্বরগুলি থেকে "আর" মুছে ফেলতে হয়েছিল: awk '{মুদ্রণ সাবস্ট্রাস্টার ($ 1,2, দৈর্ঘ্য ($ 1))}' এবং গ্রেপ "-কিউ" বিকল্পটি মুছে ফেলতে, ম্যাচগুলি প্রকৃতপক্ষে দেখানোর জন্য।
হুগো

স্ট্রিং myDump.txt |
গ্রেপ

2
এবং এই কারণেই আমরা গিটকে আলিঙ্গন করি।
সীমিত প্রায়শ্চিত্ত


13

আমি এটি করতে সবচেয়ে ভাল উপায়টি কম সহ:

svn লগ --verbose | কম

কম একবার আউটপুট সঙ্গে আসে, আপনি /ভিআইএম মত অনুসন্ধানে আঘাত করতে পারেন ।

সম্পাদনা:

লেখকের মতে, তিনি কেবলমাত্র বার্তা এবং ফাইলের নামের চেয়ে আরও অনুসন্ধান করতে চান। এই ক্ষেত্রে আপনাকে ঘেট্টো-হ্যাক করার দরকার হবে এর সাথে এমন কিছু সহ:

svn diff -r0:HEAD | less

আপনি অনুসন্ধান করতে grepঅন্য কোনও বিকল্প বা অন্য কিছু করতে পারেন। আপনি যদি এটি সংগ্রহস্থলের উপ-ডিরেক্টরিতে ব্যবহার করতে চান তবে আপনাকে svn logসেই ডিরেক্টরিটি যে পুনর্বিবেচনায় ছিল তার প্রথমটি সংশোধন করতে হবে এবং পরিবর্তে সেই সংশোধনটি ব্যবহার করতে হবে 0


5
এটি সম্পূর্ণ পাঠ্য অনুসন্ধান নয়, এটি লগ এবং ফাইলের নাম অনুসন্ধান করছে।
rjmunro

যদি এটি হয় তবে আপনার আরও অভিব্যক্তিপূর্ণ কমিট লগগুলি ব্যবহার করতে হবে। আপনি যদি সংশোধনগুলির মধ্যে পার্থক্যটি গ্রেপ করতে চান তবে এটি পুরো মোমের অন্যান্য বল। এবং আমি ব্যক্তিগতভাবে এটি করার কোনও উপায় জানি না।
জ্যাক এম 18

> এসএনএন ডিফ-আর0: হেড> লগ> কম লগ উইন্ডোতে আমার পছন্দ। ধন্যবাদ
কিংওলেগ

9

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


আমি বেশ কয়েক মাস ধরে ওপেনগ্রোক ব্যবহার করে যাচ্ছি, এটি কাঁপছে।
মৌরিসিও শেফার

7
svn log -v [repository] > somefile.log

ডিফের জন্য আপনি --diffবিকল্পটি ব্যবহার করতে পারেন

svn log -v --diff [repository] > somefile.log

তারপরে ভিম বা ন্যানো বা আপনি যা পছন্দ করেন তা ব্যবহার করুন এবং আপনি যা সন্ধান করছেন তা অনুসন্ধান করুন। আপনি এটি খুব দ্রুত খুঁজে পাবেন।

এটি কোনও অভিনব স্ক্রিপ্ট বা স্বয়ংক্রিয় কিছু নয়। কিন্তু এটি কাজ করে.


আফিক্স, এটি প্রতিশ্রুতিবদ্ধ বার্তাগুলি সন্ধান করবে, আসল ভিন্নতাগুলি নয়।
rjmunro

তারপরে এসএনএন লগ-ভি --ডিফ [সংগ্রহশালা]> somefile.log ব্যবহার করুন
JREN

6

নিখরচায় থাকাকালীন আপনি আটলাসিয়ান থেকে ফিশেতে একবার দেখে নিতে পারেন, একই ভাগে যা আপনাকে জিরাকে নিয়ে আসে। এটি এসভিএন এর বিপরীতে আরও অনেক দরকারী বৈশিষ্ট্য সহ সম্পূর্ণ পাঠ্য অনুসন্ধান করে।

http://www.atlassian.com/software/fisheye/


1
ফিশিয়ে খুব ভাল লাগছে। যেমনটি আপনি বলেছেন, নিখরচায় নয়, তবে <= 10 প্রতিশ্রুতিবদ্ধ লাইসেন্সটি কেবলমাত্র 10 ডলার / বছর।
জেসন এস

বর্তমানে, 5 জন ব্যবহারকারী 10 ডলার, তবে কেবল 10 জন ব্যবহারকারী এটি লাফিয়ে 1000 ডলারে চলেছেন!
মাওগ বলছেন মনিকা


4

আমি কেবল এই সমস্যার মধ্যে দৌড়েছি এবং

svnadmin dump <repo location> |grep -i <search term>

আমার জন্য কাজ করেছে। প্রথম ঘটনার সংশোধন ফিরিয়ে দিয়েছি এবং যে লাইনটি আমি সন্ধান করছি তার উদ্ধৃতি দিয়েছি।


1
কেবল স্থানীয়ভাবে কাজ করে এবং কোনও সংগ্রহস্থল বড় হলে প্রচুর সময় লাগবে।
বহরেপ

2

এটির সাথে আমার কোনও অভিজ্ঞতা নেই তবে সুপোএসই (ওপেন সোর্স, জাভায় লিখিত) হ'ল একটি সরঞ্জাম যা এটি ঠিক ডিজাইন করার জন্য তৈরি হয়েছিল।



1

আমি সাধারণত জ্যাক এম যা বলি তা করি (এসএনএন লগ --verbose ব্যবহার করুন) তবে আমি কম পরিবর্তে গ্রেপ করতে পাইপ করি ।


5
এটি সম্পূর্ণ পাঠ্য অনুসন্ধান নয়, এটি লগ এবং ফাইলের নাম অনুসন্ধান করছে।
rjmunro

আমি সাধারণত এটিই শেষ করি, তবে আমি পেয়েছি যে আপনার সাথে lessমন্তব্যটিতে কেবল রেখার পরিবর্তে সংশোধন, তারিখ ইত্যাদি দেখতে পাবেন। এটি সাধারণত আমি যাইহোক খুঁজছি।
জ্যাক এম।

1

এই সমস্যাটি সমাধান করার জন্য আমি এটি সাইগউইন বাশ স্ক্রিপ্ট হিসাবে লিখেছি।

তবে এটির জন্য অনুসন্ধান শব্দটি বর্তমানে ফাইল সিস্টেম ফাইলের মধ্যে থাকা দরকার। ফাইল সিস্টেমের গ্রেপের সাথে মেলে এমন সমস্ত ফাইলের জন্য, সেই ফাইলের জন্য সমস্ত এসএনএন ডিফের একটি গ্রেপ সম্পাদনা করা হয়। নিখুঁত নয়, তবে বেশিরভাগ ব্যবহারের জন্য যথেষ্ট ভাল হওয়া উচিত। আশাকরি এটা সাহায্য করবে.

, / Usr / local / bin / svngrep

#!/bin/bash
# Usage: svngrep $regex @grep_args

regex="$@"
pattern=`echo $regex | perl -p -e 's/--?\S+//g; s/^\\s+//;'` # strip --args
if [[ ! $regex ]]; then
    echo "Usage: svngrep \$regex @grep_args"
else 
    for file in `grep -irl --no-messages --exclude=\*.tmp --exclude=\.svn $regex ./`;     do 
        revs="`svnrevisions $file`";
        for rev in $revs; do
            diff=`svn diff $file -r$[rev-1]:$rev \
                 --diff-cmd /usr/bin/diff -x "-Ew -U5 --strip-trailing-cr" 2> /dev/null`
            context=`echo "$diff" \
                 | grep -i --color=none   -U5 "^\(+\|-\).*$pattern" \
                 | grep -i --color=always -U5             $pattern  \
                 | grep -v '^+++\|^---\|^===\|^Index: ' \
                 `
            if [[ $context ]]; then
                info=`echo "$diff" | grep '^+++\|^---'`
                log=`svn log $file -r$rev`
                #author=`svn info -r$rev | awk '/Last Changed Author:/ { print $4 }'`; 

                echo "========================================================================"
                echo "========================================================================"
                echo "$log"
                echo "$info"
                echo "$context"
                echo
            fi;
        done;
    done;
fi

, / Usr / local / bin / svnrevisions

#!/bin/sh
# Usage:  svnrevisions $file
# Output: list of fully numeric svn revisions (without the r), one per line

file="$@"
    svn log "$file" 2> /dev/null | awk '/^r[[:digit:]]+ \|/ { sub(/^r/,"",$1); print  $1 }'

চেষ্টা করার জন্য 'এ'! (কেবল গিট ব্যবহার করুন :))
সীমিত প্রায়শ্চিত্ত

-1

আপনি যদি কোন কোডটি নির্দিষ্ট রেখার জন্য কোন সংশোধনকে দায়বদ্ধ তা নির্ধারণের চেষ্টা করছেন, আপনি সম্ভবত খুঁজছেন:

svn blame

ক্রেডিট: মূল উত্তর


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