programing

로컬 리포지토리의 파일과 오리진 간의 차이

powerit 2023. 7. 7. 21:11
반응형

로컬 리포지토리의 파일과 오리진 간의 차이

로컬 저장소에 있는 파일과 로컬 저장소에 있는 파일의 차이점을 찾고 싶습니다.origin master.

가 있다는 것을 압니다.git diff하지만 이 파일을 하나의 특정 파일로 분리하고 싶습니다.

쉽게 설명하기 위해 파일 이름을file1.txt로컬 파일 경로가 있습니다. =[local_path]오리진에는 파일 경로 =가 있습니다.[remote-path].

입력해야 하는 Git 명령어는 무엇입니까?


Eclipse를 사용하는 사용자의 경우 → Compare With → Branch(지점과 비교), Tag(태그) 또는 Reference(참조)를 마우스 오른쪽 버튼으로 클릭하면 해당 버전을 선택할 수 있습니다.

한다면[remote-path]그리고.[local-path]똑같습니다, 당신은 할 수 있습니다.

$ git fetch origin master
$ git diff origin/master -- [local-path]

참고 1: 위의 두 번째 명령은 로컬에 저장된 원격 추적 분기와 비교됩니다.원격 추적 분기를 원격 서버의 내용과 동기화하도록 업데이트하려면 fetch 명령이 필요합니다.또는 그냥 할 수 있습니다.

$ git diff master:<path-or-file-name>

참고 2: master위의 예에서 임의의 지점 이름으로 대체할 수 있습니다.

원격 파일에서 로컬 파일로의 차이를 보려면 다음과 같이 하십시오.

git diff remotename/branchname:remote/path/file1.txt local/path/file1.txt

다른 방향의 차이를 보려면:

git diff HEAD:local/path/file1.txt remotename/branchname:remote/path/file1.txt

기본적으로 다음과 같은 표기법을 사용하여 두 개의 파일을 임의의 위치에 분산시킬 수 있습니다.

git diff ref1:path/to/file1 ref2:path/to/file2

평소처럼.ref1그리고.ref2지점 이름, 원격 이름/지점 이름, 커밋 SHA 등일 수 있습니다.

로컬 리포지토리를 원격 리포지토리와 비교하려면 다음 구문을 사용하십시오.

git diff @{upstream}

이를 위해 바시 대본을 작성했습니다.

#set -x
branchname=`git branch | grep -F '*' |  awk '{print $2}'`
echo $branchname
git fetch origin ${branchname}
for file in `git status | awk '{if ($1 == "modified:") print $2;}'`
do
echo "PLEASE CHECK OUT GIT DIFF FOR "$file
git difftool  FETCH_HEAD $file ;
done

위 스크립트에서 원격 주 분기(반드시 마스터 분기 - 임의의 분기)를 가져옵니다.FETCH_HEAD내 수정된 파일의 목록만 만들고 수정된 파일을 비교합니다.git difftool.

많이 있습니다.difftoolGit에서 지원하는 Meld Diff Viewer는 GUI 비교가 잘 되도록 구성했습니다.

위 스크립트를 통해 Git 단계를 추적하지 않음 → 스테이징됨 → 커밋하기 전에 동일한 파일에 있는 다른 팀이 수행한 변경 사항을 사전에 알고 있으므로 원격 팀과의 불필요한 병합 충돌을 해결하거나 새로운 로컬 분기를 만들고 주 분기에서 비교 및 병합할 수 있습니다.

분기 없이 파일 이름을 사용하는 것만으로도 작동했습니다.

git diff filename

현재 분기에서 확인하는 방법

git diff -- projects/components/some.component.ts ... origin
git diff -- projects/components/some.component.html ... origin

다른 분기를 확인하려면 스테이징이라고 합니다.

git diff -- projects/components/some.component.ts ... origin/staging
git diff -- projects/components/some.component.html ... origin/staging

몇 가지 솔루션을 시도해 보았지만 간단한 방법은 다음과 같습니다(로컬 폴더에 있음).

#!/bin/bash
git fetch

var_local=`cat .git/refs/heads/master`
var_remote=`git log origin/master -1 | head -n1 | cut -d" " -f2`

if [ "$var_remote" = "$var_local" ]; then
    echo "Strings are equal." #1
else
    echo "Strings are not equal." # 0 if you want
fi

이 스크립트를 실행하면 마지막 커밋 번호를 사용하여 로컬 Git와 원격 Git 비교가 완료됩니다.

로컬과 원격에서 서로 다른 경로가 있을 수 있다는 원래 질문에 대한 전체 답변은 다음과 같습니다.

  1. git fetch origin
  2. git diff master -- [local-path] origin/master -- [remote-path]

로컬 경로가 docs/file1이라고 가정합니다.txt 및 원격 경로는 docs2/file1입니다.txt, 사용git diff master -- docs/file1.txt origin/master -- docs2/file1.txt

이는 여기에 있는 GitHub 도움말 페이지와 이전 Code-Appretice 답변에서 수정한 것입니다.

언급URL : https://stackoverflow.com/questions/21101572/difference-between-file-in-local-repository-and-origin

반응형