2014-07-07 2 views
0

LAN에 새 원격 저장소를 만들고 프로젝트를 추가합니다 (PROJECT 1, PROJECT 2).일부 원격 참조를 원격 저장소로 푸시하지 못했습니다.

USER A와 USER B는 한 번에 저장소를 복제하고 USER A는 PROJECT 1에서 변경을 수행하고 이러한 변경 사항을 적용했습니다.

사용자 B가 PROJECT 2의 변경을 수행했지만 PROJECT 1에서 변경하지 않았으며 데이터를 푸시하는 동안 그는 내용을 PROJECT 2 만 선택했지만 푸시하는 동안 오류가 발생합니다.

ERROR : 

error: failed to push some refs to http://gitbub.com 
hint: Updates were rejected because the remote contains work that you do 
hint: not have locally. This is usually caused by another repository pushing 
hint: to the same ref. You may want to first merge the remote changes (e.g., 
hint: 'git pull') before pushing again. 
hint: See the 'Note about fast-forwards' in 'git push --help' for details.` 

사용자 2에게 푸시를 허용하는 방법은 무엇입니까?

+1

: 병합을 소개 할


여러 혼자 git pull 그런 다음

x--x--x--x'----x' (origin/master) \ \ y--y--y--m (master) 

다음 풀 (수정 사항이 파일이 별도의 세트에서 수행되기 때문에) 여기에 필요하지 않은 어떤 커밋 'PROJECT1'과'PROJECT2'는 각각 자신의 repo가 ​​필요합니다. – jcm

답변

2

jcm으로 주석을 달았으므로 가장 쉬운 해결책은 project1과 2를 자신의 repos에서 sotred하는 것입니다. 그들은 다음, 같은 REPO에있는 경우

는하지만 :

사용자 2는 여전히 업데이트의 repo의 상단에 그/그녀의 작품을 리베이스해야합니다. 혼자 git pull에 비해

git pull --rebase 

,이 업데이트 된 원격 추적 브랜치의 상단에 해당 지역의 커밋을 재생할 수 있습니다. = git fetch + git rebase

git fetch

x--x--x--x--y--y--y (master): y means Project2 commits 
     | 
    (origin/master) 

git pull --rebase 의미 :

x--x--x--x'--x' (origin/master) 
     \ 
     y--y--y 

git rebase 의미 :

x--x--x--x'--x'--y'--y'--y' (master) 
      | 
     (origin/master) 

는 이제 git push 사소한 하나가 될 것입니다, 당신의 삶을 추가 원점 마스타 위에 커밋합니다.

User2의 작업이 User1의 작업과 분리 되었기 때문에 리베이스는 사용자 2의 커밋을 origin/master의 맨 위에 반복적으로 재생하고 (fast-forward) 푸시를 허용합니다.

두 프로젝트가 동일한 저장소에 있으므로 동일한 분기에서 수정 된 경우 해당 상황이 발생합니다.

좋은 해결 방법은 각 프로젝트마다 하나씩 두 개의 분기를 만드는 것입니다.

두 프로젝트가 모두 필요하면 밀어 넣기 전에 pull --rebase해야합니다.
making the rebase automatic on a git pull을 고려해 볼 수 있습니다.

x--x--x--x'----x'--x'---x' (origin/master) 
     \  \  \ 
     y--y--y--m--y--y--m (master 
관련 문제