मुझे पता है कि एक गिट रिपॉजिटरी में किसी एकल फ़ाइल की अंतिम संशोधन तिथि कैसे प्राप्त करें:
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
मैं सराहना करता हूं कि एंड्रयू का समाधान ( एलएस-ट्री पर आधारित ) नंगे रिपोजिटरी के साथ काम करता है! (यह ls-files का उपयोग करके समाधानों का सच नहीं है।)
एंड्रयू एम के जवाब का मछली खोल संस्करण है, उन लोगों के लिए जो मछली का उपयोग करते हैं।
git ls-tree -r --name-only HEAD | while read -l filename
printf '%s %s\n' (git log -1 --format="%ai" -- $filename) $filename
end
मैं इसे आसान पहुंच के लिए फिश फंक्शन के रूप में संग्रहीत करता हूं।
Windows और PowerShell का उपयोग करने वाले हम लोगों के लिए, एंड्रयू एम का जवाब, कंप्यूटर पढ़ने योग्य ट्वीक के साथ:
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