programing

git diff --stat 전체 파일 경로 표시

telecom 2023. 9. 12. 19:50
반응형

git diff --stat 전체 파일 경로 표시

을 할때git diff --stat일부 파일은 저장소 베이스에서 전체 경로로 나열되지만 일부 파일은 다음과 같이 나열됩니다.

.../short/path/to/filename.  

그것이 그 길의 시작입니다....짧은 경로만 표시됩니다.

를 .git diff스크립트에서 쉽게 처리할 수 있도록 모든 파일의 전체 파일 경로를 나열합니다.제가 할 수 있는 방법이 있을까요?git diff한 길을 것

git diff출력을 80열 터미널에 맞게 잘라냅니다.

다음 옵션을 사용하여 값을 지정하여 이를 재정의할 수 있습니다.

--stat[=<width>[,<name-width>[,<count>]]]
       Generate a diffstat. You can override the default output width for
       80-column terminal by --stat=<width>. The width of the filename
       part can be controlled by giving another width to it separated by a
       comma. By giving a third parameter <count>, you can limit the
       output to the first <count> lines, followed by ...  if there are
       more.

       These parameters can also be set individually with
       --stat-width=<width>, --stat-name-width=<name-width> and
       --stat-count=<count>.

예를 들어, 출력 값을 매우 큰 숫자로 설정하면 다음과 같습니다.

git diff --stat=10000

git 저장소의 루트에 상대적인 경로를 생성합니다.

할 수 ) (의 할 의 할 )git diff-tree직접적으로 말하면 "플럼핑" 명령에 가깝기 때문입니다만, 어느 쪽이든 괜찮으실 거라고 생각합니다.은가가다다aeht과e은도 같은 여분의 텍스트가 필요합니다.--stat를 할 때git diff-tree. 를 하는 의 인 인 의 하는 를 git diff" "앞단",고git diff-tree배관 명령이란?git diff과은에된해을다을e된s 등의 옵션에 합니다.diff.renames이름 변경 탐지 여부를 결정합니다.건,고,은git diff와한을할다다할felol와을에 해당합니다.git diff-index예를 들어, 커밋과 인덱스를 비교하는 경우.즉,git diff 구성을 읽고 적절한 배관을 자동으로 호출합니다.)

스크립트를 처리하려면 다음 중 하나를 사용하는 것이 더 나을 수 있습니다.

# list just the file names
git diff --name-only
path/to/modified/file
path/to/renamed/file


# list the names and change statuses:
git diff --name-status
M       path/to/modified/file
R100    path/to/existing/file   path/to/renamed/file


# list a diffstat-like output (+ed lines, -ed lines, file name):
git diff --numstat
1       0       path/to/modified/file
0       0       path/to/{existing => renamed}/file

이것들은 각각 강력한 스크립트 처리를 위해 더 편리해 집니다.-z션,는을 합니다.NUL필드 터미네이터로서 말입니다.

Bash 를 할 수 .$COLUMNS사용 가능한 터미널 너비를 자동으로 채우도록 변수:

git diff --stat=$COLUMNS

긴 수 . 이 의 를 은 ++/-- 일 의 를 --stat-graph-width를 들어, 의 1 즉, 를 의 로 1/5 합니다 합니다 의 를 로

git show --stat=$COLUMNS --stat-graph-width=$(($COLUMNS/5))

더 , Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ ΔΔ 의 출력을 사용할 수 있습니다.tput cols단자 폭을 결정합니다.

선택의 여지가 있습니다.--name-only:git diff --name-only은 . 은 에서도 됩니다 과 에서도 됩니다 등의 다른 git 됩니다.show그리고.stash.

옵션을 사용하면 경로가 짧아지지 않습니다.

제가 찾은 간단한 해결책은 이렇게 하는 것이었습니다. (*nix에서만 작동합니다, 죄송합니다 osx는 없습니다.)

git diff --stat=$COLUMNS --relative | head -n -1 | cut -c 2- | xargs -d '\n' -P4 printf "$(pwd)/%s\n"

이 버전은 둘 다 사용할 수 있지만 osx에서는 잘 보이지 않습니다.

git diff --stat=$COLUMNS --relative | sed -e '$ d' | cut -c 2- | xargs -n4 -I{} echo "$(pwd)/{}"

git diff는 자기(사용자 친화적) 명령입니다.하는 배관 명령어해당관을는다이e다roe을yrsu,gg는g해git diff-tree.

얻을 수 있습니다.git diff-treegit 저장소와 옵션의 조합을 사용하여 git 저장소에 대한 전체 경로를 출력합니다.

"마지막 " "에서 "되었습니다 "가 "에서 " "되었습니다 ")"에서되었습니다.HEAD 현재 분기의 커밋입니다.

git diff-tree --name-only -r --no-commit-id HEAD

에서 의 의 마지막 에 있는 main를 치다

git diff-tree --name-only -r --no-commit-id main

의 에 마지막 세 main를 치다

git diff-tree --name-only -r main main~3

경로 아래 의 src/

git diff-tree --name-only -r --no-commit-id main src/

현재 분기의 마지막 커밋에서 변경된 파일의 절대 경로

git diff-tree --name-only -r --no-commit-id --line-prefix=`git rev-parse --show-toplevel`/ HEAD

설명.

git diff-tree나무 같은 두 물체의 방울을 비교합니다.

은 입니다.treeish저장소 루트에 있는 개체를 가리킵니다.treeish이인면는는s면ss인e이sblobs.

실행중 입니다.git diff-tree HEAD입니다의 입니다.HEAD그리고.HEAD~1저장소 루트의 블랍 차이를 포함합니다.을 보려면 는된을면로다야e다야oood에yted면는,eltse든d을e된treeish물건들.이는 다음을 사용하여 달성할 수 있습니다.-r(반복에서와 같이) 옵션.

이를 통해 하나와 둘이 임의 커밋의 임의 디렉토리를 비교할 수 있습니다.

기본적으로 하나의 커밋 개체만 지정된 경우 상위 개체와 비교됩니다.즉, 달리기git diff-tree HEAD와입니다에 합니다.git diff-tree HEAD HEAD~1. 트리쉬 개체로 하나의 커밋만 지정한 경우 부모 커밋 ID가 표시됩니다.사용.--no-commit-id이것을 없애 버립니다.

git-diff-tree원하지 않는 많은 정보(ID, 권한, 추가, 삭제, 수정 여부)를 인쇄합니다.우리는 단지 이름을 원하기 때문에 우리는--name-only.

만약 우리가 절대적인 경로를 원한다면, 우리는 다음과 같은 것을 사용하여 모든 선의 접두사를 붙여야 합니다.git rev-parse --show-toplevel 없이 . . 은 의 를 를 은 의 /는 그것을 그래서 저희가 추가를.

--line-prefix=`git rev-parse --show-toplevel`/

다음과 같은 깃 별칭을 만들었습니다.

diffstat = ! "gitdiffstat() {  git diff --stat=$(tput cols) ${1:-master} ; }; gitdiffstat"

이것은 열 수를 읽어냅니다.tput cols지휘. 기본값다음 같습니다 같습니다 다음과에 대한 디핑이 기본값입니다.master분기를 할 수 . , 를 으로 할 할 으로 .

$ git diffstat
 .gitalias | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --stat의 동작이 git 1.7.10 부근에서 변경되었는데, 이전에는 파일 경로를 기본적으로 고정 폭으로 단축시켰지만 이제는 터미널 창이 허용하는 만큼 표시됩니다.이 문제가 발생하는 경우 1.8.0 이상으로 업그레이드해야 합니다.

언급URL : https://stackoverflow.com/questions/10459374/making-git-diff-stat-show-full-file-path

반응형