git diff –stat 표시 전체 파일 경로 만들기 함께 나열되지만 일부 파일은 다음과 같이

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

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

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

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



답변

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 사용자의 설정을 읽어자동으로 적절한 배관을 호출합니다 .)


답변

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

# 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/5로 제한합니다.

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

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


답변

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

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


답변

다음 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(-)


답변

내가 찾은 간단한 해결책은 다음과 같습니다. (* 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)/{}"


답변

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