github의 두 분기간에 단일 파일에 대한 diff를 어떻게 생성 할 수 있습니까?


111

실제로 github의 태그 인 두 버전 간의 차이점을 보여주는 단일 파일에 대한 diff를 생성해야합니다. 그런 다음이 diff를 이메일을 통해 다른 사람에게 보내려고하므로 diff에 대한 github URL이 이상적입니다. github 비교 뷰를 사용하면 변경된 모든 파일에 대해이 작업을 수행 할 수 있지만 내 저장소에 수천 개의 파일이 있으므로 좋지 않습니다.

다음과 같이 명령 줄에서이 작업을 수행 할 수 있지만 이메일을 통해 다른 사람에게 diff를 보내야하므로 도움이되지 않습니다.

git diff tag1 tag2 -- path/to/file

여기서 논의한 명령 줄 버전을 찾았습니다 . 로컬 브랜치와 원격 브랜치 사이에 지정된 파일의 차이점을 어떻게 볼 수 있습니까?

답변:


90

GitHub는 두 커밋 간의 차이를 표시하는 방법 만 제공합니다.

해당 태그가 실제로 커밋을 가리키는 경우 Url 형식은 다음과 같습니다.

https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}

예를 들어 https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5 는 LibGit2Sharp 프로젝트의 두 버전 간의 차이점을 보여줍니다. 이 차이에는 수정 된 모든 파일이 포함됩니다.

특정 파일을 대상으로하는 URL을 검색하려는 경우 :

  • 변경된 파일 탭으로 전환

변경 탭

  • 온 클릭 표시 DIFF 통계 버튼 (이 링크와 같은 수정 된 파일의 목록이 표시됩니다)

표시 차이

  • 원하는 특정 파일의 링크를 클립 보드에 복사합니다. 그리고 Tada! 끝났습니다.

예를 들어, 위의 diff가 주어지면 https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5#diff-11 링크 LazyFixtures.cs는 버전 v0.9.0과 버전 사이에 발생한 변경 사항을 가리 킵니다. v0.9.5.

최신 정보

diff가 웹 인터페이스를 통해 렌더링하기에는 너무 크다는 의견에 따라 오래된 명령 줄 도구로 되 돌리는 것은 어떻습니까? diff의 출력을 파일로 리디렉션 한 다음 파일을 이메일 첨부 파일로 보낼 수 있습니다.

$ git diff v0.9.0 v0.9.5 -- LibGit2Sharp.Tests/LazyFixture.cs > /tmp/lazyfixture.diff

8
안녕, 내 diff가 너무 커서 이것이 작동하지 않는 것 같습니다. "이 차이가 큽니다. 처음 2,500 개 파일에 대한 상태 정보 만 표시합니다."라는 메시지가 표시됩니다. 따라서 #diff 링크를 사용하더라도 전체 diff가 아닌 Diff Stats 만 얻습니다.
plainflavour

1
그러나 나는 당신이 옳다고 생각합니다-그것이 그것을하는 방법입니다. 감사합니다
plainflavour 2013 년

1
이 Chrome 확장 프로그램 github.com/danielribeiro/github-diff-highlight-extension 을 사용 하여 분기를 비교할 때 구문 강조 표시를 얻을 수도 있습니다 .
Daniel Ribeiro 2013 년

3
@plainflavour이 문제가 다시 발생하는 경우를 대비 한 유용한 팁 하나 더-@nulltoken과 같은 비교 URL이있을 때마다 URL 끝에 .diff를 추가하여 전체 diff를 볼 수도 있습니다 (일반 텍스트 임에도 불구하고 ). 예 : https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}.diff 출처
dmccabe

1
Show Diff Stats 버튼 이 보이지 않습니다 . 사라 졌나요? 아니면 그냥 안보이나요?
dckc

7

다음 문제가 적용될 때의 해결 방법은 다음과 같습니다.

이 비교는 큽니다! 가장 최근의 커밋 250 개만 표시합니다.

https://gist.github.com/ 과 비교할 파일의 원시보기를 복사 하십시오 . 비교하려는 두 가지 특정 커밋 포인트를 사용합니다. 이전 커밋으로 시작하십시오.

https://gist.github.com/ 은 '수정'을 클릭하면 나란히보기 좋은 비교보기를 제공합니다.


3
이했다, 당신을 감사 정확히 내가 필요한 제안 gist.github.com/ncoghlan/1067805fe673b3735ac854e195747493/... ! :)
ncoghlan

3

답변은 이전 체크인을 위해 GITHUB 웹 페이지에서 파일의 코드 변경 내역 / 취소 내역 만보고 (다운로드 안함) 원하는 사람들을위한 것입니다.

github에서 해당 파일로 이동 한 다음 HISTORY 를 선택 합니다. 그러면 아래와 같은 체크인 댓글 목록이있는 페이지가 열립니다.

여기에 이미지 설명 입력 그것을 클릭하면 코드 변경 사항이 표시됩니다. 역사를 클릭 한 후; 패키지를 클릭하면 모든 파일 체크인 패키지 수준을 볼 수 있습니다.

Eclipse에서는 EGit 플러그인을 사용하여 히스토리를 비교할 수 있으며 파일에서 "마우스 오른쪽 버튼 클릭-> 비교"를 할 수 있습니다. Eclipse에서 git의 두 개정판을 어떻게 비교할 수 있습니까?


1
좀 더 명확하게 말하면, 커밋의 7 자리 16 진수 "이름"을 클릭합니다 (마우스를 가져 가면 레이블이나 도구 설명이 없으며 "클립 보드로 복사"옆에있는 오른쪽 근처에 있습니다.) 아이콘), 그러면 해당 커밋의 버전과 이전 버전의 차이를 보여주는 페이지로 이동합니다.
JonathanZ은 MonicaC 지원

@Jonathan 그래; 그게 사실
Kanagavelu Sugumar

저번에봤을 때 캡처 한 화면을 보지 못했어요. 나는 그것이 나를 위해로드되지 않았는지 또는 그 이후로 추가했는지 모르겠지만 어느 쪽이든 귀하의 답변에 감사드립니다. 훌륭합니다.
JonathanZ은 MonicaC 지원

5000 개 파일 커밋의 경우 단일 파일 비교로 이동하지 않습니다. 에서 이 역사 에서 그 파일에 델타를 찾는 시도 커밋이 거대한 .
Carl Walsh

0

나는 nulltoken의 대답을 사용 했습니다. 을 하여 명령 줄에서 GitHub의 두 커밋 사이의 차이점을 가져 오는 간단한 편의 스크립트를 작성했습니다.

gist 에서 전체 스크립트를 찾을 수 있지만 다음은 좋은 부분입니다.

# Parse the following patterns for repo urls to get the github repo url
# https://github.com/owner/repo-name.git
# git@github.com:owner/repo-name.git
BASE_URL="https://github.com/""$(git config --get remote.origin.url | sed 's/.*github\.com[/:]\(.*\).git/\1/')""/compare"

if [[ "$#" -eq 1 ]]; then
  if [[ "$1" =~ .*\.\..* ]]; then
    # Handle "git hubdiff fromcommit..tocommit"
    open "${BASE_URL}/$(git rev-parse "${1/\.\.*/}")...$(git rev-parse ${1/*\.\./})"
  else
    # Handle "git hubdiff fromcommit"
    open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse HEAD)"
  fi
elif [[ "$#" -eq 2 ]]; then
  # Handle "git hubdiff fromcommit tocommit"
  open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse "$2")"
fi

인수 분기, 커밋 및에서 해결할 수있는 기타 모든 것을 허용합니다 git rev-parse. 나는 open웹 페이지를 여는 데 macOS에서만 작동하는을 사용 했으므로 다른 환경에 있다면 조정하고 싶을 것입니다.

nulltoken의 대답과 마찬가지로 diff에서 단일 파일을 가리 키려면 파일 제목을 클릭하여 URL 표시 줄에 앵커 문자열을 표시 한 다음 복사 할 수 있습니다.


원하는 파일이 너무 많기 때문에 원하는 파일을 표시하지 않는 비교를 위해 앵커 문자열을 얻는 방법은 무엇입니까?
sgarg

@sgarg 앵커는 "diff- <md5 of the filename>"-문서화되지 않은 AFAIK-하지만 나를 짜증나게하고 추측했습니다.
Ben Walding

0

이것이 여전히 가능하지 않기 때문에 여기에 브라우저 기반 diff-tool 방법이 있습니다. 자동화를 활용하지 않지만 Chrome 확장 프로그램을 설치하는 기능 만 필요합니다.

  1. Chrome 브라우저 용 Diff 도구 설치 : https://chrome.google.com/webstore/detail/diff-tools-text-pdf-doc-o/lkcdojpmjehlniamnglpjlldkoonlomb
  2. Diff 도구 열기 ( http://iblogbox.com/devtools/diff/ )
  3. GitHub에서 커밋, 태그 또는 브랜치 전으로 이동하여 파일을 연 다음 Raw 버튼을 클릭하여 원시 파일보기를 가져오고 모두 선택하고 복사 한 다음 Diff 도구의 왼쪽 텍스트 상자에 입력합니다.
  4. 3 단계를 반복하되 AFTER 파일에 대해 Diff Tools의 오른쪽 상자에 붙여 넣습니다.
  5. 클릭 Compare Now하여 diff ad-hoc 수행
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.