গিট সংগ্রহস্থলের একক ফাইলের সর্বশেষ পরিবর্তনের তারিখটি কীভাবে পুনরুদ্ধার করতে হবে তা আমি জানি:
git log -1 --format="%ad" -- path/to/file
বর্তমানে সংগ্রহস্থলটিতে উপস্থিত সমস্ত ফাইলের জন্য কি একইভাবে করার সহজ এবং কার্যকর উপায় আছে?
গিট সংগ্রহস্থলের একক ফাইলের সর্বশেষ পরিবর্তনের তারিখটি কীভাবে পুনরুদ্ধার করতে হবে তা আমি জানি:
git log -1 --format="%ad" -- path/to/file
বর্তমানে সংগ্রহস্থলটিতে উপস্থিত সমস্ত ফাইলের জন্য কি একইভাবে করার সহজ এবং কার্যকর উপায় আছে?
উত্তর:
একটি সহজ উত্তর হ'ল প্রতিটি ফাইলের মাধ্যমে পুনরাবৃত্তি করা এবং তার পরিবর্তনের সময় প্রদর্শন করা, অর্থাত:
git ls-tree -r --name-only HEAD | while read filename; do
echo "$(git log -1 --format="%ad" -- $filename) $filename"
done
এটি এর মতো আউটপুট দেবে:
Fri Dec 23 19:01:01 2011 +0000 Config
Fri Dec 23 19:01:01 2011 +0000 Makefile
স্পষ্টতই, আপনি এটিকে এটির নিয়ন্ত্রণ করতে পারবেন যেহেতু এই মুহুর্তে এটির কেবলমাত্র একটি বাশ স্ক্রিপ্ট - তাই আপনার হৃদয়ের সামগ্রীতে কাস্টমাইজ করতে নির্দ্বিধায়!
git ls-tree -r --name-only HEAD | while read filename; do echo "$(git log -1 --format="%ai" -- $filename) $filename"; done | sort
এই পদ্ধতির সাথে ফাইলের নামগুলিও কাজ করে যাতে স্পেস থাকে:
git ls-files -z | xargs -0 -n1 -I{} -- git log -1 --format="%ai {}" {}
উদাহরণ আউটপুট:
2015-11-03 10:51:16 -0500 .gitignore
2016-03-30 11:50:05 -0400 .htaccess
2015-02-18 12:20:26 -0500 .travis.yml
2016-04-29 09:19:24 +0800 2016-01-13-Atlanta.md
2016-04-29 09:29:10 +0800 2016-03-03-Elmherst.md
2016-04-29 09:41:20 +0800 2016-03-03-Milford.md
2016-04-29 08:15:19 +0800 2016-03-06-Clayton.md
2016-04-29 01:20:01 +0800 2016-03-14-Richmond.md
2016-04-29 09:49:06 +0800 3/8/2016-Clayton.md
2015-08-26 16:19:56 -0400 404.htm
2016-03-31 11:54:19 -0400 _algorithms/acls-bradycardia-algorithm.htm
2015-12-23 17:03:51 -0500 _algorithms/acls-pulseless-arrest-algorithm-asystole.htm
2016-04-11 15:00:42 -0400 _algorithms/acls-pulseless-arrest-algorithm-pea.htm
2016-03-31 11:54:19 -0400 _algorithms/acls-secondary-survey.htm
2016-03-31 11:54:19 -0400 _algorithms/acls-suspected-stroke-algorithm.htm
2016-03-31 11:54:19 -0400 _algorithms/acls-tachycardia-algorithm-stable.htm
...
আউটপুটটি সংশোধন টাইমস্ট্যাম্পের মাধ্যমে | sort
শেষে যুক্ত করে বাছাই করা যেতে পারে :
git ls-files -z | xargs -0 -n1 -I{} -- git log -1 --format="%ai {}" {} | sort
এটি অ্যান্ড্রু এম এর উত্তরের একটি ছোট টুইট। (আমি তার উত্তর সম্পর্কে মন্তব্য করতে অক্ষম ছিল।)
এমবেডেড স্পেস সহ ফাইলের নামগুলি সমর্থন করার জন্য, প্রথম $ ফাইলের নামটি ডাবল উদ্ধৃতিতে মুড়ে দিন।
git ls-tree -r --name-only HEAD | while read filename; do
echo "$(git log -1 --format="%ad" -- "$filename") $filename"
done
নমুনা আউটপুট:
Tue Jun 21 11:38:43 2016 -0600 subdir/this is a filename with spaces.txt
আমি প্রশংসা করি যে অ্যান্ড্রু এর সমাধান ( এলএস-ট্রি উপর ভিত্তি করে ) খালি সংগ্রহস্থলগুলির সাথে কাজ করে! (এটি এলএস-ফাইলগুলি ব্যবহার করে সমাধানগুলির ক্ষেত্রে সত্য নয়))
অ্যান্ড্রু এম এর উত্তরের ফিশ শেল সংস্করণটি, যারা মাছ ব্যবহার করেন তাদের জন্য এখানে।
git ls-tree -r --name-only HEAD | while read -l filename
printf '%s %s\n' (git log -1 --format="%ai" -- $filename) $filename
end
আমি সহজে অ্যাক্সেসের জন্য এটি ফিশ ফাংশন হিসাবে সঞ্চয় করি।
আমরা যারা উইন্ডোজ এবং পাওয়ারশেল ব্যবহার করছি তাদের জন্য, কম্পিউটার পাঠযোগ্য তাত্পর্য সহ অ্যান্ড্রু এম এর উত্তর:
git ls-tree -r --name-only HEAD | ForEach-Object { "$(git log -1 --format="%ai" -- "$_")`t$_" }
উদাহরণ আউটপুট:
2019-05-07 12:00:37 -0500 .editorconfig
2016-07-13 14:03:49 -0500 .gitattributes
2019-05-07 12:00:37 -0500 .gitignore
2018-02-03 22:01:17 -0600 .mailmap