로컬 리포지토리의 파일과 오리진 간의 차이
로컬 저장소에 있는 파일과 로컬 저장소에 있는 파일의 차이점을 찾고 싶습니다.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
.
많이 있습니다.difftool
Git에서 지원하는 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 비교가 완료됩니다.
로컬과 원격에서 서로 다른 경로가 있을 수 있다는 원래 질문에 대한 전체 답변은 다음과 같습니다.
git fetch origin
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
'programing' 카테고리의 다른 글
Oracle에서 MySQL로 마이그레이션 (0) | 2023.07.07 |
---|---|
생성자 주입 없이 서비스 인스턴스를 가져오는 중 (0) | 2023.07.07 |
MongoDB의 다국어 데이터 모델링 (0) | 2023.07.07 |
도커 컨테이너에서 UDP 브로드캐스트 전송 (0) | 2023.07.07 |
just unit testing을 위해 Vuex 액션을 수정할 수 있습니까? (0) | 2023.07.07 |