programing

전체 컨텍스트에서 git diff를 얻으려면 어떻게 해야 합니까?

jooyons 2023. 10. 22. 20:02
반응형

전체 컨텍스트에서 git diff를 얻으려면 어떻게 해야 합니까?

전체 컨텍스트가 있는 패치를 만들려면 어떻게 해야 합니까?

나는 노력했다.--unified=2000, 이를 통해 2000 줄의 컨텍스트를 제공합니다.

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

최대 줄 수를 지정하지 않고 파일에 모든 줄을 포함하려면 어떻게 해야 합니까?

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

git diff --no-prefix -U1000

주의 사항:

-Uflag는 컨텍스트의 선을 지정합니다.변경 내용 사이에 줄 수가 1000개 이상인 경우 이 값을 늘려야 할 수도 있습니다.

이것이 오래된 것은 알지만, 하드 코딩 방식의 솔루션도 싫어하기 때문에 테스트해 보았습니다.

git diff -U$(wc -l MYFILE)

-U를 사용하는 것만이 문제에 접근할 수 있는 유일한 방법인 것처럼 보이지만 라인 수를 사용하는 것은 매우 큰 파일의 작은 변경에도 효과가 있을 것임을 보장합니다.

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

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

그래서 좀 더 완벽한 상황을 만들어 낼 수 있을 겁니다

영감을 받아서 깃 가명을 붙였어요

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

업데이트:

방금 찾았습니다.git df깃 별칭을 실행할 때 디렉터리가 변경되어 작동하지 않는 경우가 있습니다.(git alias가 잘못된 디렉토리에서 작동하는 것을 참조하십시오.또한 @Moises Soto는 macOS에서 언급하였습니다.wc명령은 다르게 작동합니다(앞에 6칸).wc -l출력) 및 사용을 제안합니다.awk. 업데이트된 버전입니다.

$ 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}" | awk '{print $1}') "${FILE}"
done
exit 0

macOS에서는 이것이 통했습니다.

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

"Bash 변수에서 공백을 자르는 방법"을 참조하십시오.

저는 그냥 사용합니다.

git diff -W Git.md

파일의 전체 패치를 나열합니다.부터man git diff:

-W, --function-context
각 변경에 대한 전체 기능을 컨텍스트 라인으로 표시합니다.

이전에 승인된 솔루션은 특정 파일/커밋을 볼 때 사용할 수 없습니다.-U옵션이 rev/path parsing)을 엉망으로 만드는 것 같지만,--inter-hunk-context=이 경우에 작용합니다.git version 2.24.0:

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

파일 크기를 모르면 당연히 다음과 같이 찾을 수 있습니다.wc -l하드 coding 대신:

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

언급URL : https://stackoverflow.com/questions/13627598/how-do-i-get-git-diff-with-full-context

반응형