[server] 자식 저장소에있는 모든 파일의 마지막 수정 날짜를 검색하는 방법

git 저장소에서 단일 파일의 마지막 수정 날짜를 검색하는 방법을 알고 있습니다.

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

분명히이 시점에서 bash 스크립트이기 때문에이를 제어 할 수 있으므로 마음의 내용에 자유롭게 사용자 정의하십시오!


답변

이 방법은 공백이 포함 된 파일 이름에도 적용됩니다.

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


답변

이것은 Andrew M.의 대답을 약간 조정 한 것입니다. (나는 그의 답변에 대해 언급 할 수 없었다.)

공백이 포함 된 파일 이름을 지원 하려면 첫 번째 $ filename을 큰 따옴표로 묶습니다 .

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

Andrew의 솔루션 ( ls-tree 기반 )이 베어 리포지토리와 함께 작동 한다는 것에 감사드립니다 ! (ls 파일을 사용하는 솔루션에는 해당되지 않습니다.)


답변

다음은 물고기를 사용하는 사람들을위한 Andrew M의 답변의 생선 껍질 버전입니다.

git ls-tree -r --name-only HEAD | while read -l filename
    printf '%s %s\n' (git log -1 --format="%ai" -- $filename) $filename
end

나는 이것을 쉽게 접근 할 수 있도록 물고기 함수로 저장합니다.


답변

Andrew M의 대답은 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


답변