Programing

git difftool, 직렬이 아닌 모든 diff 파일을 즉시여십시오.

lottogame 2020. 4. 17. 08:10
반응형

git difftool, 직렬이 아닌 모든 diff 파일을 즉시여십시오.


기본 git diff 동작은 각 diff 파일을 직렬로 여는 것입니다 (다음 파일을 열기 전에 이전 파일이 닫힐 때까지 기다리십시오).

예를 들어 BeyondCompare에서 모든 파일을 한 번에 열 수있는 방법을 찾고 있습니다. 예를 들어 동일한 BC 창 내에서 탭의 모든 파일이 열립니다.

이를 통해 복잡한 변경 사항을보다 쉽게 ​​검토 할 수 있습니다. diff 파일 사이를 앞뒤로 넘기고 중요하지 않은 파일은 무시하십시오.


gitv1.7.11 부터 git difftool --dir-diff디렉토리 diff를 수행하는 데 사용할 수 있습니다 .

이 기능은 예를 들어 Meld 3.14.2에서 잘 작동하며 수정 된 모든 파일을 찾아 볼 수 있습니다.

git difftool --dir-diff --tool=meld HEAD~ HEAD

이것은 편리한 Bash 기능입니다.

git-diff-meld() (
  git difftool --dir-diff --tool=meld "${1:-HEAD~}" "${2:-HEAD}"
)

다음 답변은 gitv1.7.11 이전의 설치에 적용됩니다 .


git mail list 에서 이와 같은 질문을 받았습니다 .

임의의 커밋 사이에서 디렉토리 차이를 수행하는 해당 이메일 스레드를 기반으로 쉘 스크립트를 작성했습니다.

git v1.7.10부터 git-diffall스크립트는 contrib표준 git 설치에 포함됩니다.

v1.7.10 이전 버전의 경우 GitHubgit-diffall프로젝트에서 설치할 수 있습니다 .

프로젝트 설명은 다음과 같습니다.

git-diffall 스크립트는 git에 대한 디렉토리 기반 diff 메커니즘을 제공합니다. 이 스크립트는 diff.tool 구성 옵션을 사용하여 사용되는 diff 뷰어를 결정합니다.

이 스크립트는 diff 할 수정 범위를 지정하는 데 사용되는 모든 양식과 호환됩니다.

1) git diffall: 작업 트리와 단계적 변경 사이의 차이를 표시합니다.
2) git diffall --cached [<commit>]: 단계적 변경과 HEAD다른 명명 된 커밋 사이의 차이를 보여줍니다.
3) git diffall <commit>: 작업 트리와 명명 된 커밋 사이의 차이를 보여줍니다.
4) git diffall <commit> <commit>: 두 개의 명명 된 커밋 사이에 차이를 보여줍니다 .
5) git diffall <commit>..<commit>: 동일 위의
6) git diffall <commit>...<commit>: 두 가지의 공통 조상에서 시작하여 두 번째까지 포함하는 지점의 변경 사항을 표시하십시오.<commit>

참고 : 모든 양식은 선택적 경로 제한기를 사용합니다. [--] [<path>]

이 스크립트는 Git 목록에서 Thomas Rast가 제공 한 예제를 기반으로 합니다 .


여기에 내가 정착 한 것이 있습니다 ...

다음 코드를 git-diffall(확장자 없음) 이라는 파일에 복사하십시오 .

#!/bin/sh
git diff --name-only "$@" | while read filename; do
    git difftool "$@" --no-prompt "$filename" &
done

에 파일을 넣습니다 cmd(예 : 디렉토리 설치하려면 자식의 폴더 C:\Program Files (x86)\Git\cmd)

다음과 같이 사용하십시오 git diff.

git diffall
git diffall HEAD
git diffall --cached 
git diffall rev1..rev2
etc...

참고 :이 파일의 키는 & param으로, 백그라운드 작업에서 외부 diff 명령을 실행하여 파일이 즉시 처리되도록합니다. BeyondCompare의 경우 각 파일이 자체 탭에있는 하나의 화면이 열립니다.


meld 소스 제어 (Git, Mercurial, Subversion, Bazaar 등)에서 디렉토리를 제공하면 변경된 모든 파일을 자동으로 나열하고 두 번 클릭하여 개별 차이점을 볼 수있는 깔끔한 기능이 있습니다.

IMO meld .VCS를 시작하도록 구성하는 것보다 입력하기 쉽고 VCS를 파악하도록합니다 meld. 또한 프로젝트에서 사용하는 VCS에 관계없이 동일한 명령을 사용할 수 있습니다. VCS를 많이 전환하면 좋습니다.

유일한 단점은 git / hg / svn에서 변경 사항을 전달하는 것보다 meld가 변경 사항을 검색하는 것이 느리다는 것입니다.하지만 문제가 될 정도로 느릴 지 여부는 사용 방법에 달려 있습니다.


내가 찾았 어 ,이 메소드 로 복사 이전 / 새 임시 DIRS 밖으로 파일과 그들에 비교 폴더를한다는 것을 (GitDiff.bat 및 GitDiff.rb을).

그러나 BeyondCompare는 diff 창 내에서 파일을 편집 할 수있는 편리한 기능을 가지고 있기 때문에 작업 파일에서 직접 작업 파일을 직접보고 싶습니다. 이는 빠른 정리에 좋습니다.

편집 : git mailing list에 대한 내 질문에 대한 응답으로 비슷한 방법이 있습니다 .


git meld=> https://github.com/wmanley/git-meld 는 하나의 창에서 모든 파일의 깔끔한 차이를 여는 멋진 스크립트입니다.


확산 에는 VCS 통합도 있습니다. SVN, Mercurial, Bazaar 등 다양한 VCS와 상호 운용됩니다. Git의 경우 일부 변경이 준비되지 않은 경우에도 3 개의 창을 표시합니다. 충돌이 발생하면 네 개의 창이 있습니다.

단계적 편집 및 비 단계적 편집을 통한 확산 스크린 샷

로 불러

diffuse -m

Git 작업 카피에.

당신이 저에게 묻는다면, 10 년 동안 내가 본 최고의 시각적 차이가 있습니다. (그리고 나도 시도했다.)


여기 드러내 Araxis 병합이 '-nowait'명령 옵션을 가지고 :

-nowait 비교가 닫히기를 기다리는 것을 방지합니다.

어쩌면 이것은 즉시 종료 코드를 반환하고 작동 할 것입니다. BeyondCompare와 유사한 옵션을 찾을 수 없습니다 ...


현재 수정 된 모든 파일을 열기 만하면됩니다.

vi $ (git status | sed -n '/.* 수정 : * / s /// p')

"복잡한 변경 세트"를 커밋하는 경우 워크 플로를 다시 고려할 수 있습니다. git의 멋진 기능 중 하나는 개발자가 복잡한 변경 세트를 일련의 간단한 패치로 쉽게 줄일 수 있다는 것입니다. 현재 수정 된 모든 파일을 편집하려고하기보다는

git add --patch
선택적으로 덩어리를 스테이징 할 수 있습니다.


두 개의 작동 트리를 복제하고 DiffMerge와 비교하는 powershell 스크립트를 작성했습니다. 그래서 당신은 할 수 있습니다 :

GitNdiff master~3 .

예를 들어 3 체크인 전의 마스터 브랜치를 현재 작업 트리와 비교합니다.

반짝이고 새롭고 아마도 버그가 가득합니다. 한 가지 단점은 아직 추가되지 않은 작업 트리의 파일이 두 작업 트리에 모두 복사된다는 것입니다. 느려질 수도 있습니다.

http://github.com/fschwiet/GitNdiff


Araxis와 함께 Mac OS X에서 git-diffall을 사용하는 데 관심이있는 사람들을 위해 github에서 git-diffall 프로젝트를 분기하고 Araxis Merge 명령을 래핑하는 AppleScript를 추가했습니다. 참고 : araxisgitdiffMac OS X 용 Araxis Merge와 함께 제공 되는 약간 수정 된 파일 복제본입니다.

https://github.com/sorens/git-diffall


다음은 meld 및 kdiff3에서 작동합니다.

git difftool --dir-diff origin/branch1..origin/branch2

쉽게 찾을 수있는 모든 파일을 창에서 엽니 다. 원산지 / 분기 이름 대신 변경 세트와 함께 사용할 수 있습니다.

예 : git difftool --dir-diff origin/master..24604fb72f7e16ed44115fbd88b447779cc74bb1


gitk 를 사용 하여 동시에 모든 차이점을 볼 수 있습니다

참고 URL : https://stackoverflow.com/questions/1220309/git-difftool-open-all-diff-files-immediately-not-in-serial

반응형