গিটারের মাধ্যমে পুনরায় নামকরণ করা ফাইলগুলির লগগুলি কীভাবে প্রদর্শিত হবে?


132

আমি গিটে তুলনামূলকভাবে নতুন, আমি আগে সাবভারশন ব্যবহার করেছি।

আমি লক্ষ্য করেছি যে বেশিরভাগ গ্রাফিকাল গিট ফ্রন্ট-এন্ডস এবং আইডিই প্লাগইনগুলি ফাইলটির নাম পরিবর্তন করে রাখা হয়েছে তবে কোনও ফাইলের ইতিহাস প্রদর্শন করতে সক্ষম হবে বলে মনে হয় না। আমি যখন ব্যবহার করি

git log --follow

কমান্ড লাইনে, আমি পুরো নামটি নতুন নাম জুড়ে দেখতে পারি।

লিনাস টরভাল্ডসের মতে - ফলো সুইচটি একটি "এসভিএন নুব" প্লিজ, গুরুতর গিট ব্যবহারকারীরা এটি ব্যবহার করেন না:

--ফোল একটি মোট হ্যাক, কেবল প্রাক্তন-এসভিএন ব্যবহারকারীদের সন্তুষ্ট করার উদ্দেশ্যে যারা পিতৃত্ব বা সুন্দর পুনর্বিবেচন গ্রাফের মতো জিনিস সম্পর্কে কখনও কিছুই জানত না।

এটি সম্পূর্ণ মৌলিক নয়, তবে "-ফলো" -র বর্তমান বাস্তবায়ন আসলেই অবিচ্ছেদ্য কিছু না হয়ে পুনর্বিবেচনার যুক্তিতে যুক্ত একটি দ্রুত প্রিপ্রোসেসিং জিনিস।

এটি আক্ষরিক অর্থে একটি "এসভিএন নুব" প্লিমার হিসাবে ডিজাইন করা হয়েছিল, "রিয়েল গিট কার্যকারিতা" জিনিস হিসাবে নয়। ধারণাটি হ'ল আপনি বড় আকারের চিত্রটির নাম পরিবর্তন করে এমন ভাবার (ভাঙা) মানসিকতা থেকে দূরে সরে যাবেন।

আমার প্রশ্ন : আপনার মধ্যে থাকা হার্ড গিট ব্যবহারকারীরা যখন কোনও ফাইলের নাম পরিবর্তন করা হয়েছিল তখন কীভাবে ইতিহাসের ইতিহাস পান? এটি করার 'আসল' উপায় কী?


17
@David হল: git mv oldfile newfileপারে না পুনঃনামকরণ রেকর্ড করার আদৌ - এটা শুধু একটি ফাইল মোছা এবং অন্য যোগ করার হিসাবে একই। গিট সত্যের পরে প্রতিটি প্রতিশ্রুতিতে গাছের অবস্থা থেকে নতুন নাম এবং অনুলিপিগুলি তৈরি করে।
লংগায়ার

20
@ ডেভিড হল: আপনি যদি গিটের বাইরের কোনও সরঞ্জাম (উদাহরণস্বরূপ /bin/mv oldfile newfile) দিয়ে ফাইলটির পুনরায় নামকরণ করেন তবে তা করেন git add newfile; git rm oldfileতবে ফলাফলটি এর থেকে পৃথক নয় git mv oldfile newfile
লংগায়ার

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

1
দ্রষ্টব্য: git log --followগিট ২.৯ (জুন
২০১

1
V2.15 হিসাবে, আপনি --color-movedযখন আপনি এটি পরীক্ষা করতে চাইতে পারেন diff
মাইকেল

উত্তর:


71

আমি মনে করি যে লিনাস পয়েন্টের পিছনে সাধারণ ড্রাইভটি হ'ল - এবং এটিকে এক চিমটি লবণের সাথে নিয়ে যান - হার্ড গিট ব্যবহারকারীরা কোনও "ফাইল" এর ইতিহাস সম্পর্কে কখনও চিন্তা করেন না। আপনি গিট সংগ্রহস্থলে সামগ্রী রেখেছেন কারণ সামগ্রিকভাবে সামগ্রীর অর্থবহ ইতিহাস রয়েছে।

একটি ফাইলের পুনর্নামকরণ পাথের মধ্যে চলার "বিষয়বস্তু" এর একটি বিশেষ বিশেষ কেস। আপনার একটি ফাংশন থাকতে পারে যা একটি গিট ব্যবহারকারী ফাংশনাল (উদাহরণস্বরূপ log -S) "পিক্যাক্স" দিয়ে ট্র্যাকডাউন করতে পারে এমন ফাইলগুলির মধ্যে চলে ।

অন্যান্য "পথ" পরিবর্তনগুলির মধ্যে ফাইলগুলির সংমিশ্রণ এবং বিভাজন অন্তর্ভুক্ত রয়েছে; গিটে প্রকৃতপক্ষে কোনও ফাইলের যত্ন নেই যে আপনি কোন ফাইলটির নাম পরিবর্তন করেছেন এবং কোনটি অনুলিপি করেছেন (বা নাম পরিবর্তন করেছেন এবং মুছে ফেলেছেন) এটি আপনার গাছের সম্পূর্ণ সামগ্রী ট্র্যাক করে।

গিট "সমগ্র গাছ" ভাবনাটিকে উত্সাহ দেয় যেখানে বহু সংস্করণ নিয়ন্ত্রণ ব্যবস্থা খুব ফাইল কেন্দ্রিক। এই কারণেই গিট "ফাইলের নামগুলি" বোঝায় তার চেয়ে বেশি বার "পাথ" বোঝায়।


হাই চার্লস, আপনার উত্তরের জন্য ধন্যবাদ। দেখে মনে হচ্ছে যে আমি এসভিএন ব্যবহার করেছি ঠিক তেমনই গিটও ব্যবহার করি। যদিও আমি বুঝতে পেরেছি যে গিটটি অন্যান্য সংস্করণ নিয়ন্ত্রণ সিস্টেমের তুলনায় খুব আলাদা, গিটের অনেকগুলি ধারণা আমার কাছে এখনও অদ্ভুত বলে মনে হয় ... আমি সম্ভবত যে গিট বইটি কিনেছি তা শেষ করা উচিত।
মাইক 13

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

11
গিট কি আসলে এগুলি ছাড়া কোনও সমাধান দেয় --follow?
গ্রিভেস

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

2
সুতরাং ... আমি যদি ফাইলটির পরিবর্তে "বিষয়বস্তু" সম্পর্কে যত্ন নেওয়ার সিদ্ধান্ত নিই, তবে এই ফাইলটিতে থাকা সামগ্রীর সাথে সম্পর্কিত প্রবন্ধগুলি কীভাবে মুদ্রণ করব? গিট যদি আমার জন্য বিভিন্ন ফাইল জুড়ে এটি ট্র্যাক করে এবং সমস্ত পরিবর্তনগুলির একটি লগের প্রতিবেদন করে তবে আমি আনন্দিত হব - আমি কীভাবে এটি পেতে পারি তা দেখছি না।
এড আভিস

36

আমার ঠিক একই সমস্যা রয়েছে যার মুখোমুখি আপনি। আমি আপনাকে কোনও উত্তর দিতে না পারলেও, আমি বিশ্বাস করি যে আপনি লিনাস 2005 সালে লিখেছিলেন এই ইমেলটি পড়তে পারেন , এটি অত্যন্ত প্রাসঙ্গিক এবং আপনাকে কীভাবে সমস্যাটি পরিচালনা করতে হবে সে সম্পর্কে একটি ইঙ্গিত দিতে পারে:

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

বিষয়গুলি "এটি কোথা থেকে এসেছে" সন্ধান করছে এবং গিট আর্কিটেকচার সত্যিই এটি খুব ভাল করে - সেখানে অন্য যে কোনও কিছুর চেয়ে অনেক ভাল। ...

আমি এটি এই ব্লগ পোস্ট দ্বারা রেফারেন্স পেয়েছি , যা একটি কার্যকর সমাধান খুঁজে পেতে আপনার জন্য দরকারী হতে পারে:

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

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

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

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

দয়া করে, আমাদের এটির বিষয়ে আপনার অগ্রগতি সম্পর্কে পোস্ট করুন।


এই নিবন্ধগুলি পোস্ট করার জন্য ধন্যবাদ। এগুলি পড়ার আগেই আমি বিষয়বস্তুর ইতিহাসের ধারণাটি পুরোপুরি উপলব্ধি করেছিলাম না!
ডেভিডজি

লিনাসের সেই ইমেলটি দুর্দান্ত, এটি পোস্ট করার জন্য ধন্যবাদ।
mik01aj

মজার সত্য, গিট ভি 2.15--color-moved "আদর্শ ট্র্যাকিং সিস্টেম" এর দিকে এগিয়ে চলেছে । এটি কোনও ফাইলের মধ্যে সরানো রেখাগুলি ট্র্যাক করার জন্য আমি এটি খেলছিলাম, তবে ঘটনাক্রমে বুঝতে পেরেছিলাম যে এটি পুরো ডিফার
মাইকেল

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

13

আমি লক্ষ্য করেছি যে গ্রাফিকাল গিটের বেশিরভাগ ফ্রন্ট-এন্ড এবং আইডিই প্লাগইনগুলি ফাইলটির নাম পরিবর্তন করে রাখা হয়েছে তবে কোনও ফাইলের ইতিহাস প্রদর্শন করতে সক্ষম হবে বলে মনে হয় না

আপনি জেনে খুশি হবেন যে কয়েকটি জনপ্রিয় গিট ইউআই সরঞ্জাম এখন এটি সমর্থন করে। এখানে কয়েক ডজন গিট ইউআই সরঞ্জাম উপলব্ধ রয়েছে তাই আমি সেগুলি সব তালিকাভুক্ত করব না, তবে উদাহরণস্বরূপ:

  • সোর্স ট্রি, ফাইল লগ দেখার সময় নীচে বামদিকে একটি "চেক নামযুক্ত ফাইলগুলি অনুসরণ করুন" একটি চেকবাক্স রয়েছে
  • টার্টোইজজিটের নীচে বামদিকে লগ উইন্ডোতে একটি "অনুসরণ করে নামগুলি" চেকবাক্স রয়েছে।

গিট ইউআই সরঞ্জামগুলিতে আরও তথ্য:


একবার নামকরণ করার সময় উত্স দারুণ কাজ করে, যখন পুনরায় নামকরণ করা হয়, পুনর্নামকরণের আগে কমিটের জন্য পরিবর্তন বিশদ পাওয়া যায় না। আমি এখানে বাগটি রিপোর্ট করেছি: jira.atlassian.com/browse/SRCTREE-5715
ইন্টেল

ইতিহাসে দু'বার ফাইলের নাম পরিবর্তন করা হলেও gitk দুর্দান্ত কাজ করে। কমান্ডটি এই "গিটক - ফলো পথ / টু / ফাইল" এর মত দেখাচ্ছে
ইন্টেল

6

দ্রষ্টব্য: গিট 2.9 (জুন ২০১6) এর "বগি" প্রকৃতির কিছুটা উন্নতি করবে git log --follow:

দেখুন ca4e3ca কমিট (30 মার্চ 2016) দ্বারা SZEDER গাবর ( szeder)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 26effb8 , 13 এপ্রিল 2016)

বিভক্ত: পুনরায় নাম সনাক্তকরণের সময় অভিন্ন ফাইলগুলির পুনরাবৃত্তি ক্রমটি ঠিক করুন

' dir/A/file' এবং ' dir/B/file' দুটি পাথের যদি অভিন্ন বিষয়বস্তু থাকে এবং অভিভাবক ডিরেক্টরিটির পুনরায় নামকরণ করা হয়, উদাহরণস্বরূপ ' git mv dir other-dir', তবে diffcoreনিম্নলিখিত সঠিক নামগুলি রিপোর্ট করুন:

renamed:    dir/B/file -> other-dir/A/file
renamed:    dir/A/file -> other-dir/B/file

(বিপরীতে এখানে নোট করুন: B/file -> A/fileএবং A/file -> B/file)

প্রযুক্তিগতভাবে ভুল না হলেও, এটি কেবল ব্যবহারকারীর জন্যই নয়, পুনর্নবীকরণ তথ্যের উপর ভিত্তি করে সিদ্ধান্ত গ্রহণকারী গিট কমান্ডগুলির জন্যও বিভ্রান্তিকর, যেমন ' git log --follow other-dir/A/file' অনুসরণ 'dir/B/file নামটির অতীত '।

এই আচরণটি প্রতিশ্রুতি v2.0.0-rc4 ~ 8 ^ 2 ~ 14 এর পার্শ্ব প্রতিক্রিয়া ( diffcore-rename.c: সঠিক নামগুলি সন্ধান করা সহজ করুন, ২০১৩-১১-১৪): হ্যাশম্যাপ সংরক্ষণের সূত্রগুলি একই বালতি থেকে প্রবেশিকা ফেরত দেয়, অর্থাৎ বর্তমান গন্তব্যের সাথে মিলে উত্সগুলি LIFO ক্রমে।
সুতরাং পুনরাবৃত্তিটি প্রথমে ' other-dir/A/file' এবং ' dir/B/file' পরীক্ষা করে এবং অভিন্ন সামগ্রী এবং বেসনাম খুঁজে পাওয়ার পরে একটি সঠিক নামকরণের প্রতিবেদন করে।


2

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

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