콘텐츠로 건너뛰기
GitTree

레슨 10 · 일상 업무

업스트림과 혼동하지 않고 리모컨을 연결하세요

로컬 베어 오리진을 추가하고 메인 브랜치를 가져온 다음 의도적으로 로컬 메인 트랙을 선택합니다. 원격 이름, 원격 추적 참조 및 업스트림 설정이 세 가지 다른 것임을 증명하십시오.

이 브라우저에 진행 상황이 저장되었습니다.

재생하면 YouTube에서 동영상이 로드됩니다(개인정보 보호 강화 모드).

영어 내레이션 · English and Arabic 캡션

비디오 페이지 열기YouTube에서 시청하기

무엇을 배울 것인가

  • 오리진, 오리진/메인 및 메인의 업스트림 구성을 구별합니다.
  • 각 변경 사항에 대해 원격 추가, 업스트림 가져오기 및 선택을 설명합니다.
  • 공급자 자격 증명 없이 GitTree를 실제 로컬 베어 저장소에 연결합니다.
  • 기능 분기가 로컬로 유지되고 게시되지 않음을 증명합니다.

시작하기 전에

원래 gittree-features에서 9강이 끝난 곳에서 시작하세요. 체크아웃된 기능/가격 카드에는 워크플로 카드 커밋 F1이 있습니다. main에는 기록 문서 H5를 통해 5개의 커밋이 있습니다. 둘 다 깨끗하고 원격이 존재하지 않으며 dist는 무시됩니다. 이는 데모 참조이며 이 웹사이트의 브랜치를 변경하라는 지침이 아닙니다.

동영상은 Ubuntu 24.04에서 Git 2.52.0 및 GitTree 2.0으로 녹화되었습니다. 문서, 원격, 가져오기 및 업스트림이 앱에서 수행되었습니다. 베어 대상, 추가 전용 상태 및 검사가 터미널에서 실행되었습니다. macOS 또는 Windows에서는 아무것도 실행되지 않았으며 Ubuntu는 기록된 유일한 Linux 시스템입니다. 아래 Command 키 코드는 앱의 키맵에서 나옵니다. GitTree의 검사된 Git 플로어는 2.39.0입니다. 로그인하면 로컬 Git 전송 및 업스트림 구성이 무료 플랜에 적용됩니다. 공급자 통합은 다른 제한 기능입니다.

모든 소스 체크아웃 외부에 하나의 빈 형제 대상 gittree-features-origin.git을 예약합니다. 기존 디렉토리를 바꾸지 마십시오. 베어 저장소는 이 프로젝트의 기본 저장소에서 시드됩니다. 이는 GitLab 설치, GitHub 저장소, 백업 서비스 또는 CI 실행기가 아닙니다. 복제 대상이 존재하는 경우 삭제하지 말고 중지하고 식별하십시오.

추가 전용 예측의 경우 이 녹음 저장소에서 백그라운드 가져오기가 꺼져 있어야 합니다. Command+(Ctrl+, Ubuntu에서)로 Preferences를 열고 저장소 자체 이름 아래의 gittree-features 페이지를 선택한 다음 Auto-fetch interval에 0를 입력하고 Apply를 입력한 후 Saved 및 Exit Preferences을 기다립니다. 앱은 이를 Git의 구성이 아닌 자체 리포지토리별 설정에 저장합니다. 나중에 복원하려면 이전 값을 기록해 두십시오. 앱 전체 간격이나 다른 저장소를 변경하지 마십시오.

개념

remote은(는) 전송 주소 및 가져오기 규칙의 이름을 지정하는 저장소-로컬 구성입니다. 원산지는 내장된 중앙 기관이 아닌 관례입니다. 이를 추가하면 이 데모의 구성이 작성됩니다. 주소에 접속하거나 목적지를 생성하거나 지점을 업로드하지 않습니다.

refs/remotes/origin/main과 같은 remote-tracking ref은 가져오기를 통해 업데이트되는 로컬 레코드입니다. 서버 브랜치 refs/heads/main 자체가 아닙니다. 오리진을 추가한 직후에는 여기에 오리진/메인이 없습니다. Fetch는 개체/참조를 가져오지만 HEAD를 전환하거나 작업 페이지를 병합, 리베이스 또는 교체하지 않습니다.

upstream은 로컬 분기에 대해 저장된 관계입니다. 여기서는 Branch.main.remote = 원점, Branch.main.merge = refs/heads/main입니다. 이를 선택하면 나중에 분기 기본 트랙을 가져온 명령이 알려집니다. 커밋을 생성하거나 누락된 기록을 가져오거나 기능/가격 카드를 게시하지 않습니다.

이는 주소록 항목, 수집한 마지막 메시지, 따라갈 대화 선택에 비유됩니다. 서로 관련되어 있지만 주소를 저장하는 것은 메시지를 받거나 보내는 것이 아닙니다.

상태 효과

액션작업 트리/인덱스로컬 참조/구성서버
메인으로 전환H5의 녹음 파일을 선택하세요HEAD가 메인에 연결됨변경되지 않음
문서 커밋색인/작업은 H6에 동의합니다.H6으로의 주요 발전변경되지 않음
베어 카피 준비변경되지 않은 원본원본에는 아직 출처가 없습니다.별도의 로컬 메인은 H6에서 시작됩니다.
원격 추가…변경되지 않음원본 URL/가져오기 구성만변경되지 않음
모두 가져오기변경되지 않음원점/기본은 H6이 됩니다. 획득한 물건읽기, 수정되지 않음
업스트림 설정…변경되지 않음메인의 원격/병합 구성 세트변경되지 않음

F1은 로컬 기능을 유지합니다. 이제 기본/기능 그래프에는 H5의 양쪽에 하나의 고유한 커밋이 있습니다. 즉, 기본 문서, 기능 워크플로 카드입니다. 병합도 아닙니다.

전체 프로젝트 변경

이 파일을 생성하는 기본 before으로 전환하세요. 전체 UTF-8/LF 본문과 최종 줄 바꿈을 사용하여 docs/remotes.md을 만듭니다.

파일 발췌 · markdown
# GitTree Features remotes

origin names a separate local bare repository used only for this course.
Its file:// URL is a transport address, not a GitLab project or a login.
main tracks origin/main after an explicit fetch and upstream selection.
origin/main is a local record of the last fetched remote main.
Adding a remote does not fetch, push or publish any branch.
feature/pricing-cards remains local and has no upstream in this checkpoint.
No credentials or machine-specific absolute paths are stored in this document.

커밋 제목: docs: record remotes-and-upstreams practice. 작성자/커미터: GitTree 데모 <demo@example.com>. 이 체크포인트에는 두 번째 연습용 노트북이나 추가 커밋이 포함되지 않습니다.

GitTree에서

  1. 원본 탭에서 로컬 main → Checkout main을 마우스 오른쪽 버튼으로 클릭합니다. 기록-문서-시대 페이지, 워크플로 섹션 없음, 정리 상태를 기대하세요. 더티 스위치 대화 상자가 나타나면 Cancel하고 예상치 못한 작업을 검사합니다.
  2. Command+Shift+P(Ubuntu에서 Ctrl+Shift+P)를 사용하여 팔레트를 엽니다. New File…을(를) 선택하세요. Path from the project folder에 docs/remotes.md를 입력한 다음 Create을 입력합니다. 위에 본문 전체를 붙여넣고 Save / Command+S를 누르세요. 디스크 저장이 완료될 때까지 기다리세요.
  3. Back to Graph을 선택한 다음 팔레트 Show Working Changes를 선택합니다. docs/remotes.md를 검토하고 Stage File을(를) 활성화하세요. Summary에 정확한 제목을 입력하고 설명을 비워 두고 일반 선택 동작을 해제하세요. Commit Changes to 1 File를 한 번 클릭하거나, 대안으로 Command+Enter를 클릭하세요. 실제 여섯 번째 기본 커밋을 확인합니다.
  4. 아래 터미널 세그먼트 T1을 사용하여 별도의 베어 저장소를 준비합니다. 이는 명시적으로 라벨이 지정된 native preparation 단계입니다. GitTree '호스팅 프로젝트 생성' 버튼이 만들어지지 않았습니다.
  5. 실제 file:// URL을 얻으려면 T2를 실행하세요. 검사된 GitTree URL 파서는 기본 Git에서 허용할 수 있는 일반 파일 시스템 경로가 아닌 파일 URL을 허용합니다. 공백이 퍼센트로 인코딩된 생성된 URL을 사용하세요. 원격 URL 필드에 쉘 명령을 붙여넣지 마십시오.
  6. 팔레트 Add Remote…이(가) Add a remote을(를) 엽니다. Name = 원본 및 URL = 측정된 파일 URL을 입력합니다. Add Remote를 선택하세요. 추가 양식에는 별도의 푸시 URL 필드가 없습니다. 이는 Edit Remote…에 속합니다. 오리진이 구성되어야 하지만 아직 가져온 오리진/메인이 없습니다.
  7. Fetch All(Ubuntu에서 Command+Shift+F, Ctrl+Shift+F)를 사용하여 팔레트에서 가져옵니다. 처음 가져오기 전에는 측면 패널의 원격 그룹에 원본이 전혀 나열되지 않으므로 마우스 오른쪽 버튼을 클릭할 행이 없습니다. 정확히 하나의 리모컨으로 Fetch All을 가져옵니다. 실제 결과를 기다리십시오. 메인과 동일한 실제 SHA에서 오리진/메인을 예상합니다. HEAD와 파일은 그대로 유지됩니다.
  8. 로컬 main을 마우스 오른쪽 버튼으로 클릭하고 Upstream 하위 메뉴를 열고 Set Upstream…를 선택합니다. What should main track?에서 Upstream branch = 원본/메인을 선택한 다음 Track를 선택합니다. 이 명명된 참조 작업은 일반적인 팔레트 명령이 아닙니다. Cancel은 관계를 변경하지 않고 그대로 둡니다. Track Nothing을 선택하지 마세요.
  9. T3 및 T4를 통해 확인하세요. 기본 체크아웃 상태, 기능/가격표는 있지만 게시되지 않은 상태, 진행 중인 작업은 없는 상태로 둡니다. 연결을 "완료"하기 위해 푸시, 풀, 강제 푸시... 또는 원격 삭제 명령을 누르지 마십시오.

Ordinary options off은 이전 커밋 수정이 선택 해제되었음을 의미합니다. 후크 건너뛰기, 서명자 추가, 다른 작성자 추가, 커밋 후 푸시 및 빈 커밋 허용 끄기; 공동저자는 없습니다. 두 번 클릭하는 대신 확인된 완료를 기다리십시오.

터미널에서

소스 체크아웃이 아닌 격리된 gittree-features 내부에서 모든 명령을 실행하세요. 앱/네이티브 변형은 대안이지 앱 성공 후 반복하는 단계가 아닙니다.

T1 — 문서를 기록하고 로컬 원본에서 메인만 준비

전체 문서를 메인에 저장한 후:

Command · bash
git switch --quiet main
git add -- docs/remotes.md
git commit --quiet -m "docs: record remotes-and-upstreams practice"
git clone --quiet --bare --single-branch --branch main --no-local . ../gittree-features-origin.git

모든 명령은 기본 픽스쳐에서 자동으로 성공했습니다. 클론은 기본 저장소와 별도의 기본 저장소인 new를 생성합니다. 원본에는 원점을 구성하지 않습니다. --no-local은 하드링크된 로컬 객체 복사 바로가기를 방지합니다. 이 준비 성적표에는 추진력이 없습니다.

앱이 이미 문서를 커밋한 경우 처음 세 명령을 생략합니다. 동일한 문서를 두 번 커밋하지 마세요.

T2 - 추가, 가져오기, 업스트림 선택

실제 플랫폼에 맞게 퍼센트 인코딩된 URL을 생성합니다.

Command · bash
ORIGIN_URL="$(node --input-type=module -e "import path from 'node:path'; import {pathToFileURL} from 'node:url'; console.log(pathToFileURL(path.resolve('../gittree-features-origin.git')).href);")"
printf '%s\n' "$ORIGIN_URL"

실제 출력은 /gittree-features-origin.git으로 끝나는 시스템별 파일 URL입니다. 그 뿌리는 다양합니다. file://<lab-root>/gittree-features-origin.git은 설명 표기법이지 조작된 터미널 출력이나 붙여넣을 문자 그대로의 URL이 아닙니다. ORIGIN_URL은 자격 증명이 아닌 셸 변수입니다.

Command · bash
git remote add origin "$ORIGIN_URL"
git config --get remote.origin.fetch
git for-each-ref --format='%(refname)' refs/remotes/origin

추가는 자동입니다. 구성 쿼리는 다음을 인쇄합니다.

출력
+refs/heads/*:refs/remotes/origin/*

최종 for-each-ref는 아무것도 인쇄하지 않습니다. 리모컨을 추가해도 리모컨을 가져오지 않습니다.

Command · bash
git fetch --quiet origin
git branch --set-upstream-to=origin/main main

가져오기가 자동으로 성공했습니다. 실제 업스트림 출력:

출력
branch 'main' set up to track 'origin/main'.

T3 — 원본의 최종 상태 증명

Command · bash
git symbolic-ref --short HEAD
git rev-parse --abbrev-ref 'main@{upstream}'
git rev-list --left-right --count main...origin/main
git log -1 --format=%s origin/main
git rev-list --count main
git status --short

처음 5개 쿼리의 출력은 다음과 같습니다.

출력
main
origin/main
0	0
docs: record remotes-and-upstreams practice
6

최종 짧은 상태는 비어 있습니다(exit 0). 두 개의 0 사이의 탭은 메인에서만 도달할 수 있는 커밋과 원본/메인에서만 도달할 수 있는 커밋을 구분합니다. 일치하는 팁은 향후 가져오기가 불필요하다는 증거가 아닙니다.

T4 — 실제 베어 저장소와 로컬 추적 참조를 구별합니다.

Command · bash
git --git-dir=../gittree-features-origin.git rev-parse --is-bare-repository
git --git-dir=../gittree-features-origin.git for-each-ref --format='%(refname)' refs/heads
git ls-remote --heads origin refs/heads/feature/pricing-cards
git config --get branch.feature/pricing-cards.remote

첫 번째 쿼리는 true를 인쇄합니다. 두 번째는 refs/heads/main을 인쇄합니다. 세 번째는 무음입니다. 출구 0: feature/pricing-cards was not published. 네 번째는 자동입니다. 출구 1: 기능 업스트림 설정이 존재하지 않습니다. 예상되는 부재는 실패한 가져오기가 아닙니다.

세 가지 팁을 독립적으로 해결하십시오.

Command · bash
git rev-parse refs/heads/main
git rev-parse refs/remotes/origin/main
git --git-dir=../gittree-features-origin.git rev-parse refs/heads/main

세 가지 실제 SHA가 모두 동의합니다. 실제 SHA 출력을 H6으로 대체하지 마십시오.

결과

Where you end: 체크아웃된 기본에는 새 docs/remotes.md만 포함하여 6개의 커밋이 있습니다. 별도의 로컬 베어 원점은 동일한 H6에 메인을 가지고 있습니다. 원본에는 원본이 구성되어 있고 refs/remotes/origin/main을 가져왔습니다. 메인 트랙의 원점/메인. 인덱스/워크 클린; 무시된 dist가 남아 있을 수 있습니다. 로컬 기능/가격표는 여전히 F1을 가리키며 업스트림 또는 서버 분기가 없습니다. 병합, 가져오기, 호스팅된 프로젝트, 로그인 또는 CI 실행이 발생하지 않았습니다.

일반적인 실수

  • 오리진을 특수 서버로 취급: 선택한 로컬 이름입니다.
  • 서버를 생성하거나 해당 분기를 가져오려면 원격 추가가 필요합니다.
  • GitTree의 URL 필드에 일반 경로 붙여넣기: 대신 파일 URL을 생성하세요.
  • 실제 회사의 원격 선택, 토큰 포함 URL 사용 또는 기존 베어 디렉토리 재사용.
  • 기능을 사용하는 동안 문서를 생성하면 잘못된 분기의 기록이 기록됩니다.

뭔가 잘못되면

가져오기 전에 원본/기본이 존재하지 않기 때문에 기본 업스트림 선택이 실패합니다. 격리된 변경 입력 재생이 실제로 실행되었습니다.

Command · bash
git -c advice.setUpstreamFailure=false branch --set-upstream-to=origin/main main

표준 오류가 관찰되었습니다. 128 종료:

출력
fatal: the requested upstream branch 'origin/main' does not exist

가지 끝과 작업은 변경되지 않습니다. 앱의 소스(촬영되지 않음)에 따르면 업스트림 양식에는 가져온 옵션이 없으며 There are no remote-tracking branches yet. Fetch first.에서 해당 Track 컨트롤을 사용할 수 없습니다. 네이티브 치명적인 메시지를 앱 대화 상자로 그리지 마세요. 원하는 리모컨을 가져온 다음 의도적으로 원본/메인을 선택합니다. 이번 강의에서는 Fetch All입니다.

누락된 로컬 디렉터리, 잘못된 URL 또는 권한 오류는 강제로 푸시하거나 보안을 비활성화해도 해결되지 않습니다. 취소하고 Edit Remote…을(를) 검사한 후 실제 대상을 확인한 후 의도한 가져오기만 다시 시도하세요. 이미 원본이 있는 경우 이를 검사합니다. 맹목적으로 덮어쓰거나 제거하지 마십시오. 원격을 제거하면 서버 자체가 아닌 로컬 구성/추적이 변경되며 표준 강의에서는 필요하지 않습니다.

이해도를 확인해보세요

각 질문에 답한 후 그 이유를 읽어보세요. '필수'라고 표시된 질문은 수업 완료에 반영됩니다.

  1. 질문 1/6

    방금 원점을 추가했습니다. 원산지란 무엇인가요?

    답을 하나 선택하세요.

  2. 질문 2/6

    이 수업에 대한 설명으로 옳은 것은 무엇입니까?

    해당하는 답을 모두 선택하세요.

  3. 질문 3/6
    필수

    오리진을 추가한 후 메인의 업스트림을 가져와 설정합니다. 페이지의 기본에는 워크플로 섹션이 없습니다. 무슨 일이 일어나야 할까요?

    답을 하나 선택하세요.

  4. 질문 4/6
    필수

    입력 변경: 원본을 추가하지만 가져오기를 건너뜁니다. 업스트림으로 원본/메인을 선택해 보세요. 무슨 일이 일어나나요?

    답을 하나 선택하세요.

  5. 질문 5/6

    기본 폴더가 있지만 GitTree는 URL에 붙여넣은 일반 경로를 거부합니다. 올바른 다음 단계는 무엇입니까?

    답을 하나 선택하세요.

  6. 질문 6/6
    필수

    어떤 증거가 함께 필요합니까?

    해당하는 답을 모두 선택하세요.

6개 중 0개 정답

수업을 완료하려면 필수 질문에 올바르게 답하세요.

이 브라우저에서 확인했습니다.

연습

Add Remote 직후에 Origin/Main이 없는 이유를 설명하세요. 별도의 동일한 프로젝트 재생에서는 가져오기 전에 선택해 본 다음 성공적으로 가져오고 선택하세요. 기본 SHA 및 전체 index.html 바이트가 두 구성 작업에서 변경되지 않았는지 확인하세요. 원본에서 기본/원본/기본이 동의하고 해당 기능이 기본 서버에 아직 없음을 증명하십시오.

귀하의 확인: 사이트에서 귀하의 컴퓨터를 볼 수 없습니다.

수업을 완료하려면 필수 질문에 올바르게 답하고 실제 연습을 확인하세요.

요약

  • 리모콘은 주소를 구성합니다. fetch는 참조를 얻습니다. 업스트림은 분기 관계를 선택합니다.
  • Origin/main은 서버 브랜치 자체가 아닌 로컬에서 가져온 지식입니다.
  • 기본 연결로 인해 기능이 게시되지 않았거나 작업 페이지가 변경되지 않았습니다.

용어집 소개

원격 — مستودع بعيد; 원격 추적 참조 — مرجع تتبُّع بعيد; 업스트림 — العرع المتتبَّع; 베어 저장소 — مستودع مجرد; 가져오기 - جلب; 운송 - سيلة نقل.

비디오 대본

영상의 나레이션, 큐별로.

성적표 표시
  1. 리모컨을 연결한 다음 선택하세요. 의도적으로 업스트림.
  2. 해당 기능은 로컬에 존재합니다. 그것은 출판되지 않았습니다.
  3. 백그라운드 가져오기만 비활성화 이 녹음 저장소에 있습니다.
  4. 글을 쓰기 전에 메인으로 전환하세요 운송 서류.
  5. 없이 전체 문서를 저장하세요. 컴퓨터별 경로 또는 자격 증명.
  6. 운송 문서 준비 기능이 아닌 기본에 있습니다.
  7. 문서는 다음을 추가합니다. 메인에 대한 여섯 번째 커밋.
  8. 별도의 Bare Copy 준비 지역 교통의 주요 장소.
  9. 이 목적지에는 주요, 하지만 기능 분기는 없습니다.
  10. 원래의 맨손 목적지 별도의 저장소입니다.
  11. 다음에 대한 파일 URL을 생성합니다. 예정된 지역 목적지.
  12. 주소를 저장해도 가져오지 않습니다. 분기하거나 기능을 업로드하세요.
  13. 다음에서 원격 대화 상자를 엽니다. 원래 저장소.
  14. 원산지 이름을 지정하고 확인하세요. 완전한 목적지.
  15. 리모컨이 구성되었습니다. 그 분기를 가져오지 않았습니다.
  16. 가져오기 규칙이 존재하는 동안 추적 참조 쿼리가 비어 있습니다.
  17. 누락된 업스트림 선택 메인을 이동하지 않고 실패합니다.
  18. 업스트림을 선택합니까? 가져오기를 대체하시겠습니까? 그렇지 않습니다.
  19. 없이 리모컨의 메인을 가져옵니다. 현재 지점을 전환합니다.
  20. 오리진 슬래시 메인은 당신의 것입니다 로컬에서 가져온 레코드입니다.
  21. 가져오기는 병합이 아닙니다. 페이지를 리베이스하거나 교체합니다.
  22. 다음에 대한 관계를 선택하세요. 명명된 지역 주요 지점.
  23. 옵션만 선택하는 것은 확인된 관계는 아닙니다.
  24. 메인 업스트림 확인 커밋을 이동하지 않고.
  25. 메인과 업스트림을 확인하세요. 팁을 맞추고 깔끔한 작업을 수행합니다.
  26. 빈 서버 기능 쿼리는 다음을 수행합니다. 로컬 기능이 손실되었다는 의미는 아닙니다.
  27. 주소, 가져온 레코드 및 업스트림 설정은 다른 것으로 유지됩니다.
  28. 업스트림 선택 수정 기록을 재설정하지 않고.
  29. 원본과 서버를 확인하세요 계속하기 전에 별도로.
  30. 참조가 누락된 이유를 설명하세요. 푸시가 아닌 가져오기가 필요했습니다.
  31. 로컬 베어 리모컨은 호스팅된 프로젝트 또는 파이프라인.
  32. 다음으로 팀원의 업데이트를 가져오는 동안 자신의 파일을 변경하지 않고 유지합니다.