이것은 직관적이지 않은 것처럼 들리지만 내 말을 들어보십시오.
git으로 실험을 시작하도록 장려하십시오
git의 흥미로운 점 중 하나는 로컬 작업을 완전히 안전하게 만드는 것이 놀랍도록 쉽다는 것입니다. 내가 git을 처음 사용했을 때, 내가 찾은 것 중 하나는 무언가를 망 쳤을 경우를 대비하여 전체 디렉토리 를 백업 으로 압축 하는 것이 었 습니다. 나중에이 거대한 kludge과 거의 절대 실제로 필요한 작업을 보호하는 것입니다,하지만 그것은 존재의 미덕이 있다는 것을 발견 매우 안전하고 매우 당신이 일을 어떻게하고있는 지옥에서 무엇을 알 수없는 경우에도, 간단하게 시도하려는 명령이 나타납니다. 이 작업을 수행 할 때 피해야하는 유일한 방법은 push
입니다. 아무것도 밀지 않으면 원하는 것을 시도 할 수있는 100 % 안전한 방법입니다.
물건을 시험해 보는 것에 대한 두려움은 자식 학습에 가장 큰 장애 중 하나입니다. 그것은 당신에게 모든 것을 통제 할 수 있게 해줍니다 . 실제로 대부분의 일상적인 작업에서 매우 안전한 몇 가지 작업을 수행 할 수 있지만 어떤 명령을 탐색해야하는지 알아볼 수 있습니다.
그들에게 안전 감각을 부여함으로써 , 그들은 스스로 일을 수행하는 방법을 알아 내려고 훨씬 더 기꺼이 할 것입니다. 또한 로컬 컴퓨터에서 자신에게 적합한 개인 작업 흐름을 찾을 수 있습니다. 그리고 모든 사람이 로컬 에서 똑같은 일을하지 않는다면, 그들이 추진 하는 표준을 준수하는 한 괜찮습니다 . 그렇게하기 위해 작업을 수행하기 전에 전체 리포지토리를 압축해야하는 경우 괜찮습니다. 그들은 일을하고 시도 할 때 더 좋은 방법으로 일을 할 수 있습니다. 뭐든지 자신이 시작 얻기 위해 노력하고 물건을하고 무엇을보고.
그렇다고 훈련이 무가치하다는 의미는 아닙니다. 반대로 훈련은 기능, 패턴 및 규범을 소개하는 데 도움이 될 수 있습니다. 그러나 일상 생활에서 앉아서 실제로 일을하는 것을 대체하지는 않습니다 . git이나 SVN은 수업에 갈 수있는 것이 아니며 모든 것을 알고 있습니다. 당신은해야 사용할 그들과 어떤 기능에 익숙해하는 문제를 해결하기 위해 그들을 잘하는 문제에 대한 적합하다.
git의 내용을 배우지 못하게하십시오.
나는 당신이 그들에게 가르치고있는 것 중 하나에 반대되는 것을 밀어 붙이는 것에 대해 언급하지 않았습니다. 나는 당신이 그들에게 이것을하도록 말하고 그 반대를 시작하라고 말해야한다고 믿습니다. Git에는 기본적으로 5 개의 "장소"가 있으며 변경이 가능합니다.
- 디스크에서 커밋되지 않은
- 단계적이지만 완결되지 않은
- A의 지역 커밋
- 현지 은신처에서
- 원격 리포지토리 (커밋 및 태그 만 다른 리포지토리간에 푸시 및 풀링 됨)
한 번에 모든 것을 끌어 당기도록 장려하는 대신이 5 가지 장소를 활용하도록 장려하십시오. 그들에게 다음을 권장하십시오.
이를 통해 모든 사람이 공개적으로 제공 하기 전에 자신의 작업을 확인하도록 권장하므로 실수를 빨리 포착 할 수 있습니다. 그들은 및 SVN 달리, 그들이 할 수있는 "즉 내가 원하지 않는 것을 잠깐,"커밋 생각의 볼 돌아가서 그들이 밀어 넣기 전에 다시 시도하십시오.
변경 사항의 위치 를 이해 하는 데 익숙해지면 단계를 건너 뛸 때와 특정 작업을 결합하는 시점을 결정할 수 있습니다 (이미 가져 오기 + 병합을 알고 있기 때문에 풀 때 또는 커밋 및 푸시 옵션을 클릭하는 시점) .
이것은 실제로 SVN에 비해 git의 큰 이점 중 하나이며 git은 이러한 사용 패턴을 염두에두고 설계되었습니다 . 반면 SVN은 중앙 리포지토리를 가정하므로 git 도구가 동일한 워크 플로에 대해 최적화되지 않은 경우 놀라운 일이 아닙니다. SVN에서 커밋이 잘못되면 실수를 취소하기위한 새로운 커밋이 유일합니다.
이렇게하면 실제로 다음 전략으로 이어질 것입니다.
지역 지점 을 사용하도록 격려
로컬 브랜치는 실제로 공유 파일 작업의 많은 어려움을 완화시킵니다. 나는 내 자신의 지점에서 원하는 모든 변경을 할 수 있으며, 그것을 밀지 않기 때문에 누구에게도 영향을 미치지 않습니다. 그런 다음 시간이 오면 동일한 병합 및 리베이스 전략을 모두 쉽게 사용할 수 있습니다.
- 로컬 브랜치를 리베이스하여 마스터로 합병 할 수 있습니다.
- 마스터에서 일반 병합 (새 커밋 만들기)을 사용하여 로컬 지점의 변경 사항을 가져올 수 있습니다.
- 내 지점이 구제하기에 너무 엉망이라고 생각하면 전체 로컬 지점을 마스터의 단일 커밋으로 병합 할 수 있습니다.
현지 지점을 사용하는 것도 체계적인 지점 전략을 수립하기에 좋은 출발입니다. 사용자가 자신의 브랜칭 요구를 더 잘 이해하는 데 도움이되므로 모든 사람이 들었 기 때문에 Gitflow에 빠지지 않고 요구와 팀의 현재 이해 / 기술 수준을 기반으로 전략을 선택할 수 있습니다.
요약
간단히 말해서, git은 SVN이 아니며 그렇게 취급 될 수 없습니다. 다음을 수행해야합니다.
- 안전한 실험을 장려함으로써 두려움을 제거하십시오.
- git의 차이점을 이해하도록 도와 주어 이것이 일반적인 워크 플로우를 어떻게 변화시키는 지 확인할 수 있습니다.
- 문제를보다 쉽게 해결하는 데 도움이되는 기능을 이해하도록 도와줍니다.
이것은 표준 세트 구현을 시작할 수있을 때까지 점차적으로 더 나은 git 사용법을 채택 하는 데 도움이됩니다 .
특정 기능
당장 다음과 같은 아이디어가 도움이 될 수 있습니다.
리베이스
당신은 rebase를 언급했고 실제로 당신의 질문에서 그것을 이해하지 못한다고 언급했습니다. 여기 내 조언이 있습니다 : 방금 설명한 것을 시도해보십시오. 다른 사람이 일부 변경 사항을 푸시하는 동안 로컬로 변경하십시오. 로컬로 변경 사항을 커밋하십시오 . 저장소 디렉토리를 백업으로 압축하십시오. 상대방의 변경 사항을 가져옵니다. 이제 rebase 명령을 실행하고 커밋에 어떤 영향이 있는지 확인하십시오! 끝없는 블로그 게시물을 읽거나 rebase 및 사용 방법에 대한 교육을받을 수 있지만 실제로 사용하는 것을 대체하는 것은 아닙니다. 그래서 시도 그것을 밖으로.
merge.ff=only
이것은 개인적인 취향의 문제가 될 것이지만, 이미 충돌 처리에 문제가 있다고 언급했기 때문에 적어도 일시적으로 추천 할 것입니다. 다음으로 설정 merge.ff
하는only
것이 좋습니다 .
git config --global merge.ff only
"ff"는 "빨리 감기"를 나타냅니다. 빨리 감기 병합은 git이 다른 커밋의 변경 사항을 결합 할 필요가없는 경우입니다. 단지 그래프의 직선을 따라 분기의 포인터를 새로운 커밋으로 이동시킵니다.
이것이 실제로하는 일은 git이 자동으로 병합 커밋을 만들지 못하게하는 것입니다. 따라서 로컬로 무언가를 커밋 한 다음 병합 커밋을 만들려고 시도하지 않고 잠재적으로 사용자가 충돌을 처리하지 않고 다른 사람의 변경 사항을 가져 오면 병합이 실패합니다. 실제로 git은 fetch
. 로컬 커밋이 없으면 병합이 정상적으로 진행됩니다.
이를 통해 사용자는 커밋을 시도하기 전에 다른 커밋을 검토 할 수 있으며, 커밋 을 가장 잘 처리하는 방법에 대한 결정을 내릴 수 있습니다. 리베이스하거나 병합을 계속 진행 git merge --no-ff
하거나 (구성을 무시하는 데 사용) 변경 사항을 병합하지 않고 나중에 처리 할 수도 있습니다. 이 작은 속도 충돌은 팀이 병합에 대한 잘못된 결정을 피하는 데 도움이 될 것이라고 생각합니다. 병합 처리에 익숙해지면 팀을 끌 수 있습니다.