programing

git branch, fork, fetch, merge, rebase 및 clone의 차이점은 무엇입니까?

yoursource 2023. 5. 7. 18:44
반응형

git branch, fork, fetch, merge, rebase 및 clone의 차이점은 무엇입니까?

Git에서 분기, 포크, 클론의 차이점을 알고 싶습니다.

마찬가지로, 제가 할 때 그것은 무엇을 의미합니까?git fetch…의 …git pull?

또한, 무이가 입니까?rebase와 비교하여 평균적인.merge?

어떻게 하면 개인적인 약속들을 함께 뭉치게 할 수 있습니까?

어떻게 사용되고, 왜 사용되며, 무엇을 나타냅니까?

깃허브는 어떤 역할을 합니까?

이 답변에는 많은 사람들이 그것에 대해 물었던 GitHub도 포함되어 있습니다.

로컬 리포지토리

Git(으)로 표시됨)가 ..git파일을 커밋할 위치이며 '로컬 저장소'입니다.이는 원격 저장소를 즉시 추가하고 커밋하는 SVN과 같은 시스템과는 다릅니다.

Git는 전체 파일을 저장하여 변경되는 파일의 각 버전을 저장합니다.또한 델타 변경을 통해 '재작성'하지 않고 개별 버전으로 이동할 수 있기 때문에 SVN과는 다릅니다.

Git는 파일을 전혀 '잠금'하지 않으므로 편집을 위한 '전용 잠금' 기능을 피할 수 있습니다(pvcs와 같은 이전 시스템이 떠오릅니다). 따라서 오프라인 상태에서도 모든 파일을 항상 편집할 수 있습니다.실제로 GitHub와 같은 원격 저장소로 풀 또는 가져오기/푸시하는 동안 파일 변경사항(동일한 파일 내!)을 함께 병합하는 놀라운 작업을 수행합니다.수동 변경(실제 파일 편집)을 수행해야 하는 유일한 경우는 두 변경이 동일한 코드 행을 포함하는 경우입니다.


나뭇가지

분기를 사용하면 기본 코드('마스터' 분기)를 보존하고 복사본(새 분기)을 만든 다음 해당 새 분기 내에서 작업할 수 있습니다.작업에 시간이 걸리거나 분기가 생성된 이후 마스터가 업데이트를 많이 받으면 마스터 분기에 대해 병합 또는 재배치를 수행해야 합니다(기록을 개선하고 충돌을 쉽게 해결하기 위해 자주 선호됨).작업을 마치면 분기에서 변경한 내용을 마스터 리포지토리로 다시 병합합니다.많은 조직에서 각 작업이 기능, 버그 또는 작업 항목이든 상관없이 분기를 사용합니다.다른 조직에서는 버전 업그레이드와 같은 주요 변경 사항에 대해서만 분기를 사용합니다.

포크: 분기를 사용하면 분기를 제어하고 관리하는 반면, 다른 사용자가 코드를 다시 받아들이는 것을 제어합니다.

일반적으로 지점을 운영하는 데는 두 가지 주요 접근 방식이 방법은 다음과 같습니다.첫 번째는 마스터 브랜치에서 대부분의 변경 사항을 유지하는 것입니다. 버전 변경과 같이 두 개의 브랜치를 서로 다른 요구에 사용할 수 있는 더 크고 오래 실행되는 경우에만 브랜치를 사용합니다.두 번째는 기본적으로 모든 기능 요청, 버그 수정 또는 잡무에 대해 분기를 만든 다음 이러한 분기를 실제로 주 마스터 분기에 병합할 시기를 수동으로 결정하는 것입니다.이것은 지루하게 들리지만, 이것은 일반적인 접근 방식이며 현재 제가 사용하고 권장하는 접근 방식입니다. 마스터 브랜치를 더 깨끗하게 유지하고 프로덕션으로 승격하는 마스터이기 때문입니다. 따라서 브랜치의 재배치 및 병합을 통해 테스트된 완전한 코드만 필요합니다.

분기 'in'을 마스터로 가져오는 표준 방법은 다음을 수행하는 것입니다.merge분기는 기록을 '정리'하기 위해 "기준 변경"될 수도 있습니다.이는 현재 상태에 영향을 미치지 않으며 '깨끗한' 기록을 제공하기 위해 수행됩니다.

기본적으로 이 아이디어는 특정 지점(일반적으로 마스터)에서 분기했다는 것입니다.당신이 분기한 이후로, '마스터' 그 자체는 그 분기점에서 앞으로 나아갔습니다.분기에서 수행한 모든 변경 사항을 최신 변경 사항과 함께 마스터의 현재 상태와 비교하여 재생하면 문제를 해결하고 기록을 이해하기가 더 쉬워집니다.따라서 프로세스는 변경 내용을 저장하고 '새' 마스터를 가져온 다음 변경 내용을 다시 적용합니다(기본 재배치 부분).기본 재배치는 병합과 마찬가지로 수동으로 해결해야 하는 충돌(예: 편집 및 수정)이 발생할 수 있습니다.

주의해야 할 한 가지 지침:
분기가 로컬이고 아직 원격으로 푸시하지 않은 경우에만 기본 재배치!
이것은 주로 재배치가 다른 사용자가 볼 수 있는 기록을 변경할 수 있기 때문이며, 다른 사용자는 자신의 커밋을 포함할 수 있습니다.

분기 추적

은 이이지분기다니입된정름▁that▁라는 이름의 가지입니다.origin/branch_name와는 로)branch_name 때 는 이 원격 리포지토리에서 코드를 밀고 당길 때 이 메커니즘이 실제로 발생합니다.예를 들어, 당신이git push라는 building_groups당신의 브랜치가 첫 번째로 갑니다.origin/building_groups원격 저장소로 이동합니다. 당신이약만.git fetch building_groups은 검색된파일파저장다니됩에 됩니다.origin/building_groups할 수 .그런 다음 이 분기를 로컬 복사본에 병합하도록 선택할 수 있습니다.우리의 연습은 항상 하는 것입니다.git fetch한 그고단병아수닌병동합합이리순한이 아닌 .git pull(한 단계에서 위의 두 가지 작업을 모두 수행합니다.)

새 분기를 가져오는 중입니다.

가져오기: .복제본의 초기 지점에 모든 분기가 있습니다.그러나 다른 개발자가 지점을 추가하여 원격으로 푸시하는 경우에는 해당 지점과 해당 지점의 이름을 로컬로 다운로드할 수 있도록 '알 수 있는' 방법이 필요합니다.이 작업은 다음을 통해 수행됩니다.git fetch추적 예: 추적 분기사를모여새변예든분분로하경기기저컬가를다장져니로소옵된)를 하여 모든 새 분기와 .origin/) 한 번 한번.fetch 캔, 할수있는는git branch --remote 및 추적지나다니합열을을 합니다.git checkout [branch]실제로 어떤 특정한 것으로 전환하는 것.

병합

병합은 다른 분기 또는 동일한 분기의 다른 버전(예: 로컬 분기와 원격이 동기화되지 않은 경우)의 코드 변경 사항을 결합하는 프로세스입니다.지점에서 작업을 개발하고 작업이 완료, 준비 및 테스트된 경우, 해당 작업을 다음과 같이 통합할 수 있습니다.master분점.이 작업은 다음 사용자가 수행합니다.git checkout master으로 master에 가지, 그다음git merge your_branch병합하면 동일한 파일에 대한 모든 다른 파일과 변경 사항도 함께 가져옵니다.즉, 파일 내부의 코드를 실제로 변경하여 모든 변경 사항을 병합합니다.

를 할때.checkoutmaster또한 다음 작업을 수행하는 것이 좋습니다.git pull origin master로컬 마스터에 병합된 원격 마스터의 최신 버전을 가져옵니다.변경된 마스변가경우경된즉터원격, 즉,▁if,,▁the경,moved forward은 그 기간 될 입니다.git pull그런 경우(마스터 변경) 다음을 수행하는 것이 좋습니다.git checkout your_branch그리고 나서.rebase마스터하기 위해 변경사항이 실제로 '새' 마스터 위에 '제거'됩니다.그런 다음 다음 다음 단락에 표시된 대로 마스터를 최신 상태로 유지합니다.

충돌이 없는 경우 마스터는 새 변경사항을 추가합니다.충돌이 발생하면 동일한 파일이 자동으로 병합할 수 없는 유사한 코드 행을 중심으로 변경되었음을 의미합니다. 이우경git merge new_branch해결해야 할 충돌이 있다고 보고합니다.파일을 편집하고(둘 다 변경 사항이 있음), 원하는 변경 사항을 선택하고, 문자 그대로 원하지 않는 변경 사항의 줄을 삭제한 다음 파일을 저장하여 '해결'할 수 있습니다. 사항은 변사항다같구은기표분시다니됩호로음과은경과 기호로 됩니다.========그리고.<<<<<<<<.

충돌을 해결한 후에는 다시 한 번 충돌합니다.git add그리고.git commit이러한 변경 사항을 적용하여 병합을 계속할 수 있습니다(이 프로세스 중에 Git에서 피드백을 받아 사용자를 안내합니다).

프로세스가 제대로 작동하지 않을 때는 다음과 같은 사실을 알게 될 것입니다.git merge --abort재설정하기에 매우 편리합니다.

대화형 기본 재배치 및 축소/재주문/커밋 제거

매일 '진행 중인 작업'으로 코드를 커밋하는 등 많은 작은 단계에서 작업을 수행한 경우에는 이러한 많은 작은 커밋을 몇 개의 더 큰 커밋으로 '소멸'하는 것이 좋습니다.이 기능은 동료와 코드 검토를 수행하려는 경우 특히 유용합니다.커밋을 통해 수행한 모든 '단계'를 다시 재생하려는 것이 아니라, 여기서 한 번의 커밋으로 이 작업에 대한 모든 변경 사항의 최종 효과(diff)가 발생한다고 말하고 싶은 것입니다.

이 작업을 수행할지 여부를 고려할 때 평가해야 할 핵심 요소는 여러 커밋이 동일한 파일 또는 여러 파일에 대해 수행되는지 여부입니다(이 경우 커밋을 스쿼시하는 것이 좋습니다).이 작업은 대화형 기본 재배치 도구를 사용하여 수행됩니다.이 도구를 사용하여 커밋을 스쿼시하거나 커밋을 삭제하거나 메시지를 바꿔 읽을 수 있습니다.를 들면, 들면를예,git rebase -i HEAD~10(참고: 이는 a가 아니라 a입니다.) 다음과 같은 메시지가 나타납니다.

Git의 대화형 리베이스

하지만 조심하고 이 도구를 '진저하게' 사용하세요.한 번에 하나씩 스쿼시/삭제/재주문을 수행하고 해당 커밋을 종료하고 저장한 다음 도구를 다시 입력합니다.커밋이 연속되지 않으면 커밋을 다시 정렬할 수 있습니다(필요에 따라 스쿼시).실제로 여기서도 커밋을 삭제할 수 있지만, 그럴 때 무엇을 하고 있는지 확실히 확인해야 합니다!

포크

Git 저장소에서의 협업에는 두 가지 주요 접근 방식이 있습니다.위에서 자세히 설명한 첫 번째 것은 사람들이 끌어다 주고 받는 가지를 통해 직접 전달됩니다.이러한 공동작업자는 SSH 키를 원격 저장소에 등록합니다.이렇게 하면 해당 리포지토리에 직접 푸시할 수 있습니다.단점은 사용자 목록을 유지해야 한다는 것입니다.다른 접근 방식인 포킹은 누구나 저장소를 '포킹'할 수 있도록 하며, 기본적으로 자신의 Git 저장소 계정에 로컬 복사본을 만들 수 있습니다.그런 다음 변경을 수행하고 완료되면 코드를 수락하기 위해 'Pull 요청'(실제로는 'Push' 및 실제 저장소 유지 관리자에 대한 'Pull' 요청)을 전송할 수 있습니다.

포크를 사용하는 두 번째 방법은 리포지토리에 대한 사용자 목록을 관리할 필요가 없습니다.


깃헙

GitHub(원격 저장소)는 이러한 저장소가 있는 경우(또는 추가된 저장소)에 커밋된 변경 사항을 일반적으로 푸시하거나 풀하는 원격 소스이므로 로컬과 원격은 실제로 매우 구별됩니다.하는 또 가 원격저를생또다원가저소라는 입니다..git원격 서버에 있는 디렉터리 구조입니다.

GitHub 웹 브라우저 GUI에서 'fork'할 때 이 버튼을 클릭할 수 있습니다.포크 버튼 이미지GitHub 계정에 코드 복사본('clone')을 생성합니다.처음 실행할 때는 약간 미묘한 차이가 있을 수 있으므로 코드 기반이 원래 소유자 또는 'forkfrom' 아래에 나열된 리포지토리를 계속 확인하고 다음과 같이 하십시오.

분기된 리포지토리 이름 이미지

로컬 복사본이 있으면 로컬 컴퓨터로 끌어다 놓으면 원하는 대로 변경할 수 있습니다. request " request"/"Pull request"" (Pull request"/"Pull request").꺼내기 요청 버튼 이미지그들은 을 ' 그리고 그들은 그것을 '안으로' 넣었습니다.

코드를 함께 작업하는 팀에게 더 일반적인 것은 저장소를 '클론'하는 것입니다(리포지토리의 메인 화면에서 '복사' 아이콘 클릭).그런 다음 로컬로 입력합니다.git clone 하면 할 수 ) 위치로 .이렇게 하면 로컬로 설정할 수 있으며 (공유) GitHub 위치로 밀고 당길 수도 있습니다.

클론

GitHub의 섹션에 나와 있는 것처럼 복제본은 리포지토리의 복사본입니다.원격 저장소가 있는 경우 다음을 실행합니다.git clone해당 URL에 대해 명령을 실행하면 저장소의 로컬 복사본 또는 복제본이 생성됩니다.이 클론에는 파일, 마스터 브랜치, 다른 브랜치, 모든 기존 커밋, 전체 셰방이 있습니다.이 복제본에서 추가 및 커밋을 수행하면 원격 저장소 자체가 이러한 커밋을 적용할 수 있습니다.이러한 로컬/원격 개념은 원격 저장소에 직접 커밋하는 SVN, PVCS, CVS 등과 같은 보다 전통적인 CVS(코드 버전 관리 시스템)와 달리 Git(및 Mercurial과 유사한 시스템)를 DVCS(Distributed Version Control System)로 만듭니다.

시각화

는 볼수 있습니다.
http://marklodato.github.com/visual-git-guide/index-en.html 및
http://ndpsoftware.com/.html#loc=indexhttp ://ndpsoftware.com/git-cheatsheet.html#loc=index

변경 내용이 작동하는 방식을 시각적으로 표시하려면 시각적 도구를 능가할 수 없습니다.gitg(gitx경우)는 가 ' 지도라고( (macOS의 경우) '런던 언더그라운드'( Underground하여 무엇을 , 상황이 변하는지, 통합되는지.런던 지하철), 누가 무엇을 했는지, 어떻게 상황이 변하는지, 분열되고 합병되는지 등을 보여주는 데 좋습니다.

또한 변경사항을 추가, 커밋 및 관리하는 데 사용할 수 있습니다!

gitg/gitx 인터페이스 이미지

gitg/gitx는 상당히 미미하지만 GUI 도구의 수는 계속해서 증가하고 있습니다.많은 Mac 사용자들은 brotherbard의 gitx 포크를 사용하며 Linux의 경우 직관적이면서도 강력한 인터페이스를 갖춘 스마트 깃을 사용하는 것이 좋습니다.

Smart-git GUI 이미지

GUI 도구를 사용하더라도 명령줄에서 많은 명령을 수행할 수 있습니다.

이를 위해, 나는 다음과 같은 별칭을 가지고 있습니다.~/.bash_aliases의 파일에서 됨)~/.bashrc각 터미널 세션의 파일):

# git
alias g='git status'
alias gcob='git checkout -b '
alias gcom='git checkout master'
alias gd='git diff'
alias gf='git fetch'
alias gfrm='git fetch; git reset --hard origin/master'
alias gg='git grep '
alias gits='alias | grep "^alias g.*git.*$"'
alias gl='git log'
alias gl1='git log --oneline'
alias glf='git log --name-status'
alias glp='git log -p'
alias gpull='git pull '
alias gpush='git push '

제 그리내깃다같음이 "은별칭다있"에 다음과 같은 ".~/.gitconfig파일 - 왜 이것들이 있습니까?
TAB 키를 사용한 분기 완료가 작동합니다!

그래서 다음과 같습니다.

[alias]
  co = checkout
  cob = checkout -b

사용 예: git co [branch]분기에 대한 <-> 탭 완료가 작동합니다.

GUI 학습 도구

https://learngitbranching.js.org/ 기본 개념 중 몇 가지를 배우는 데 유용할 수 있습니다.스크린샷:
비디오: https://youtu.be/23JqqcLPss0

마지막으로, 7명의 주요 생명 구조자들!

  1. 당신은 변경을 하고, 추가하고, 커밋하고(단, 밀지는 마세요), 그리고 나서 당신은 당신이 마스터에 있다는 것을 깨닫습니다!

     git reset [filename(s)]
     git checkout -b [name_for_a_new_branch]
     git add [file(s)]
     git commit -m "A useful message"
    
     Voila!  You've moved that 'master' commit to its own branch !
    
  2. 지점에서 일부 을 엉망으로 .git pull:

     git reset --hard origin/master  # You will need to be comfortable doing this!
    
  3. 로컬에서 변경을 시작하고 6개의 파일을 편집한 후에도 여전히 마스터(또는 다른) 브랜치에 있습니다.

     git checkout -b new_branch_name  # just create a new branch
     git add .                      # add the changes files
     git commit -m"your message"    # and commit them
    
  4. 현재 분기에 있는 특정 파일 하나를 엉망으로 만들고 해당 파일을 원격 저장소에서 마지막으로 꺼냈을 때의 상태로 기본적으로 '재설정'(변경 사항 손실)하려고 합니다.

     git checkout your/directories/filename
    

    이렇게 하면 실제로 파일이 재설정됩니다(많은 Git 명령과 마찬가지로 여기서 수행하는 작업의 이름이 잘 지정되지 않음).

  5. 로컬에서 몇 가지 변경을 수행하고, 작업하는 동안 손실되지 않도록 해야 합니다.git reset또는rebase는 종종 전체를 합니다.cp -r ../my_project ~/) 하거나 중요한 사항을 수 할 수 없을 Git에서 실수하거나 중요한 변경 사항을 잃을 수 있는지 확신할 수 없을 때.

  6. 당신은 기본을 바꾸고 있지만 상황은 엉망이 됩니다.

     git rebase --abort # To abandon interactive rebase and merge issues
    
  7. 를 Git 기를에다니에 합니다.PS1프롬프트(예: https://unix.stackexchange.com/a/127800/10043), 참조).

    프롬프트 이미지

    은 점은지입니다.selenium_rspec_conversion.

복제본은 단순히 저장소의 복사본입니다.표면적으로, 그 결과는 다음과 같습니다.svn checkout다른 리포지토리에서 소스 코드를 다운로드할 수 있습니다.Subversion과 같은 중앙 집중형 VCS와 Git와 같은 DVCS의 차이점은 Git에서 복제할 때 모든 기록 및 분기를 포함한 전체 소스 저장소를 실제로 복사한다는 것입니다.이제 컴퓨터에 새 리포지토리가 있고 모든 커밋이 해당 리포지토리로 이동됩니다.사용자가 이러한 커밋을 다른 리포지토리(또는 원래 리포지토리)로 밀어넣거나 공개적으로 액세스할 수 있는 경우 다른 사용자가 리포지토리에서 커밋을 꺼낼 때까지 아무도 변경 내용을 볼 수 없습니다.

분기는 리포지토리 내에 있는 것입니다.개념적으로, 그것은 발전의 실마리를 나타냅니다.일반적으로 마스터 브랜치가 있지만 일부 기능 xyz와 버그 abc를 수정하는 다른 브랜치가 있을 수도 있습니다.분기를 체크아웃하면 해당 분기에 커밋이 남아 다른 분기와 병합하거나 해당 분기에 다시 기본 설정할 때까지 다른 분기와 공유되지 않습니다.물론 Git는 분기가 구현되는 방법에 대한 기본 모델을 보기 전까지는 분기에 관한 한 약간 이상하게 보입니다.제가 직접 설명하기보다는(이미 너무 많이 말한 것 같습니다), Git 웹사이트에서 Git 모델이 분기하고 커밋하는 방법에 대한 "컴퓨터 과학" 설명을 링크하겠습니다.

http://eagain.net/articles/git-for-computer-scientists/

포크는 Git 개념이 아니라 정치적/사회적 아이디어입니다.즉, 일부 사람들이 프로젝트 진행 방식에 만족하지 않으면 소스 코드를 가져와서 원래 개발자와 분리하여 작업할 수 있습니다.그것은 포크로 간주될 것입니다.Git는 모든 사용자가 소스 코드의 "마스터" 복사본을 이미 가지고 있기 때문에 포크 작업을 쉽게 수행할 수 있습니다. 따라서 원래 프로젝트 개발자와의 관계를 끊는 것만큼 간단하며 SVN과 함께 해야 하는 것처럼 공유 저장소에서 기록을 내보낼 필요가 없습니다.

편집: 깃허브와 같은 사이트에서 사용하는 "포크"의 현대적인 정의를 몰랐기 때문에, 자세한 내용은 댓글과 아래 마이클 듀란트의 답변을 참조하십시오.

이 모든 것이 어떻게 조화를 이루는지에 대한 올리버 스틸의 이미지는 다음과 같습니다.

여기에 이미지 설명 입력

포크 대복제 - 둘 다 복사를 의미하는 두 단어

다이어그램을 참조하십시오.(Originally from http://www.dataschool.io/content/images/2014/Mar/github1.png).

.-------------------------.     1. Fork     .-------------------------.
| Your GitHub repo        | <-------------- | Joe's GitHub repo       |
| github.com/you/coolgame |                 | github.com/joe/coolgame |
| ----------------------- | 7. Pull Request | ----------------------- |
| master -> c224ff7       | --------------> | master -> c224ff7 (c)   |
| anidea -> 884faa1 (a)   |                 | anidea -> 884faa1 (b)   |
'-------------------------'                 '-------------------------'
    |                 ^
    | 2. Clone        |
    |                 |
    |                 |
    |                 |
    |                 |
    |                 | 6. Push (anidea => origin/anidea)
    v                 |
.-------------------------.
| Your computer           |  3. Create branch 'anidea'
| $HOME/coolgame          |
| ----------------------- |  4. Update a file
| master -> c224ff7       |
| anidea -> 884faa1       |  5. Commit (to 'anidea')
'-------------------------'

(a) - after you have pushed it
(b) - after Joe has accepted it
(c) - eventually Joe might merge 'anidea' (make 'master -> 884faa1')

포크

  • Joe의 원격 저장소에 연결된 원격 저장소(클라우드)의 복사본
  • 복사본을 로컬 repo 및 F*%$-up에 복제할 수 있습니다.
  • 작업이 완료되면 원격으로 다시 밀어 넣을 수 있습니다.
  • 그런 다음 꺼내기-요청을 클릭하여 Joe에게 프로젝트에 사용할 것인지 물어볼 수 있습니다.

복제

  • 로컬 레포(하드 드라이브)로 복사

다른 사람들에게 추가하기 위해, 포크 관련 노트.

기술적으로 레포를 복제하는 것과 레포를 단조하는 것은 같은 것이라는 것을 깨닫는 것이 좋습니다.수행:

git clone $some_other_repo

그리고 당신은 당신 자신의 등을 두드릴 수 있습니다. 당신은 방금 다른 레포를 포크했습니다.

Git는 VCS로서 사실상 복제 포크의cgit와 같은 원격 UI를 사용하여 "그냥 브라우징"하는 것 외에, git repo와 관련이 없는 것은 거의 없습니다. 포크의 레포 복제 중입니다.

하지만,

  • 누군가가 내가 레포 X를 포크했다고 말할 때, 그들은 예를 들어, 다른 사람들에게 노출시키기 위해, 또는 다른 접근 제어 메커니즘(예: Github 액세스가 없지만 회사 내부 계정을 가진 사람들이 협업할 수 있도록)을 적용하기 위해 레포의 복제본을 다른 곳에 만들었다는 것을 의미합니다.

    는 사실이 다른 명령어로 작성되었을 가능성이 높습니다.git clone다른 사용자의 노트북과 달리 서버의 어딘가에서 호스팅될 가능성이 가장 높으며, 대부분 약간 다른 형식(즉, 작업 트리가 없는 경우)이 모두 기술적 세부 사항일 뿐입니다.

    다른 분기, 태그 또는 커밋 집합을 포함할 가능성이 가장 높다는 사실이 이들이 처음에 이 작업을 수행한 이유일 것입니다.

    ("포크"를 클릭하면 Github이 수행하는 작업은 설탕을 첨가한 복제일 뿐입니다. 이는 레포를 복제하여 사용자 계정에 넣고 "포크된"을 어딘가에 기록하고 "업스트림"이라는 원격 이름을 추가하며 가장 중요한 것은 멋진 애니메이션을 재생합니다.)

  • 누군가가 제가 repo X를 복제했다고 하면, 그들은 의도적으로 연구하거나, 가지고 놀거나, 기여하거나, 그 안에 소스 코드로 무언가를 구축하여 노트북이나 데스크톱에 로컬로 복제본을 생성했다는 것을 의미합니다.

Git의 장점은 이 모든 것을 완벽하게 맞춰준다는 것입니다. 이 모든 저장소는 공통된 부분을 공유합니다. 블록 커밋 체인을 사용하면 이러한 모든 저장소 간에 적합한 대로 변경 사항을 안전하게 병합할 수 있습니다(아래 참고 참조).


참고: 체인의 공통 부분을 다시 쓰지 않는 한, 그리고 변경 사항이 충돌하지 않는 한 "안전하게".

언급URL : https://stackoverflow.com/questions/3329943/what-are-the-differences-between-git-branch-fork-fetch-merge-rebase-and-clon

반응형