Programming

두 저장소 간의 차이점 얻기

procodes 2020. 6. 7. 18:34
반응형

두 저장소 간의 차이점 얻기


두 git 저장소의 차이점을 어떻게 알 수 있습니까?

시나리오 : repo_a 및 repo_b가 있습니다. 후자는 repo_a의 사본으로 작성되었습니다. 나중에 두 저장소 모두에서 병렬 개발이있었습니다. 이 두 저장소의 현재 버전의 차이점을 나열 할 수있는 방법이 있습니까?


repo_a에서 :

git remote add -f b path/to/repo_b.git
git remote update
git diff master remotes/b/master
git remote rm b

Meld 는 디렉토리를 비교할 수 있습니다.

meld directory1 directory2

두 git repos의 디렉토리를 사용하면 멋진 그래픽 비교를 얻을 수 있습니다.

여기에 이미지 설명을 입력하십시오

파란색 항목 중 하나를 클릭하면 변경된 내용을 볼 수 있습니다.


하나의 저장소에 두 가지가 모두 있으면을 수행 할 수 있습니다 git diff. 그리고 하나의 저장소에 넣는 것만 큼 쉽습니다.

git fetch /the/other/repo/.git refs/heads/*:refs/remotes/other/*

먼저 현재 리포지토리에 원격으로 다른 리포지를 추가 할 수 있습니다.

git remote add other_name PATH_TO_OTHER_REPO

그런 다음 해당 리모컨에서 brach를 가져옵니다.

git fetch other_name branch_name:branch_name

이렇게하면 현재 리포지토리에서 해당 분기를 새 분기로 만든 다음 해당 분기를 분기와 비교하여 현재 분기와 새 분기 (branch_name)를 비교할 수 있습니다.

git diff branch_name

"일반"의 " http://git.or.cz/gitwiki/GitTips "섹션, "두 로컬 리포지토리를 비교하는 방법"섹션을 참조하십시오 .

간단히 말해서 GIT_ALTERNATE_OBJECT_DIRECTORIES 환경 변수를 사용하여 다른 저장소의 객체 데이터베이스에 액세스 하고 / GIT_DIR 과 함께 git rev-parse사용하여 --git-dir다른 저장소의 기호 이름을 SHA-1 식별자로 변환하십시오.

최신 버전은 다음과 같이 보입니다 ( 'repo_a'에 있다고 가정).

GIT_ALTERNATE_OBJECT_DIRECTORIES = .. / repo_b / .git / objects \
   git diff $ (git --git-dir = .. / repo_b / .git rev-parse --verify HEAD) HEAD

여기서 ../repo_b/.gitrepo_b의 오브젝트 데이터베이스에 대한 경로입니다 (저장소 인 경우 repo_b.git입니다). 물론 HEAD뿐만 아니라 임의의 버전을 비교할 수 있습니다.


repo_a 및 repo_b가 동일한 저장소 인 경우, git remote add -f ...반복 업데이트를 위해 저장소에 대한 별명을 작성하기 위해 " "를 사용하거나 " "를 사용하지 않고 " "를 사용하여 둘 다 동일한 저장소에 두는 것이 더 합리적 일 수 있습니다 git fetch .... 다른 답변에 설명 된대로.


git diff master remotes/b

맞습니다. remotes/b원격이지만 지점이 아닙니다.

그것이 작동하게하려면 :

git diff master remotes/b/master

폴더와 파일을 비교할 수있는 훌륭한 기능을 갖춘 PyCharm을 사용합니다.

두 저장소 모두에 대한 상위 폴더를 열고 색인이 생성 될 때까지 기다리십시오. 그런 다음 폴더 또는 파일을 마우스 오른쪽 버튼으로 클릭 Compare to...하고 반대쪽에서 해당 폴더 / 파일을 선택할 수 있습니다.

다른 파일뿐만 아니라 그 내용도 보여줍니다. 명령 줄보다 훨씬 쉽습니다.


가장 좋은 방법은 로컬 컴퓨터에 두 개의 저장소를 모두두고 두 디렉토리를 매개 변수로 linux diff 명령을 사용하는 것입니다.

diff -r repo-A repo-B


리모컨 설정을 터치하지 않고 쉽게 할 수 있습니다. 리포지토리 A에서 마스터 (마스터 브랜치를 비교한다고 가정) :

git fetch path/to/repo_b.git master
git diff FETCH_HEAD

참고 URL : https://stackoverflow.com/questions/1968512/getting-the-difference-between-two-repositories

반응형