문제

나는 Windows (MSYSGIT)를 사용하여 내가하고있는 일부 디자인 작업에 대한 변경 사항을 추적했습니다.

오늘 저는 다른 PC에서 작업하고 있습니다 (원격 repo 포함 brian) 그리고 지금 나는 오늘 완료된 편집물을 노트북의 일반 로컬 버전으로 다시 병합하려고 노력하고 있습니다.

내 노트북에서 나는 사용했다 git pull brian master 변경 사항을 내 로컬 버전으로 가져옵니다. 모든 것은 주요 Indesign 문서와는 별도로 괜찮 았습니다. 이것은 갈등으로 보여줍니다.

PC의 버전 (brian)은 내가 보관하고 싶은 최신 제품이지만 명령이 저장소에 어떤 명령을 사용하도록 지시하는지 모르겠습니다.

파일을 랩톱에 직접 복사하려고 시도했지만 전체 병합 프로세스를 중단하는 것 같습니다.

누구든지 나를 올바른 방향으로 가리킬 수 있습니까?

도움이 되었습니까?

해결책

git checkout 수락합니다 --ours 또는 --theirs 이와 같은 경우 옵션. 따라서 합병 충돌이 있고 병합하는 지점에서 파일을 원한다는 것을 알고 있다면 다음을 수행 할 수 있습니다.

$ git checkout --theirs -- path/to/conflicted-file.txt

해당 버전의 파일을 사용합니다. 마찬가지로, 당신이 당신의 버전을 원한다면 (합병되는 것) 버전을 사용할 수 있습니다.

$ git checkout --ours -- path/to/conflicted-file.txt

다른 팁

충돌을 수동으로 수동으로 해결하고 (파일을 복사) 파일을 복사했거나 로컬 버전을 사용하더라도 파일을 커밋해야합니다.

git commit -a -m "Fix merge conflict in test.foo"

GIT는 일반적으로 합병 후 자동 커뮤니티를하지만 충돌을 감지 할 때 자체적으로 해결할 수 없으며, 모든 패치를 적용하고 나머지는 수동으로 해결하고 커밋하도록 남겨 둡니다. 그만큼 git merge man page,, GIT-SVN 충돌 코스 또는 이것 블로그 항목은 그것이 어떻게 작동하는지에 대해 약간의 빛을 비출 수 있습니다.

편집하다: 아래 게시물을 참조하십시오. 실제로 파일을 직접 복사 할 필요는 없지만 사용할 수 있습니다.

git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt

원하는 파일의 버전을 선택합니다. 파일 복사 / 편집은 두 버전을 혼합하려는 경우에만 필요합니다.

MIPADIS 대답을 올바른 것으로 표시하십시오.

이 문제를 극복 할 수도 있습니다

git mergetool

원인 git 충돌 한 바이너리의 로컬 카피를 만들고 기본 편집기를 생성하려면 다음과 같습니다.

  • {conflicted}.HEAD
  • {conflicted}
  • {conflicted}.REMOTE

분명히 텍스트 편집기에서 Binaries 파일을 유용하게 편집 할 수는 없습니다. 대신 새를 복사합니다 {conflicted}.REMOTE 파일 오버 {conflicted} 편집자를 닫지 않고. 그런 다음 편집기를 닫을 때 git 노출되지 않은 작업 카피가 변경되었고 합병 충돌이 일반적인 방식으로 해결되었음을 알 수 있습니다.

현재 브랜치에 버전을 유지하여 해결하려면 (병합하는 지점에서 버전을 무시) 파일을 추가하고 커밋하십시오.

git commit -a

병합중인 브랜치의 버전으로 현재 지점의 버전을 덮어 쓰려면 해당 버전을 먼저 작업 디렉토리로 검색 한 다음 추가/커밋해야합니다.

git checkout otherbranch theconflictedfile
git commit -a

더 자세히 설명했습니다

Mipadi의 대답은 저에게는 효과가 없었습니다. 나는 이것을해야했습니다.

git 체크 아웃 -ours Path/to/file.bin

또는 버전을 계속 병합하려면 다음과 같습니다.

git 체크 아웃 -theirs path/to/file.bin

그 다음에

Git Add Path/to/file.bin

그리고 나는 "git grgetool"을 다시 할 수 있었고 다음 갈등을 계속할 수있었습니다.

로부터 git checkout 문서

git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...

--ours
--theirs
인덱스에서 경로를 확인할 때 2 단계 (2 단계)를 확인합니다 (ours) 또는 #3 (theirs) 무너지지 않은 경로.

지수는 이전의 실패 합병으로 인해 무너지지 않은 항목을 포함 할 수 있습니다. 기본적으로 인덱스에서 그러한 항목을 체크 아웃하려고하면 체크 아웃 작업이 실패하고 아무것도 체크 아웃되지 않습니다. 사용 -f 이 무자비한 항목을 무시합니다. 병합의 특정 측면의 내용은 사용하여 색인에서 체크 아웃 할 수 있습니다. --ours 또는 --theirs. 와 함께 -m, 작업 트리 파일에 대한 변경 사항을 폐기하여 원래 충돌 병합 결과를 재현 할 수 있습니다.

이 절차는 GitHub에 풀 요청을 제출 한 후 이진 파일 충돌을 해결하는 것입니다.

  1. 따라서 GitHub에서는 풀 요청이 이진 파일에 충돌이 있음을 발견했습니다.
  2. 이제 로컬 컴퓨터의 동일한 git 브랜치로 돌아갑니다.
  3. 귀하는 (a)이 바이너리 파일을 다시 만들 / 재건하고 (b) 결과 된 바이너리 파일을 동일한 GIT 분기에 커밋합니다.
  4. 그런 다음이 같은 git 브랜치를 다시 Github로 밀어 넣습니다.

Github에서는 풀 요청에서 충돌이 사라질 것입니다.

나는 비슷한 문제를 발견했지만 (병합 될 때 충돌을 일으킨 일부 바이너리 파일이 포함 된 커밋을 가져오고 싶었지만) GIT를 완전히 사용하여 수행 할 수있는 다른 솔루션을 발견했습니다 (즉, 파일을 수동으로 복사 할 필요가 없습니다). 나는 여기에 포함 할 것이라고 생각했다. 그래서 최소한 나는 그것을 필요로 할 때 그것을 기억할 수있다. :) 단계는 다음과 같습니다.

% git fetch

이것은 원격 저장소에서 최신 커밋을 가져옵니다 (설정에 따라 원격 브랜치 이름을 지정해야 할 수도 있지만 병합하려고 시도하지 않습니다. 그것은 커밋을 fetch_head에 기록합니다

% git checkout FETCH_HEAD stuff/to/update

이것은 내가 원하는 바이너리 파일의 사본을 가져 와서 원격 브랜치에서 가져온 버전으로 작업 트리의 내용을 덮어 씁니다. GIT는 병합을 시도하지 않으므로 원격 브랜치의 바이너리 파일의 정확한 사본으로 끝납니다. 일단 완료되면 Normal처럼 새 사본을 추가/커밋 할 수 있습니다.

이진 파일의 Diff/Merge를 Windows의 GIT로 관리하기위한 두 가지 전략을 발견했습니다.

  1. Tortoise Git을 사용하면 파일 확장자를 기반으로 다양한 파일 유형에 대한 Diff/Merge 도구를 구성 할 수 있습니다. 2.35.4.3을 참조하십시오. Diff/Merge Advanced 설정 http://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html. 물론이 전략은 사용 가능한 적절한 차이/병합 도구에 의존합니다.

  2. GIT 속성을 사용하여 바이너리 파일을 텍스트로 변환하기 위해 도구/명령을 지정한 다음 기본 Diff/Merge 도구가 해당 작업을 수행하도록 할 수 있습니다. 보다 http://git-scm.com/book/it/v2/customizing-git-git-attributes. 이 기사는 메타 데이터를 사용하여 이미지를 diff의 예를 제시합니다.

소프트웨어 모델의 이진 파일로 작업하기위한 두 가지 전략을 모두 얻었지만 구성이 쉬웠 기 때문에 거북이 git과 함께 갔다.

이진이있는 경우 DLL 이상의 것 또는 할 수있는 것 직접 편집되었습니다 이미지 또는 블렌드 파일처럼 (그리고 하나의 파일 또는 다른 파일을 쓰레기/선택 할 필요가 없음) 실제 병합은 다음과 같습니다.

바이너리 파일에 대한 DIFF 도구를 검색하는 것이 좋습니다. 예를 들어 이미지 파일에 대한 무료 파일이 예를 들어 있습니다.

그리고 그들을 비교하십시오.

파일을 비교하기 위해 Diff 도구가 없으면 원래 생성기 빈 파일의 (즉, 편집자가 있습니다 Blender 3D와 마찬가지로 파일을 수동으로 검사하고 로그를보고 다른 사람에게 포함 해야하는 내용을 물어볼 수 있습니다). https://git-scm.com/book/es/v2/git-tools-advanced-merging#_manual_remerge

$ git show :1:hello.blend > hello.common.blend $ git show :2:hello.blend > hello.ours.blend $ git show :3:hello.blend > hello.theirs.blend

Excel에 GIT 워크 플로우를 사용합니다. https://www.xltrail.com/blog/git-workflow-for-excel 내 이진 파일의 대부분을 해결하기위한 응용 프로그램 관련 문제는 병합 문제를 병합합니다. 이 오픈 소스 앱은 너무 많은 시간을 소비하지 않고 생산적으로 문제를 해결하는 데 도움이되며 체리가 혼동없이 올바른 버전의 파일을 선택할 수 있습니다.

내 경우는 버그처럼 보인다 .... git 2.21.0 사용

나는 당기기를했다 ... 그것은 이진 파일에 대해 불평했다 :

warning: Cannot merge binary files: <path>
Auto-merging <path>
CONFLICT (content): Merge conflict in <path>
Automatic merge failed; fix conflicts and then commit the result.

그리고 여기서 답을 얻지 못한 것은 어떤 의미가 있는지에 대한 결과가 없었습니다.

내가 지금 가지고있는 파일을 보면 ... 편집 한 파일입니다. 내가하는 경우 :

git checkout --theirs -- <path>
git checkout --ours -- <path>

나는 출력을 얻는다 :

Updated 0 paths from the index

그리고 여전히 내 버전의 파일이 있습니다. rm에 체크 아웃하면 대신 1이라고 말하지만 여전히 내 버전의 파일을 제공합니다.

git grgetool은 말한다

No files need merging

그리고 git 상태가 말합니다

    All conflicts fixed but you are still merging.
    (use "git commit" to conclude merge)

한 가지 옵션은 커밋을 취소하십시오...하지만 나는 운이 좋았고 많은 커밋을 받았고,이 나쁜 것은 첫 번째였습니다. 나는 그것을 반복하는 데 시간을 낭비하고 싶지 않습니다.

그래서이 광기를 해결하기 위해 :

방금 달렸습니다

git commit

원격 버전을 잃고 추가 이진 파일을 저장하는 공간을 낭비 할 것입니다 ... 그런 다음

git checkout <commit where the remote version exists> <path>

원격 버전을 돌려줍니다

그런 다음 파일을 다시 편집 한 다음 커밋하고 푸시합니다. 이는 아마도 이진 파일의 다른 사본으로 공간을 낭비하는 것을 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top