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


104

수행시 git diff --stat일부 파일은 저장소 기반의 전체 경로와 함께 나열되지만 일부 파일은 다음과 같이 나열됩니다.

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

그것은 경로가로 시작 ...하고 짧은 경로 만 표시됩니다.

git diff스크립트로 쉽게 처리 할 수 ​​있도록 모든 파일의 전체 파일 경로를 나열하고 싶습니다 . git diff항상 전체 경로를 표시 할 수있는 방법이 있습니까?

답변:


108

git diff명령은 다음에 대한 선택적 값을 사용합니다 --stat.

--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-tree의 경우 "plumbing"명령에 더 가깝기 때문에 직접 사용하고 싶을 수 있습니다 . 어느 쪽이든 괜찮을 것 같습니다 . 를 --stat사용할 때 와 동일한 추가 텍스트가 필요합니다 git diff-tree. git diff"도자기 사용의 근본적인 차이점 " "프런트 엔드 및 git diff-tree배관 명령 은 이름 변경 감지를 수행할지 여부를 결정하는 git diff것과 같은 옵션에 대해 구성된 설정을 조회하는 것 diff.renames입니다. 음, 프런트 엔드 git diffgit diff-index커밋을 인덱스와 비교하는 것과 동일한 작업을 수행합니다. 예를 들어. 즉, git diff 사용자의 설정을 읽어자동으로 적절한 배관을 호출합니다 .)


6
git diff --numstat is the same as diff-tree
cmcginty

1
마지막 부분 (+++ / ---)의 너비를 제한하려면 별도의 --stat-graph-width=...스위치를 사용할 수 있습니다 . 또한 높은 설정합니다 --stat-graph-width=및 것은 --stat-name-width=충분하지, 당신은 또한 설정해야 --stat-width=두 가지를 충당하기 위해 충분히 큰합니다.
jakub.g 2014

@ jakub.g : 좋은 지적입니다. git 소스에서 약간의 파고를 바탕으로 이것은 git 1.7.10으로 들어갔습니다.
torek 2014-04-22

4
이것을 세계화하는 방법이 있습니까? 매번 입력하는 것은 미친 짓입니다.
Rudie

@Rudie : 아아, 아니요 : 값 diff.statGraphWidth을 설정하는 데 사용할 수 있는 구성 변수가 --stat-graph-width있지만 나머지는 기본적으로 터미널 너비로 설정됩니다. (그래서, 다른 대답 : "예, 터미널 창을 1000 열 너비로 만드십시오":-))
torek

22

스크립트 처리의 경우 다음 중 하나를 사용하는 것이 좋습니다.

# 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되는 옵션 과 결합 될 때 강력한 스크립트 처리에 더 편리합니다 .


내 테스트에 따르면이 명령을 사용하여 리소스의 전체 경로를받지 못합니다. 지금은 삭제 된 파일의 상대 경로 만 표시됩니다. 이것이 이러한 파일의 경우에만 해당되는지 모르겠습니다.
GCallie

1
모든 출력은에 상대적인 경로를 반환합니다 git rev-parse --show-toplevel. 원래 문제는 잘린 경로를 참조하는 것이 었는데, 이는 특히 긴 파일 이름 또는 .NET의 낮은 값의 경우 diffstats의 문제입니다 --stat-name-width. 위의 명령은 경로를 자르지 않지만 요청 된대로 "전체"경로를 표시하지만 저장소 루트에 상대적입니다.
cmbuckley

18

Bash 사용자의 경우 $COLUMNS변수를 사용하여 사용 가능한 터미널 너비를 자동으로 채울 수 있습니다.

git diff --stat=$COLUMNS

매우 긴 경로 이름은 여전히 ​​잘릴 수 있습니다. 이 경우를 사용하여 +++ / --- 부분의 너비를 줄일 수 있습니다. --stat-graph-width예를 들어 터미널 너비의 1/5로 제한합니다.

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

보다 일반적인 솔루션의 경우의 출력 tput cols을 사용하여 터미널 너비를 결정할 수 있습니다 .


2
세계화 할 방법이 --stat=$COLUMNS,$COLUMNS있습니까? 매번 입력하는 것은 미친 짓입니다.
Rudie

추가 @Rudie export COLUMNS당신에게 ~/.bashrc, 당신에 ~/.gitconfig아래 [alias]추가smart-diff = ! "gitsmartdiff() { git diff $2 --stat=$COLUMNS,$COLUMNS; }; gitsmartdiff"
user151841

@ user151841 변경 사항 만 diff있습니다. 병합 및 가져 오기 등에서도 작동하기를 원합니다. (수동으로도 할 수 없습니다.) GIT가 지원한다고 생각하지 않습니다.
Rudie 2016-04-27

@Rudie 글쎄, 풀 또는 병합이 완료된 후 이전 해시와 새 해시를 비교할 수 있습니다.
user151841

2
@ user151841 물론입니다.하지만 병합하면 이미 통계 요약이 제공됩니다. 매개 변수 / 구성없이. 모든 '통계 요약'이 동일한 구성을 사용하면 좋을 것입니다.
Rudie 2016-04-28

4

옵션이있다 --name-only: git diff --name-only. 이 옵션은 또한 같은 다른 자식 명령으로 지원 show하고 stash.

옵션으로 경로가 단축되지 않습니다.


0

다음 git 별칭을 만들었습니다.

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

tput cols명령 에서 열 수를 읽습니다 . 기본적으로 diffing against master이지만 선택적으로 다른 분기를 지정할 수 있습니다.

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

0

내가 찾은 간단한 해결책은 다음과 같습니다. (* nix에서만 작동합니다.

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)/{}"

-1

diff --stat의 동작이 git 1.7.10 주변에서 변경된 것을 발견했습니다. 이전에는 파일 경로를 기본적으로 고정 너비로 ​​줄였습니다. 이제 터미널 창에서 허용하는만큼 표시됩니다. 이 문제가 발생하면 1.8.0 이상으로 업그레이드하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.