レッスン 10 · 日常の仕事
リモートをアップストリームと混同せずに接続します
ローカルのベアオリジンを追加し、そのメインブランチをフェッチし、ローカルのメイントラックを慎重に選択します。リモート名、リモート追跡参照、およびアップストリーム設定が 3 つの異なるものであることを証明します。
- レベル: 中級者
- 4 分で読みました
- 6 分の動画
- 更新されました
- このレッスンの前に: 機能ブランチを作成し、使い捨ての ref のみをリタイアします
このブラウザに進行状況が保存されました。
再生すると、YouTube からビデオが読み込まれます (プライバシー強化モード)。
何を学ぶか
- オリジン、オリジン/メイン、メインのアップストリーム構成を区別します。
- リモートの追加、アップストリームの取得と選択のそれぞれの変更について説明します。
- プロバイダーの資格情報を使用せずに、GitTree を実際のローカルのベア リポジトリに接続します。
- 機能ブランチがローカルで未公開のままであることを証明します。
始める前に
元の gittree-features:checked-out feature/pricing-cards には workflow-card commit F1 があります。レッスン 9 が終了したところから開始します。 main には、履歴ドキュメント H5 を通じて 5 つのコミットがあります。どちらもクリーンで、リモートは存在せず、dist は無視されたままです。これらはデモ参照であり、この Web サイトのブランチを変更するための指示ではありません。
このビデオは、Ubuntu 24.04 の Git 2.52.0 と GitTree 2.0 を使用して録画されました。ドキュメント、リモート、フェッチ、アップストリームはアプリ内で行われました。裸の宛先、追加専用状態、およびチェックはターミナルで実行されました。 macOS または Windows では何も実行されず、記録された Linux システムは Ubuntu のみです。以下のコマンド キー コードは、アプリのキーマップから取得されます。 GitTree の検査された Git フロアは 2.39.0 です。サインインすると、ローカル Git トランスポートとアップストリーム構成は無料プランになります。プロバイダーの統合は、別のゲート機能です。
すべてのソース チェックアウトの外側に、空の兄弟宛先 gittree-features-origin.git を 1 つ予約します。既存のディレクトリを置き換えないでください。ベア リポジトリは、このプロジェクトのメインからシードされます。これは、GitLab インストール、GitHub リポジトリ、バックアップ サービス、または CI ランナーではありません。クローンの宛先が存在する場合は、削除するのではなく、停止して特定します。
追加のみの予測の場合、この記録リポジトリではバックグラウンドフェッチをオフにする必要があります。 Command+(Ubuntu の場合は Ctrl+) で 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 の各側に 1 つの個別のコミットが含まれるようになりました。メインにはドキュメント、機能にはワークフロー カードが含まれます。どちらも合併ではありません。
プロジェクト全体の変更
メインの before に切り替えて、このファイルを作成します。完全な UTF-8/LF 本文と最後の改行を使用して docs/remotes.md を作成します。
# 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>。このチェックポイントには、2 番目の練習用ノートブックや追加のコミットは含まれません。
GitTreeで
- 元のタブで、ローカル main → Checkout main を右クリックします。歴史文書時代のページ、ワークフロー セクションのない、クリーンなステータスが期待されます。ダーティ スイッチ ダイアログが表示された場合は、Cancel を実行して、予期しない動作を検査してください。
- Command+Shift+P (Ubuntu の場合は Ctrl+Shift+P) を押してパレットを開きます。 New File…を選択します。 Path from the project folder に「docs/remotes.md」と入力し、次に「Create」と入力します。上に本文全体を貼り付けて、Save / Command+S.ディスクの保存が完了するまで待ちます。
- Back to Graph を選択し、パレット Show Working Changes を選択します。 docs/remotes.md を確認し、Stage File を有効にします。 Summary に正確な件名を入力し、説明を空のままにし、通常のオプションの動作をオフにしておきます。 Commit Changes to 1 File を 1 回クリックするか、Command+Enter キーを押します。実際の 6 番目のメイン コミットを確認します。
- 以下のターミナル セグメント T1 を使用して、別のベア リポジトリを準備します。これは明示的にラベル付けされた native preparation ステップです。GitTree の「ホスティング プロジェクトの作成」ボタンは作成されていません。
- T2 を実行して実際の file:// URL を取得します。検査された GitTree URL パーサーは、ネイティブ Git が受け入れられる場合でも、プレーンなベア ファイルシステム パスではなく、ファイル URL を受け入れます。生成された URL を、スペースをパーセントでエンコードして使用します。シェルコマンドをリモート URL フィールドに貼り付けないでください。
- パレット Add Remote… が Add a remote を開きます。 Name = 起点、URL = 測定されたファイルの URL を入力します。 Add Remoteを選択します。追加フォームには個別のプッシュ URL フィールドはありません。それは Edit Remote… に属します。オリジンが設定されていることが予想されますが、まだオリジン/メインがフェッチされていません。
- Fetch All (Command+Shift+F、Ubuntu では Ctrl+Shift+F) を使用してパレットから取得します。この最初のフェッチの前には、サイド パネルのリモート グループには原点がまったくリストされていないため、右クリックする行がありません。リモートが 1 つだけある場合、Fetch All を実行するとそれがフェッチされます。実際の結果を待ちます。オリジン/メインはメインと同じ実際の SHA であることが予想されます。 HEAD とファイルはそのまま残ります。
- ローカル main を右クリックし、Upstream サブメニューを開いて Set Upstream… を選択します。 What should main track? で、Upstream branch = オリジン/メインを選択し、次に Track を選択します。この名前付き参照アクションは、汎用のパレット コマンドではありません。 Cancel は関係を変更しないままにします。 Track Nothing は選択しないでください。
- T3 と T4 で確認します。メインをチェックアウトしたままにし、機能/価格カードは存在しますが未公開にし、進行中の操作を行わないようにします。接続を「終了」するために、プッシュ、プル、強制プッシュ... またはリモート削除コマンドを押さないでください。
Ordinary options off は、「前のコミットを修正」がチェックされていないことを意味します。フックをスキップし、サインオフ者を追加し、別の作成者を追加し、コミット後にプッシュし、空のコミットを許可します。共著者はいません。 2 回クリックするのではなく、完了が確認されるまで待ちます。
ターミナル内
ソース チェックアウトではなく、分離された gittree-features 内ですべてのコマンドを実行します。アプリ/ネイティブのミューテーションは代替手段であり、アプリが成功した後に繰り返す手順ではありません。
T1 — ドキュメントを記録し、ローカル オリジンでメインのみを準備します
ドキュメント全体をメインに保存した後:
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 は、ハードリンクされたローカル オブジェクト コピー ショートカットを回避します。この準備記録には強制力はありません。
アプリがすでにドキュメントをコミットしている場合は、最初の 3 つのコマンドを省略します。同じドキュメントを 2 回コミットしないでください。
T2 — 追加してフェッチし、上流を選択します
実際のプラットフォームに正しい、パーセントでエンコードされた URL を生成します。
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 はシェル変数であり、資格情報ではありません。
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 は何も出力しません。リモートを追加してもリモートは取得されませんでした。
git fetch --quiet origin
git branch --set-upstream-to=origin/main mainフェッチはサイレントに成功しました。実際のアップストリーム出力:
branch 'main' set up to track 'origin/main'.T3 — オリジナルの最終状態を証明する
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最後の短いステータスは空で、終了 0 です。2 つのゼロの間のタブは、メインからのみ到達可能なコミットとオリジン/メインからのみ到達可能なコミットを区切ります。一致するチップは、将来のフェッチが不要であることを証明するものではありません。
T4 — 実際のベア リポジトリとそのローカル追跡参照を区別します。
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 を出力します。 2 番目は refs/heads/main を出力します。 3 番目はサイレントで、出口 0: feature/pricing-cards was not published です。 4 番目はサイレントで、終了 1: 機能のアップストリーム設定が存在しません。予想される不在はフェッチの失敗ではありません。
次の 3 つのヒントを個別に解決します。
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実際の 3 つの SHA はすべて一致します。実際の SHA 出力を H6 に置き換えないでください。
結果
Where you end: のチェックアウトされたメインには、新しい docs/remotes.md のみを含む 6 つのコミットがあります。別のローカルベアオリジンには同じ H6 にメインがあります。オリジナルには、origin が設定されており、refs/remotes/origin/main がフェッチされています。メイントラックの原点/メイン。インデックス/作業はきれいです。無視された dist が残る場合があります。ローカル機能/価格カードは依然として F1 を指しており、アップストリームまたはサーバー ブランチはありません。マージ、プル、ホストされたプロジェクト、サインイン、CI の実行は行われませんでした。
よくある間違い
- オリジンを特別なサーバーとして扱います。これは選択されたローカル名です。
- Add Remote がサーバーを作成するか、そのブランチを取得することを期待します。
- プレーン パスを GitTree の URL フィールドに貼り付けます。代わりにファイル URL を生成します。
- 実際の会社のリモートを選択するか、トークンを含む URL を使用するか、既存のベア ディレクトリを再利用します。
- フィーチャー上でドキュメントを作成すると、間違ったブランチの履歴が記録されます。
何か問題が発生した場合
取得する前に、origin/main が存在しないため、ネイティブ アップストリームの選択は失敗します。分離された変更された入力のリプレイが実際に実行されました。
git -c advice.setUpstreamFailure=false branch --set-upstream-to=origin/main main標準エラー出力を確認しました。128 を終了します:
fatal: the requested upstream branch 'origin/main' does not exist枝先や作業内容は変わりません。アプリのソース (撮影されていない) によると、アップストリーム フォームにはフェッチされたオプションがなく、その Track コントロールは There are no remote-tracking branches yet. Fetch first. では使用できません。ネイティブの致命的なメッセージをアプリ ダイアログとして描画しないでください。目的のリモートを取得し、意図的にorigin/mainを選択します。このレッスンでは、それは Fetch All です。
ローカル ディレクトリの欠落、間違った URL、または権限の失敗は、プッシュを強制したりセキュリティを無効にしたりしても修正されません。キャンセルして、Edit Remote… を検査し、実際の宛先を確認して、目的のフェッチのみを再試行してください。すでに原点がある場合は、それを検査します。やみくもに上書きしたり削除したりしないでください。リモートを削除すると、サーバー自体ではなくローカルの構成/追跡が変更されるため、正規のレッスンには不要です。
理解度を確認してください
各質問に答えてから、その理由を読みましょう。 「必須」とマークされた質問は、レッスンの完了にカウントされます。
6 個中 0 個が正解です
必須の質問に正しく答えると、レッスンを完了できます。
このブラウザで確認しました。
練習する
リモートを追加した直後にorigin/mainが存在しない理由を説明してください。別の同じプロジェクトのリプレイで、フェッチする前に選択してみて、フェッチして正常に選択してください。メインの SHA と完全なindex.html バイトがどちらの構成アクションでも変更されていないことを確認します。オリジナルでは、main/origin/main が一致していることを証明し、その機能がまだベア サーバーに存在しないことを証明します。
あなた自身の確認: サイトはあなたのコンピュータを認識できません。
レッスンを完了するには、必須の質問に正しく答え、実践的な演習を確認してください。
要約
- リモートはアドレスを構成します。 fetch はその参照を取得します。上流側はブランチ関係を選択します。
- origin/main はローカルで取得されたナレッジであり、サーバー ブランチ自体ではありません。
- メインに接続しても、機能は公開されず、動作ページも変更されませんでした。
関連している
用語集の用語の紹介
リモート — リモート。リモート追跡参照 — مرجع تتبُّع بعيد;上流 — الفرع المتتبَّع;ベア リポジトリ — 特別なリポジトリ。フェッチ — フェッチ;輸送 — وسيلة نقل.
ビデオトランスクリプト
ビデオのナレーションが次々と流れます。
トランスクリプトを表示する
- リモコンを接続して選択します 意図的に上流へ。
- この機能はローカルに存在します。 それは出版されていません。
- バックグラウンド取得のみを無効にする この録音リポジトリにあります。
- 書き込む前にメインに切り替えてください 輸送書類。
- 完全なドキュメントを保存せずに保存します。 マシン固有のパスまたは資格情報。
- 輸送書類の準備 機能ではなくメインで。
- 文書では、 メインでの 6 番目のコミット。
- 別途ベアコピーを用意する ローカル輸送のメイン。
- この目的地には主に、 ただし、機能ブランチはありません。
- 本来のありのままの目的地 は別のリポジトリです。
- のファイル URL を生成します。 意図された地元の目的地。
- アドレスを保存しても取得できない ブランチを作成するか、機能をアップロードします。
- でリモートダイアログを開きます 元のリポジトリ。
- オリジンという名前を付けて確認します 完全な目的地。
- リモコンは設定されています。その ブランチが取得されていません。
- フェッチ ルールは存在しますが、 tracking-ref クエリが空です。
- 欠落しているアップストリームの選択 メインを移動せずに失敗します。
- アップストリームを選択しますか フェッチを置き換えますか?そうではありません。
- リモートのメインを取得せずに 現在のブランチを切り替えます。
- オリジンスラッシュメインはあなたのものです ローカルで取得されたレコード。
- フェッチはマージではありません。 ページのリベースまたは置換。
- ~の関係を選択してください 名前付きのローカル メイン ブランチ。
- オプションのみを選択すると、 確認された関係ではありません。
- メインの上流を確認 コミットを移動せずに。
- メイン、その上流を確認します。 ヒントとクリーンな作業をマッチングします。
- 空のサーバー機能クエリは次のことを行います。 局所的な特徴が失われたという意味ではありません。
- アドレス、取得したレコード、およびアップストリーム 設定は別のもののままです。
- 上流の選択を修正する 履歴をリセットせずに。
- オリジナルとサーバーを確認する 続行する前に個別に行ってください。
- 参照が見つからない理由を説明してください プッシュではなくフェッチが必要でした。
- ローカルの裸のリモコンは、 ホストされたプロジェクトまたはパイプライン。
- 次に、チームメイトのアップデートを取得します。 自分のファイルは変更しないでください。