N 사용자가 기계이고 모두 동일한 속도로 실행되는 경우 그렇습니다. 그러면이 문제가 발생합니다.
실제로 4 명의 배우 만있는 문제를 살펴보고 그 중 3 명이 실제로이 문제가 있는지 확인해 봅시다. 우리의 네 명은 캐롤, 데이비드, 엠마, 팰론입니다.
예제에서와 같이 중앙 저장소는 커밋 A와 B로 시작됩니다. 어쨌든, 캐롤, 데이비드, 에머, 팰론 모두 네 번에 새로운 커밋을 끝내고 14 : 17 : 23.2에 밀어 넣으 려하지만 캐롤의 컴퓨터가 가장 빠르기 때문에 중앙 저장소에 커밋됩니다. :
A--B--C <-- master
데이비드, 엠마, 그리고 펄롱이 자신의 푸시가 빠르게 전달 아님을 알리는 오류 메시지가 그들이 다시 시도해야합니다. 그러나 팰런의 전화가 울리거나 (텍스트로 윙윙 거리다) 그는 그것에 정신이 산다. 한편 데이비드와 엠마는 푸시가 실패했다는 사실을 모두 알고 있습니다.
David는 전에 이것을 보지 못했습니다. 그래서 그는 이제 StackOverflow를 검색하여 자신이해야 할 일을 찾아야합니다. Emma는 Git에 더 익숙합니다. 그녀는 git fetch && git rebase && git show
을 실행하고 그녀의 변화가 좋음을 확인합니다. 지금은 14 : 18 : 09.6입니다. git push origin master
에서 엠마 종류와 그녀의 밀어가 진행됩니다
A--B--C--E
다윗이 지금에 대한 REBASE 대 병합 읽고 있습니다. Fallon은 14:19:39에 전화를 끊거나 그 실패를 알아 차립니다. David와 Fallon은 모두 git pull
을 실행합니다 (Emma만큼 똑똑하지 않고 rebase가 더 우수하다는 것을 인식하지 못합니다). 자신의 저장소가 될 :
A--B--C--E--M <-- master
\ /
D----/
과 :
A--B--C--E--G <-- master
\ /
F----/
각각을. 몇 가지 기적으로, 그들은 거의 같은 시간에, 14 : 21 : 01 분량으로 Fallon을 약간 앞당겨서 밀어 붙이기 때문에 David는 또 다른 "빨리 감기"오류를 얻습니다. 중앙 저장소 지금 거울의 펄롱의 저장소 :
A--B--C--E--G <-- master
\ /
F----/
데이비드 물론, 약뿐만 아니라 리베이스 읽고, 그래서 그는 모든 정말의 도덕적 동등를 실행 않을 때 (어떻게 든 git pull
에서 마술 다르다 생각 git pull --rebase
을 시도 git fetch && git merge
대신 git fetch && git rebase
).
A--B--C--E--G--D' <-- master
|\ /
| F----/
\
D [abandoned]
을 그는 14시 21분 28초에서 다시 git push
을 시도하고 성공이 사본은 자신이 G
의 끝에 D
을 커밋합니다. 중앙 저장소는 master
에 커밋 D'
을 가져오고 모든 사용자는 만족합니다.
David는 두 번 가져와야하는 유일한 사람이며 전체 프로세스는 약 4 분이 걸렸습니다. 물론 그는 여전히 git pull
이 실제로 어떻게 작동하는지 이해하지 못하지만 적어도 현재 리베이스를 사용하는 것을 알고 있습니다. :-)
어떻게 중앙 병합이 N-1 문제를 해결할 것인가? 모든 사용자는 여전히 다른 사용자가 변경 한 내용을 얻기 위해 저장소를 동기화해야합니다. – akash93
주요 문제로 생각되는 동시성 문제는 실제로는 사소한 문제입니다. 누군가가 당신을 강타하면, 당신은 병합/리베이스를하고 그것을 처리해야합니다. –
당신은 100 명의 사용자가 동시에 푸시하려고하고 마지막 1 명이 푸시 할 수 있기 전에 99 시간을 끌어야 만한다면 실제로 중요한 문제가 될 것이라고 생각하지 않습니다. event git는 새로운 푸시를 통합하는 데 약간의 시간이 걸린다. – runitfirst