পারফফোর্সে সিঙ্ক করা শেষ পরিবর্তন তালিকাটি নির্ধারণ করা


117

একটি প্রশ্ন যা মাঝেমধ্যে উত্থাপিত হয় তা হল আপনি সর্বশেষে পারফোর্সে সিঙ্ক করেছেন এমন পরিবর্তন তালিকা নির্ধারণের সেরা উপায়। স্বয়ংক্রিয়ভাবে বিল্ড সিস্টেমের মাধ্যমে পুনর্বিবেচনার তথ্যটিতে পরিবর্তন তালিকাটি ইনজেক্ট করার মতো জিনিসের জন্য এটি প্রায়শই প্রয়োজন।


p4 changes | head -1এই সমাধানগুলির বেশিরভাগের চেয়ে সহজ বলে মনে হচ্ছে।
শ্রীধর সারনোবাত

উত্তর:


91

আমি স্বয়ংক্রিয় বিল্ড সিস্টেমগুলির জন্য বিপরীতে প্রস্তাব দিচ্ছি: আপনার প্রথমে সার্ভার থেকে সর্বশেষতম চেঞ্জলিস্টটি ব্যবহার করে নেওয়া উচিত:

p4 changes -s submitted -m1

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

p4 changes -m1 @clientname

তারা কয়েকটি গোছা নোট করে:

  • আপনি কেবল কর্মক্ষেত্র থেকে প্রশ্নে কিছু জমা না দিলে এটি কেবলমাত্র কাজ করে।
  • এটিও সম্ভব যে কোনও ক্লায়েন্ট ওয়ার্কস্পেস কোনও নির্দিষ্ট চেঞ্জলিস্টে সিঙ্ক হয় না।

এবং একটি অতিরিক্ত গোচা আছে যা তারা উল্লেখ করে না:

  • যদি কর্মক্ষেত্র থেকে সিঙ্কটি কঠোরভাবে মুছে ফেলা ফাইলগুলির মধ্যে সর্বাধিক পরিবর্তন লিস্ট হয় তবে পরবর্তী সর্বোচ্চ পরিবর্তন তালিকাটি (যদি তা না হয় তবে কঠোরভাবে মুছে ফেলা ফাইলগুলি বাদ দেওয়া হবে) রিপোর্ট করা হবে।

যদি আপনাকে প্রথমে সিঙ্ক করতে হবে এবং পরে রেকর্ড করতে হবে তবে পারফোর্স নীচের কমান্ডটি চালানোর পরামর্শ দিচ্ছেন আপনি উপরের গোটাচসের দ্বারা কিছুটা হলেও বিচলিত হয়েছেন কিনা তা নির্ধারণ করার জন্য; এটিতে বোঝানো উচিত যে কোনও কিছু সিঙ্ক করা বা অপসারণ করা হয়নি:

p4 sync -n @changelist_number

কেন এটি "যদি আপনি কর্মক্ষেত্র থেকে প্রশ্নে কিছু জমা না দিয়ে থাকেন তবে এটি কাজ করে?"
gdw2

আপনি যদি কোনও পরিবর্তন জমা দেন, 'p4 পরিবর্তন -s জমা দেওয়া -m1' আপনার পরিবর্তন তালিকাটি ফিরিয়ে দেবে। উদাহরণস্বরূপ, আপনি চেঞ্জলিস্ট 5-এ সিঙ্ক করুন, কয়েক ঘন্টা অপেক্ষা করুন এবং তারপরে পরিবর্তন তালিকাটি 10 ​​জমা দিন The উপরের পরিবর্তনগুলি কমান্ডটি ফিরে আসবে 10.
রিন

লিঙ্কটি মারা গেছে, এই নিবন্ধটি ছিল? answers.perforce.com/articles/KB/3458/
user31389

মনে রাখবেন যে আপনি তার #haveপরিবর্তে ব্যবহার করতে পারেন @clientnameযা আপনাকে আপনার ক্লায়েন্টের কর্মক্ষেত্রের নামটি সন্ধান থেকে বাঁচায়।
yoyo

29

প্রযুক্তিগত স্নিপেটগুলি রাখার জন্য জ্যাকের স্ট্যাকওভারফ্লোটিকে একটি জায়গা হিসাবে ব্যবহার করার পরামর্শের সাথে সামঞ্জস্য রেখে আমি নিজেই এর উত্তর দিতে ....

কমান্ড লাইনটি ব্যবহার করুন:

p4 changes -m1 @<clientname>

এবং কেবল আপনার ক্লায়েন্টের নামটির সাথে প্রতিস্থাপন করুন। এটি ফর্মের আউটপুট উত্পাদন করবে:

Change 12345 on 2008/08/21 by joebloggs@mainline-client '....top line of description...'

চেঞ্জলিস্ট নম্বরটি বের করতে সহজে পার্স করা হয়।


আমি পাচ্ছি: অনুরোধটি খুব বড় (1500000 এরও বেশি); 'পি 4 সহায়তা সর্বাধিক প্রভাব' দেখুন।
ব্যবহারকারী 674669

@ ইউজার 674669: অপশন-এম 1 ব্যবহার করুন যা কেবলমাত্র সর্বশেষ (1) পরিবর্তনের তালিকার
প্রত্যাবর্তন করে

এটি সর্বশেষ জমা দেওয়া পরিবর্তন তালিকার তথ্য দেয় , সর্বশেষ সিঙ্ক হওয়া চেঞ্জলিস্ট নয়, অপটিটি যা জানতে চেয়েছিল।
Andreas

@ মার্শ আমি মনে করি এটি আসলে ক্লায়েন্ট ওয়ার্কস্পেসের নাম, যা সেট না করা থাকলে কম্পিউটার নামের সাথে ডিফল্ট। এখানে দেখুন: P4CLIENT
আন্দ্রেয়াস হাফবার্গ

15

"P4 ফাইল" কমান্ডের আউটপুটটিতে আপনি সর্বাধিক পরিবর্তন সংখ্যাটি সন্ধান করার চেষ্টা করতে পারেন। যদিও ওয়ার্কিং ডিরেক্টরিটিতে পোস্ট-সিঙ্ক কমিটগুলি থাকা উচিত নয়। এটি তুলনায় একটি শিশুর ভাল

p4 changes -m1 "./...#have"

পরেরটি সার্ভারে চলছে বলে মনে হচ্ছে এবং "ম্যাক্সারসাল্টস" সীমাবদ্ধতার কারণে বড় উত্স গাছগুলিতে ব্যর্থ হতে পারে।

$ p4 changes -m1 "./...#have"
Request too large (over 850000); see 'p4 help maxresults'.

$ p4 -G files "./...#have" | python c:/cygwin/usr/local/bin/p4lastchange.py
Files: 266948
2427657

যেখানে জেটিগল্ডস্টোন , কোডাক ইনফরমেশন নেটওয়ার্ক / অফটো, এপ্রিল 15, 2005- এর কমান্ড লাইন উপস্থাপনা থেকে P4G.py ব্যবহার করা থেকে কোডের উপর ভিত্তি করে p4last بدل.py রয়েছে।

#! /usr/bin/env python
import sys, os, marshal

if os.name == "nt":
    # Disable newline translation in Windows.  Other operating systems do not
    # translate file contents.
    import msvcrt
    msvcrt.setmode( sys.stdin.fileno(), os.O_BINARY )

lastcl = 0
num = 0
try:
    while 1:
        dict = marshal.load(sys.stdin)
        num = num + 1
        for key in dict.keys():
            # print "%s: %s" % (key,dict[key])
            if key == "change":
                cl = int(dict[key])
                if cl > lastcl:
                    lastcl = cl
except EOFError:
    pass
print "Files: %s" % num
print lastcl

9

p4 changes -m1 @clientname আমার ক্লায়েন্টের পক্ষে এটি করার জন্য "প্রস্তাবিত" উপায়টি 10 ​​মিনিট সময় নেয়

এটি আমি ব্যবহার করি:

p4 cstat ...#have | grep change | awk '$3 > x { x = $3 };END { print x }'

একই ক্লায়েন্টের জন্য 2.1 সেকেন্ড সময় লাগে


ক্লায়েন্টের নাম কী? আমি এই তথ্যটি কীভাবে খুঁজে পাব?
মার্শ

1
@ মার্স ক্লায়েন্ট (বা কর্মক্ষেত্র) নামটি এমন পারফোর্স অবজেক্টের নাম যা সার্ভার ডিপো থেকে আপনার স্থানীয় ফাইল সিস্টেমে ম্যাপিং রাখে
gsf

2
এই উত্তরটিকে সমর্থন করা, যেহেতু এটি "এমনটি করবেন না" বলার চেয়ে প্রকৃত প্রশ্নের উত্তর দেয় (যা একটি বৈধ পয়েন্ট, তবে প্রশ্নের উত্তর দেয় না)।
সাম হোচেভার

1
p4 changes -m1 @clientnameঅবিরাম চালনা ... p4 cstat ...#have | grep change | awk '$3 > x { x = $3 };END { print x }'সত্যিই কাজ! ধন্যবাদ!
সিমো

@gsf - ধন্যবাদ, আমার লিনাক্স বাক্সে এটি চেষ্টা করে দেখুন!

9

আপনি যদি পি 4 ভি ব্যবহার করেন তবে আপনি এটি গ্রাফিকভাবে করতে পারেন:

  • ড্যাশবোর্ড ট্যাবে (দেখুন-> ড্যাশবোর্ড) একটি ফোল্ডার চয়ন করুন এবং আপনি সেই তালিকাভুক্তির তালিকা দেখতে পাবেন যা ফোল্ডারটি এখনও আপডেট হয়নি। সর্বনিম্ন সংখ্যাটি (সর্বোচ্চ সারিতে) নোট করুন।
  • ওয়ার্কস্পেস ট্রিতে আপনি ড্যাশবোর্ডে আগের মতো একই ফোল্ডারটি নির্বাচন করেছেন তা নিশ্চিত করুন। তারপরে ইতিহাস ট্যাবে যান (দেখুন-> ইতিহাস) এবং পূর্বে উল্লিখিত নম্বরটিতে স্ক্রোল করুন। এই সংখ্যার ঠিক নীচে নম্বরটি হ'ল আপনার বর্তমান পরিবর্তন তালিকার সংখ্যা।

8

আপনি cstat কমান্ডটি ব্যবহার করতে পারেন:

p4 সহায়তা সিস্টেট

cstat -- Dump change/sync status for current client

p4 cstat [files...]

Lists changes that are needed, had or partially synced in the current
client. The output is returned in tagged format, similar to the fstat
command.

The fields that cstat displays are:

    change   changelist number
    status   'have', 'need' or 'partial'

5

একটি গুরুতর বিল্ডের জন্য (যা পরীক্ষার জন্য প্রস্তুত করা হচ্ছে), স্পষ্টভাবে কাঙ্ক্ষিত লেবেল বা চেঞ্জলিস্ট নম্বর উল্লেখ করুন, লেবেলে সিঙ্ক করুন এবং বিল্ড আর্টফিটগুলিতে এটি এম্বেড করুন।

যদি একটি পরিবর্তন তালিকা (বা লেবেল) দেওয়া না হয় p4 counter changeতবে বর্তমান পরিবর্তন নম্বর পেতে ব্যবহার করুন এবং এটি রেকর্ড করুন। তবে আপনাকে এখনও সেই পরিবর্তন নম্বরটি ব্যবহার করে সমস্ত কিছু সিঙ্ক করতে হবে।

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


মন্তব্য সম্পর্কে: হ্যাঁ, আমার উত্তরটি QA কে দেওয়ার জন্য একটি বিল্ড প্রস্তুতকারী কনফিগারেশন পরিচালকদের দ্বারা ব্যবহারের উদ্দেশ্যে। আমাদের বিকাশকারীরা সাধারণত কোনও বিল্ডের অংশ হিসাবে সিঙ্ক করে না; তারা জমা দেওয়ার আগে একটি বিল্ড করে। যাতে তারা নিশ্চিত করতে পারেন যে তাদের পরিবর্তনগুলি বিল্ড বা পরীক্ষাগুলি ভঙ্গ করে না। সেই প্রসঙ্গে, আমরা একটি সংগ্রহস্থল লেবেল এম্বেড করতে বিরত করি না।

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


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

3

পুরো ডিপোর জন্য (কেবলমাত্র আপনার কর্মক্ষেত্র / ক্লায়েন্ট নয়)

p4 counter change

কাজটি করে, কেবল শেষ পরিবর্তন তালিকাটি বলছে।


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

2

আমি এখনও অবধি সবচেয়ে ভাল খুঁজে পেয়েছি আপনি যেই পরিবর্তন তালিকা তৈরি করতে চান তার সাথে আপনার সিঙ্ক করুন এবং তারপরে পরিবর্তনগুলি -m1 //... ব্যবহার করুন বর্তমান স্থানীয় চেঞ্জলিস্ট (পুনর্বিবেচনা) পেতে ve

পি 4 সিঙ্ক @ CHANGELIST_NUM p4 পরিবর্তন -এম 1 //...#have | awk '{মুদ্রণ $ 2}'

আপনাকে পরিবর্তন তালিকাটি দেয় যা আপনি যেখানে খুশি ব্যবহার করতে পারেন। আমি বর্তমানে পি 4 পরিবর্তনগুলি-এম 1 //...## এর চেয়ে সহজতর উপায় খুঁজছি।


0

আপনার প্রয়োজনীয় উত্তরটি আপনি পেয়েছেন কিনা তা সম্পর্কে আমি নিশ্চিত নই তবে আমারও একই সমস্যা ছিল। লক্ষ্যটি ছিল আমাদের লগারে প্রকল্পের নির্দিষ্ট সংস্করণটি লেখা। সমস্যাটি হ'ল আমরা নিজের মেকফাইল তৈরি করার সময় সামগ্রিক বিল্ড সিস্টেমটি আমাদের কনফিগারেশন ম্যানেজমেন্ট দ্বারা নিয়ন্ত্রিত হয়। এর অর্থ হ'ল যে সমস্ত সমাধান যা "কিছুতে সিঙ্ক করে তারপরে কিছু করুন" বলছে সত্যই কাজ করে না এবং আমি যখনই প্রতিশ্রুতি করি তখন নিজেই সংস্করণটি পরিবর্তন করতে চাই না (ত্রুটির একটি নিশ্চিত উত্স)। সমাধান (যা আসলে উপরের কয়েকটি উত্তরে ইঙ্গিতযুক্ত) এটি হ'ল: আমাদের মেকফিল-এ, আমি পি 4 পরিবর্তনগুলি করি - এম 1 "./...##" এইটির ফলাফল ইউজার @ ক্লায়েন্ট দ্বারা তারিখের পরিবর্তন_নম্বরের পরিবর্তন বার্তা ' আমি কেবল একটি স্ট্রিংয়ে বার্তাটি তৈরি করি যা লগার দ্বারা মুদ্রিত হয় (পরিবর্তনের নম্বরটি গুরুত্বপূর্ণ উপাদান তবে অন্যটি দ্রুত সিদ্ধান্ত নিতে কার্যকর হয় যে কোনও নির্দিষ্ট সংস্করণে এমন পরিবর্তন রয়েছে যা আপনি জানেন যে আপনি চেক করতে না গিয়ে নিজেকে তৈরি করেছেন)। আশাকরি এটা সাহায্য করবে.

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