development

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

big-blog 2020. 8. 16. 21:51
반응형

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


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

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 줄을 재정의 할 수 있습니다.

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


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

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

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


영감을 얻어 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

참고 URL : https://stackoverflow.com/questions/13627598/how-to-get-git-diff-with-full-context

반응형