レッスン 4 · 基礎
コースリポジトリを作成し、クローンとオープンを区別します
GitTree の新しいタブ画面から GitTree 機能を作成し、まだ commit がないことを確認します。次に、別のローカル クローンを作成して、フォルダーを開く、履歴の初期化、およびリポジトリのコピーが異なるアクションである理由を確認します。
- レベル: 初心者
- 4 分で読みました
- 6 分の動画
- 更新されました
- このレッスンの前に: Git をインストールし、安全なコミット ID をプレビューする, 次のコミットに何が含まれるかを予測する
このブラウザに進行状況が保存されました。
再生すると、YouTube からビデオが読み込まれます (プライバシー強化モード)。
何を学ぶか
- 明示的なブランチ名を使用して、GitTree 内の最初のコース リポジトリを初期化します。
- 最初のコミットを作成せずに、未誕生のブランチを認識します。
- 架空のアイデンティティはコース リポジトリにのみ保存します。
- 同じ空のリポジトリのクローンを別のフォルダーに作成し、その元のリポジトリを確認します。
- 別のリポジトリを作成またはコピーせずに、元のリポジトリを再度開きます。
始める前に
レッスン 2 と 3 が終了するところから開始します。Git は利用可能ですが、コース リポジトリは存在しません。レッスン 2 では、GitTree デモをプレビューしました。グローバル設定は保存されませんでした。コースの作業用に予約された既存の書き込み可能な親フォルダーが必要です。子 gittree-features は、既存のソース チェックアウトの外にある、新しいか空である必要があります。この Web リポジトリまたは個人プロジェクト内で初期化しないでください。
検査された GitTree の最小値 2.39.0 を満たす Git を使用してください。ビデオ内のコマンドと画面は、Git 2.52.0 と GitTree 2.0 を使用して Ubuntu 24.04 のプライベート ホーム フォルダーに記録されており、この記事のチェックは記録によって作成されたリポジトリに対して実行されました。これらは macOS または Windows には実行されませんでした。デフォルトのショートカットでは、macOS では Command を使用し、Windows と Linux では Ctrl を使用します。ネイティブ フォルダー チューザーはシステムごとに異なるため、撮影されていません。
GitTree にサインインすると、これらのローカル ワークフローには、プロでも試用でもプロバイダーの統合は必要ありません。無料プランでカバーされます。クローンは、ホストされた GitLab またはクロードの認証情報ではなく、同じマシン上の file:// URL を使用します。
コンセプト
Init は、選択したディレクトリの Git リポジトリ メタデータを作成します。ブランチ名が存在するだけではコミットは作成されません。新しい通常のリポジトリには、作業ツリー ディレクトリと、最初は空のインデックスがあります。 HEAD は、ブランチが指すコミット (unborn branch) を持つ前に、refs/heads/main をシンボリックに指定できます。
Clone はソースから別のリポジトリを作成します。通常、アクセス可能な履歴をコピーし、選択されたソース ブランチをチェックアウトしながら、origin というリモートを記録します。ここではソースが意図的に空になっているため、コピーする履歴や作業コンテンツはありません。これは有効なエッジケースであり、アップロードの失敗ではありません。
Open は、GitTree で検査する既存のリポジトリを選択します。タブを開くことは、そのファイルのクローンを作成したり、コミットを作成したり、ホスティング サービスを追加したりすることではありません。アプリは、最近の履歴/ワークスペースの状態を更新し、信頼チェックを個別に実行できます。
3 つの動詞は、新しいノートを作成する、別のコピーを作成する、既存のノートを机の上に置くことに似ています。この類推をパーミッションに拡張しないでください。リポジトリの設定またはフックはプログラムを実行できるため、GitTree は「オープン」を無条件の実行パーミッションとして扱うのではなく、その信頼をレビューします。
| このレッスンでのアクション | 作業ツリー/インデックス | ローカル参照 | リモート参照/構成 |
|---|---|---|---|
| mainでオリジナルを初期化する | 新しい通常のワークツリー。プロジェクト ファイルやインデックス付きエントリはありません | シンボリック HEAD 名は未誕生のメインです。コミットチップなし | リモートが設定されていません |
| ローカル デモ ID を保存する | ファイル/インデックス/履歴の内容は変更されません | 参照の変更はありません | 元のリポジトリ設定に user.name/user.email のみを書き込みます |
| オリジナルのクローンを別のフォルダーに作成します | コピー内の新しい空のワークツリー/インデックス | まだコミットがありません | コピーにはオリジナルを指す原点があります。リモート追跡ブランチ チップはまだ存在しません |
| Reopen original | 既存のオリジナルを選択します。 no duplication | コミット/参照の作成なし | リモコンなしでもオリジナルのまま |
ベア リポジトリは、通常の作業ファイルを持たない履歴ストレージです。これは後のサーバー演習では役立ちますが、このランディング ページを構築するには間違った選択です。オプションの .gitignore/licence テンプレートはコミットされていないファイルを作成します。このチェックポイントを保持するために拒否してください。
ネイティブ セマンティクスについては、git-init および git-clone を参照してください。アプリの空/新しい宛先チェックは、既存のリポジトリを再初期化するネイティブ Git の機能よりも厳格です。保護されている内容を理解せずに、アプリの拒否を回避するために端末を使用しないでください。
GitTree 内 — 正規の最初の初期化
actual current-source labels は、新しいタブ カード Init、ダイアログ Initialize a repository、送信 Initialize です。古いプランの「リポジトリの初期化」は説明的なものであり、現在のボタンのテキストではありませんでした。
- New Tab (
tab.new)、Command+T / Ctrl+T を選択します。 Open、Clone、および Init のカードが期待されます。 - Click Init. Initialize a repository が予想されますが、送信前に変更は保存されていません。代替案: Command Palette… と Command+Shift+P / Ctrl+Shift+P → Initialize Repository… (
repo.init)。 Init に対して直接のデフォルトのショートカットはアサートされません。 - Location に、予約された既存の親の下にある新しい
gittree-featuresディレクトリへの絶対パスを入力します。 Browse… を使用してから、ネイティブ セレクター Choose where to create the repository を使用できます。ネイティブ OS 選択ボタンはここで発明されたものではありません。閲覧後、最終的な完全な場所を再確認してください。 - Set Initial branch to
main. Bare repository (history only, no working files) off を維持してください。 - これらのテンプレート コントロールが読み込まれるときに、.gitignore template と Licence を None に設定します。デフォルトでは何も選択されていません。コントロールがない場合は、他の場所にファイルをサイレントに追加しないでください。 Open after creating on を維持してください。
- 「場所」、「メイン」、「ベアオフ」、「テンプレートなし」、「オープンアフターオン」を確認します。 Choose Initialize once.おそらく通常の信頼ワークフローを通じて、リポジトリが作成され、開かれることが予想されます。保留中は繰り返し押さないでください。
- Trust this repository? が表示された場合は、実際のパスと結果を確認してください。 Cancel は未開封のままにします。 Open in Restricted Mode は操作を制限します。 Trust and Open では、通常のリポジトリ設定/フックが許可されます。この自分で作成したサンドボックスでは、結果を理解した後にのみ信頼して開くを選択します。記録では、新しいフォルダーに対する信頼プロンプトは表示されませんでした。すべての新しいリポジトリにこのダイアログが表示されることを期待しないでください。
- タブが親または同様の名前のコピーではなく、元の
gittree-featuresであることを確認してください。そのグラフにはまだコミットがありません。空の状態を削除するために最初の「クリーンアップ」コミットを作成しないでください。
リポジトリローカルの架空のアイデンティティを保存する
- オリジナルがアクティブな状態で、Preferences (
app.preferences.open)、Command+, / Ctrl+, を開きます。 - リポジトリ固有のナビゲーション セクションで、gittree-features を選択します。これは動的リポジトリ名であり、グローバル プロファイル ページではありません。幅が狭い場合、ページピッカーのラベルは Repo-Specific: gittree-features です。
- Name for commits を見つけます (設定
repo.userName、バッキング Git キーuser.name)。その Writes to で、Local (this repository) を選択または確認します。 Global (every repository)は選択しないでください。 - 「
GitTree Demo」と入力し、行の Apply を選択します。あるいは、そのフィールドで Enter を押します。続行する前に、Saved まで待ってください。 - Email for commits (
repo.userEmail、バッキングuser.email) の場合は、同じローカル ターゲットを確認し、demo@example.comを入力してから、Apply または Enter を入力します。保存されるまで待ちます。 - Exit Preferencesを選択してください。元のリポジトリはまだアクティブであり、その履歴は空のままであることが予想されます。作業ファイルやグラフではなく、ローカル構成が変更されました。
入力するだけでは下書きが残ります。ダーティ フィールドの Escape は、最初にそのドラフトをキャンセルします。 「すべてを残す」というショートカットが保証されているわけではありません。明示的な適用/ローカル ターゲットが、このステップがレッスン 2 のキャンセルされたプレビューと異なる理由です。
ターミナルで — アプリの結果を確認します
<course-parent> を独自の予約済み絶対親パスに置き換えます。パスの前後は引用符で囲みます。 Web チェックアウトではなく、アプリの初期化後にこれらを実行します。
cd "<course-parent>/gittree-features"
git rev-parse --is-inside-work-tree
git rev-parse --is-bare-repository
git symbolic-ref --short HEAD観察されたクエリ結果の順序は次のとおりです。
true
false
mainコミットが存在しないことを証明します。
git rev-parse --verify --quiet HEAD観察されました: no stdout or stderr; exit status 1。これは予期される未誕生のブランチの結果であり、破損の診断ではありません。 シンボリック HEAD と リビジョン検証 は、さまざまな質問に答えます。
ファイル、インデックス、リモート名を検査します。
git status --short
git ls-files
git remote各コマンドはフィクスチャ内に no output and exited 0 を生成しました。これらのクエリだけでは、無視されたすべてのファイルが存在しないことを証明することはできません。ファイル マネージャーで、隠しアイテムが表示されている予約フォルダーを調べます。リポジトリ メタデータ .git が含まれているはずですが、プロジェクト ファイルはまだ含まれていません。 .git 内は何も編集しないでください。
次の 2 つの明示的なローカル ID フィールドのみを読み取ります。
git config --local --get user.name
git config --local --get user.email観察された内容:
GitTree Demo
demo@example.com個人/グローバル設定ダンプは必要ありません。
ネイティブ初期化の代替 — 2 番目の正規の開始ではありません
separate disposable comparison copy、つまりアプリなしで Git を勉強している人に相当するネイティブのコードは次のとおりです。
cd "<course-parent>"
git init --quiet --initial-branch=main --template= gittree-features出力は出力されず、独立したフィクスチャで 0 で終了しました。 Do not rerun it on the original already created in GitTree. 空のネイティブ テンプレート オプションは、Git のテンプレート ディレクトリを制御します。これは、アプリのオプションの .gitignore/licence セレクターではありません。通常のマシンでも、継承されたテンプレート/設定を確認する必要があります。
アプリ行ではなくネイティブ パスによって ID を設定する場合は、最初に新しいリポジトリを選択し、意図的にローカル構成のみを書き込みます。
cd "<course-parent>/gittree-features"
git config --local user.name "GitTree Demo"
git config --local user.email demo@example.com両方の書き込みは、分離された検証コピー内でサイレントに成功した操作でした。これらはアプリの書き込みの代替手段であり、アプリのテイクの検証をスキップする言い訳ではありません。
別のローカル コピーのクローンを作成する
この簡単な演習では、2 番目のデモ アプリケーションではなく、同じプロジェクトを使用します。 original stays the course checkpoint は、レッスン 5 の前に再度アクティブにする必要があります。これは、元のリモコンに追加されたリモコンではありません。
GitTreeで
- 新しいタブを開き、次に Clone を開きます。代替パレット: Clone Repository… (
repo.clone)。 Clone a repository を期待してください。 - Clone with URLを選択します。 Repository URL に、元の絶対ローカル URL (例:
file:///absolute/course-parent/gittree-features) を入力し、その例を実際の予約パスに置き換えます。アプリの URL パーサーは絶対ファイル URL を受け入れます。生のローカル パスはサポートされている入力ではありません。この最初の演習では、スペースのない単純なサンドボックス パスを使用します。 URL エンコードと Windows ドライブ構文には独自のプラットフォームの再チェックが必要です。 - Parent folder で、同じ既存のコースの親を選択します。 Folder name には、明示的に
gittree-features-copyを入力します。 Clones into がコピー not the original を指していることを確認してください。 - 完全な履歴を表示するには、Depth を空のままにしておきます。 Also clone submodules、Sparse checkout: only the top-level files at first, then the folders you choose、および Download file contents only when they are needed (blobless) をオフにしてください。 Open after cloning をオンにしておきます。
- Clone を 1 回選択してください。この空のローカル ソースの実際のクローンの進行状況または迅速な完了を期待すると、必要な信頼レビューを通じてコピーが開きます。このような小規模な操作のすべての進行フェーズが表示されると主張しないでください。
- コピーの空のグラフを検査し、以下の端末チェックを使用します。その
originは the copy に属し、オリジナルを指します。構成されたオリジンは、既存のリモート追跡ブランチまたはホストされたプロバイダーではありません。 - 戻るには、新しいタブから Open を選択するか、Open Repository… (
repo.open)、Command+O / Ctrl+O を選択し、元のgittree-featuresフォルダを選択して、必要な信頼プロンプトを確認します。代わりに、録音では、新しいタブの Recent にある元の行の Open ボタンを使用し、同じ方法で開きました。システムチューザーは撮影されていませんでした。あるいは、元のフォルダーを新しいタブのフォルダー ドロップ面 (撮影されていないもの) にドロップします。元の選択/開いた状態が期待されます。現在のビルドがタブを再利用するか、別のタブを作成するかどうかは保証されません。 - 補足コピーはそのままにしておいてください。続行するために削除する必要はありません。レッスン 5 の前に、オリジナルにまだリモートとローカル デモ ID がないことを確認します。
ネイティブの比較と結果
予約された親から、separate take where the destination does not exist で次のようにします。
git clone --quiet "file://<absolute-source-path>" gittree-features-copyここで、<absolute-source-path> は macOS 記録の / で始まり、file: の後に 3 つのスラッシュを含む URL を作成します。プレースホルダーを置き換えます。山括弧は入力しないでください。 exit 0 が成功したにもかかわらず、正確に観察された stderr:
warning: You appear to have cloned an empty repository.次に、コピーをクエリします。
cd "<course-parent>/gittree-features-copy"
git remote
git symbolic-ref --short HEAD
git config --local --get user.name最初の 2 つの観測された出力:
origin
main最後のクエリは何も出力せず、1 を終了します。クローン作成では、元のローカルの user.name 構成がコピーされませんでした。外部のグローバル設定により、実際のマシンに有効な ID が提供される場合があります。 local クエリは、このクローンに含まれる内容のみを意図的に返します。カメラ上のすべてのグローバル設定を読み取らないでください。コピー内ではコミットしません。
結果
このレッスンの終了時点では、元のリポジトリは、シンボリックな未誕生のメイン、コミット、プロジェクト ファイル、空の論理インデックス、リモート、およびローカル ID を備えた通常のリポジトリになります。GitTree Demo/demo@example.com.オプションの補足クローンには起源はありますが、履歴はありません。継続プロジェクトのチェックポイントの外にあります。
設計上、グラフは空のままです。レッスン 5 では、README.md とindex.html を作成し、最初の意図的なコミットを行います。
よくある間違い
- Choosing the parent instead of the new child: 構成を書き込む前に、場所とアクティブなタブを確認します。
- Choosing bare mode: ベア リポジトリは、ランディング ページの通常の作業ファイルを提供しません。
- Adding templates: 彼らは、この空のチェックポイントに属さない追跡されていないファイルを導入します。
- init 直後は、コミットのない Treating unborn HEAD as corrupt: シンボリック メインが正常です。
- Cloning onto the original: の宛先は、別の新しい/空のフォルダーである必要があります。
- Assuming clone copies local identity: 元のローカルの user.name/user.email ではなく、リポジトリ履歴をコピーします。
- Continuing in the copy: その起源により、その状態は正規のオリジナルとは異なります。
何か問題が発生した場合
空ではない宛先の拒否は、GitTree が既存のフォルダーを保護したことを意味します。新しい空の子を選択します。エラーを止めるためにその内容を削除しないでください。 「それを含むはずのフォルダーが存在しません」ということは、再試行する前に予約された親を慎重に作成/選択する必要があることを意味します。
リポジトリがすでに存在する場合は、open it して検査します。コースを新鮮に見せるために再初期化しないでください。無関係な作業の場合は、変更せずにそのままにして、別のコース フォルダーを選択します。
クローンが失敗した場合は、実際のエラーとクリーンアップ結果を読み取ります。 GitTree は、削除されたクローン所有フォルダー、保存された既存フォルダー、予期しない追加コンテンツ、クリーンアップの失敗を区別します。 Cancel Clone はキャンセルをリクエストします。すべてのバイトが消えたという証拠ではありません。何かを削除する前に、保持されているコンテンツを検査してください。空のソースの警告だけでは失敗ではありません。
信頼性の結果に慣れていない場合は、[キャンセル] または制限モードを選択します。レッスンを進めるために任意のリポジトリを全面的に信頼しないでください。制限モードではネットワーク操作が無効になり、ワーキングツリーのアクションが制限される場合があります。
理解度を確認してください
各質問に答えてから、その理由を読みましょう。 「必須」とマークされた質問は、レッスンの完了にカウントされます。
6 個中 0 個が正解です
必須の質問に正しく答えると、レッスンを完了できます。
このブラウザで確認しました。
練習する
Open Repository… またはフォルダ ドロップを通じて、元のファイルを再度開きます。 3 つの状態クエリを実行し、欠落している HEAD コミット、空のステータス/インデックス/リモート クエリ、および 2 つのローカル ID 値を確認します。コミットなしで main が表示される理由と、補足コピーが作成された場合にオリジナルが存在しない理由を説明してください。
Changed-input prediction: が別の新しい初期化で Initial branch = trunk を使用する場合、git symbolic-ref --short HEAD を予測します。 It prints trunk;それでもコミットは作成されません。これは別の独立したネイティブフィクスチャでチェックされました。予測を実行するために継続コースのメイン ブランチの名前を変更しないでください。
あなた自身の確認: サイトはあなたのコンピュータを認識できません。
レッスンを完了するには、必須の質問に正しく答え、実践的な演習を確認してください。
要約
- Init はリポジトリのメタデータを作成します。 clone は別のコピーを作成します。 open は既存のデータを選択します。
- 新しいメインは誕生しない可能性があります。最初のコミットは暗黙的に行われません。
- ローカル ID と補足クローンの状態を、グローバル設定や正規プロジェクトから分離してください。
関連している
用語集の用語の紹介
初期化 — テスト;クローン - クローン;リポジトリ — ستودع; branch — فرع; remote — بعيد;ワーキングツリー — مجلد العمل;ステージングエリア — منطقة التجهيز。 「未誕生ブランチ」とは、最初のコミットのないブランチ名を意味します。 HEAD とorigin はリテラルの識別子のままです。
ビデオトランスクリプト
ビデオのナレーションが次々と流れます。
トランスクリプトを表示する
- コースリポジトリを作成してから、 クローン作成を開くときとは別にします。
- 予約済みの親フォルダーを外部で使用する 既存のソース リポジトリ。
- 新しい履歴を初期化し、別の履歴を複製します リポジトリを開くか、既存のリポジトリを開きます。
- GitTree内からスタート 新しいタブ画面で。
- 「初期化」を選択します。ダイアログを確認する 何かを作る前に。
- へのフルパスを入力してください 新しい gittree-features フォルダー。
- ネイティブ フォルダー チューザーは、 代替品。最終的な位置を再確認してください。
- 代わりに明示的に main を選択してください マシンのデフォルトに依存すること。
- ベアモードはオフにしておいてください。 プロジェクトには作業ファイルが必要です。
- 両方のオプションのテンプレートを拒否する 空のチェックポイントを保存します。
- 作成後も開いたままにすることが有効になっており、 次に、すべての選択を確認します。
- 一旦初期化して待つ 実際のリポジトリの結果。
- トラストレビューが表示された場合は、以下をお読みください。 信頼を与える前の調査結果。
- オリジナルは存在しますが、 最初のコミットはそうではありません。
- HEAD は main の前に名前を付けることができます main にはポイントするコミットがあります。
- このリポジトリの設定を開きます グローバル プロファイル ページではなく、ページです。
- 事前に書き込み対象を確認してください 架空のアイデンティティを入力します。
- これとして GitTree デモを適用します リポジトリのコミット名。
- 架空のメールアドレスを適用する 同じローカルスコープで。
- Enter でフィールドを適用することもできます。終了 両方の書き込みが成功した場合のみ。
- 中にいることを確認してください 元の作業ツリー。
- ベア リポジトリ チェックは false である必要があります。
- 象徴的な支店 チェックを入れると main が出力されるはずです。
- まだコミットは解決されていません。サイレント ここでは出口 1 が予想されます。
- この3つの検査 出力は生成されません。
- 2 つのローカル ID の読み取りのみ 値ではなく、プライベートなグローバル設定です。
- ネイティブ Git も初期化できますが、初期化はできません アプリで作成したオリジナルを再初期化します。
- 次に、この同じ空のリポジトリをコピーします 別のローカルフォルダーに保存します。
- クローンを開いて URL パスを使用します プロバイダーアカウントリストではなく。
- ファイルの絶対 URL を使用します。 生のローカル パスではなく、オリジナルです。
- 宛先を明示的に指定する そしてそれがオリジナルではないことを確認してください。
- 全履歴のデフォルトを保持し、 詳細クローン オプションはオフのままにしておきます。
- クローンを実行して、 実際の進行状況は終了です。
- 空のソースは、何も含まないコピーを生成します。 コミットします。それはまだ成功する可能性があります。
- 空のリポジトリの警告 それ自体は失敗ではありません。
- コピーには起源と未誕生がある ホストされたパイプラインではなく、メインです。
- クローン作成ではオリジナルがコピーされませんでした ローカルコミット名の設定。
- 原点はコピーに属します。の オリジナルにはリモコンが付属していませんでした。
- もう一度オリジナルを開く コースを続ける前に。
- 既存のフォルダーをドロップすると、 クローンを作成するのではなく、別の方法で開くことができます。
- オリジナルをもう一度確認してください: リモコンがありません。 コミットなし、ローカル デモ ID。
- トランクによる個別の初期化 トランクを報告しますが、まだコミットされていません。
- 宛先拒否による保護 既存のコンテンツ。新しいフォルダーを選択します。
- クローンが失敗するかキャンセルされた場合、 クリーンアップで実際に何が保持されたかを読んでください。
- Undo と reflog はロールバックを約束しません 初期化または ID 設定用。
- Init はメタデータを作成し、clone は コピーし、開くと既存のデータが選択されます。
- 原稿の状態を確認する 最初のファイルを追加する前に。
- 次にヒーローを作成し、 最初の意図的なコミット。