전체 컨텍스트로 git diff를 얻는 방법은 무엇입니까? master –no-prefix

도가니에서 검토하기에 적합한 패치를 만드는 방법은 무엇입니까?

git diff branch master --no-prefix > patch

이는 3 줄의 컨텍스트 만 생성합니다. 그래서 다음을 수행합니다.

git diff --unified=2000 branch master --no-prefix > patch

바라건대 모든 파일은 2000 줄 미만입니다. 최대 줄을 지정하지 않고 패치 파일의 모든 줄을 포함하도록 git에 지시하는 방법이 있습니까?



답변

나는 이것이 오래되었다는 것을 알고 있지만 하드 코딩 된 솔루션을 싫어하기 때문에 이것을 테스트했습니다.

git diff -U$(wc -l MYFILE)

-U를 사용하는 것이 문제에 접근하는 유일한 방법 인 것처럼 보이지만 줄 수를 사용하면 매우 큰 파일의 작은 변경에도 작동합니다.


답변

이것은 꽤 잘 작동하는 것 같습니다.

git diff --no-prefix -U1000

주의 사항 :

-U플래그 컨텍스트 라인을 지정한다. 변경 사항 사이에 1000 줄 이상이있는 경우이 값을 늘려야 할 수 있습니다.


답변

참고 : git1.8.1rc1 발표 (2012 년 12 월 8 일) 에는 다음이 포함됩니다.

새 구성 변수 ” diff.context“를 사용하여 패치 출력에 기본 컨텍스트 줄 수를 제공하여 하드 코딩 된 기본값 인 3 줄을 재정의 할 수 있습니다.

여기에서보다 완전한 컨텍스트를 생성하는 데 도움이 될 수 있습니다.


답변

영감을 얻어 git 별칭을 추가했습니다.

$ cat ~/.gitconfig | fgrep diff
        df = "!git diff -U$(wc -l \"$1\" | cut -d ' ' -f 1) \"$1\""
$ git df <file>

최신 정보:

방금 찾은 “git df”는 git alias를 실행할 때 디렉토리 변경으로 인해 가끔 작동하지 않습니다. ( git aliases works in the wrong directory 참조 ). 따라서 이것은 업데이트 된 버전입니다.

$ cat ~/.gitconfig | fgrep df
        df = "! [ \"$GIT_PREFIX\" != \"\" ] && cd \"$GIT_PREFIX\"; ~/bin/git_df.sh"
$
$ cat ~/bin/git_df.sh
#!/bin/bash
for FILE in $@; do
    git diff -U$(wc -l "${FILE}" | cut -d ' ' -f 1) "${FILE}"
done
exit 0

답변

이것은 macOS에서 나를 위해 일했습니다.

git diff -U$(wc -l main.htm | xargs)

“Bash 변수에서 공백을 제거하는 방법”을 참조하십시오.


답변

이전에 허용 된 솔루션은 특정 파일 / 커밋을 볼 때 작동하지 않지만 (이 -U옵션은 rev / path 구문 분석을 엉망으로 보임) 다음에서 --inter-hunk-context=작동합니다 git version 2.24.0.

git diff \
    --no-prefix \
    --inter-hunk-context=2000 \
    master -- \
        path/to/file.py

파일 크기를 모르면 wc -l하드 코딩하는 대신 다음을 사용하여 찾을 수 있습니다 .

git diff \
    --no-prefix \
    --inter-hunk-context=$(wc -l path/to/file.py) \
    master -- \
        path/to/file.py