検索
ホームページウェブフロントエンドjsチュートリアルjargons.dev の構築 [# フォーク スクリプト

これは、システム アーキテクチャに記載されているように、私が作成しようとした 4 つのスクリプトのうちの最初のスクリプトです。気分が盛り上がった!これは、GitHub UI とインターフェースせずにオープン ソースへの貢献を得る「wiki」エクスペリエンスを作成する方向への一歩でした?

これらのスクリプトは何ですか?

これらは、特に GitHub API と対話するために使用される、関連する再利用可能な関数をいくつか保持する js ファイルです。これらは、同じスクリプト内で使用されるか、プロジェクト内の他の場所で基本機能を実行するためにエクスポートされます。ユーザーの認証された Octokit インスタンスを他のパラメーターとして受け入れます。このインスタンスは、認証されたユーザーに代わって GitHub API を介してアクション/機能を実行するために使用されます。

GitHub UI とインターフェースせずにオープンソースに貢献するフローを作成する必要があるということは、一部のプロセスを自動化する必要があることを意味します。ユーザーが GitHub UI 経由で貢献する場合に実行するすべての手順をシミュレートします。手順は次のとおりです。続いて..

  1. フォークプロジェクトリポジトリ
  2. ブランチを作成する
  3. ブランチへの変更をコミットします (新しい単語の src/pages/word/ ディレクトリに新しい mdx ファイルを追加するか、この場合は既存の mdx ファイルを編集します)
  4. プルリクエストを作成します (この場合、単語の変更を送信します)

述べる価値のある真実

私は最初のコミットの直後にこのスクリプトを書き始めました。これは実際には PR #2 でしたが、1 か月の長い休暇中に影響を受けました。基本辞書機能の作業に戻る前に、プロジェクトから抜粋しました。

スクリプト

ここでのタスクは、「フォーク スクリプト」を作成することでした。その最終目標は、ユーザーのアカウント上で、またはユーザーのアカウントから jargons.dev リポジトリのフォークを作成または取得することです。これには、以下を実行するすべての関数が含まれている必要があります。

  • jargons.dev のフォークがユーザーのアカウントにすでに存在するかどうかを確認します
    • フォークが存在する場合
      • フォークがアップストリームと同期しているかどうか (つまり、jargons.dev リポジトリのメイン ブランチと最新であるかどうか) を確認します。そうでない場合 — フォークを更新します
    • フォークが見つからない場合
      • フォークを作成する

課題を理解したので、私はすぐに脚本の作業に「掘り下げて」取り組みました。

Hearts での日々の作業で頻繁に使用しているため、GitHub API にはすでに非常に慣れています ❤️... それで、GitHub のフォーク ドキュメントは私にとってブロスキーのように見えましたか?...

ザ・ステップス

  • フォーク機能を実行するための主要なエントリ ポイントであるメインの forkRepository 関数を作成しました。これは他のどこにでもつながります
  • 次の関数を追加しました。これらは主に明らかなメインの forkRepository 関数のヘルパーとして機能します。
    • isRepositoryForked - この関数は、jargons.dev リポジトリが現在の認証されたユーザーのアカウントにすでにフォークされているかどうかを確認します
    • isRepositoryForkUpdated - フォーク (見つかった場合) がメインの jargons.dev リポジトリと最新であるかどうか (ヘッド リポジトリと同期しているかどうか) を確認します
    • updateRepositoryFork - リポジトリをメイン (ヘッド) jargons.dev リポジトリの状態に更新 (同期) するために使用されます
    • getBranch - jargons.dev リポジトリとユーザーのフォークの Branch/Ref の詳細をフェッチするために使用される基本ユーティリティ (このスクリプトの作成時点で必要) で、isRepositoryForkUpdated ヘルパーで行われる比較で使用して主な機能を実行します。 GitHub References エンドポイントを使用します。

私の奇妙な仮定

頭の中を駆け巡る?このスクリプトを書いているとき、GitHub フォーク ドキュメント

で以下に引用した段落を読んだ後に持ち続けた考えでした。

注: リポジトリのフォークは非同期的に行われます。 git オブジェクトにアクセスできるようになるまで、少し待つ必要がある場合があります。これに 5 分以上かかる場合は、必ず GitHub サポートにご連絡ください。

私はこれを誤解しており、フォーク プロセスを開始して次に進むことしかできず、新しいフォークの詳細がわからないため、新しいフォークの詳細を返す応答オブジェクトを待つことはできないだろうと考えていました。フォークプロセスが完了したとき。

この仮定により、メインの forkRepository 関数からデータを返さないようにする必要があり、この時点ですでに考え始めていました - コントリビューション プロセスの次のフェーズに処理するフォークの詳細をどのように取得するか?うーん、Webhook を使ってみようかな?!?

考えすぎていたことが判明しましたが、実際にはフォークの応答の詳細を取得することになることに後で気づきました。そのため、フォーク応答オブジェクトから消費するために必要なデータを返すことに対処するためのフォローアップ PR を行うことになりました。貢献プロセス。

PR

メイン:

Building jargons.dev [# The Fork Script 特技: `fork` リポジトリ スクリプトを実装する #3

Building jargons.dev [# The Fork Script
おしゃべり 投稿日:

このプル リクエストはフォーク スクリプトを実装しています。このスクリプトは、メイン プロジェクト リポジトリをプログラムによってユーザー アカウントにフォークするために使用することを目的としています。これには、効率的なリポジトリフォーク操作を保証するために必要なアクションを実行するために使用するメイン関数とその他のヘルパー関数が格納されています。

行われた変更

  • スクリプト内にメインの forkRepository 関数を実装しました。この関数は、メインのフォーク操作を実行するメインのエクスポート関数です。 userOctokit (ユーザーの代理として動作する権限を持つユーザー認証されたオブジェクト) インスタンスとプロジェクトのリポジトリの詳細 (repoDetails オブジェクト) を受け入れ、次の処理を実行します。
    • isRepositoryForked ヘルパー関数を使用して、プロジェクト リポジトリがユーザーのアカウントにすでにフォークされているかどうかを確認します。これはnullのフォークを返します
      • リポジトリがすでにフォークされている場合は、isRepositoryForkUpdated ヘルパー関数を使用して、フォークが最新であるか、メイン プロジェクト リポジトリと同期しているかどうかをチェックします。これは、フォークが最新かどうかを確認する updatedSHA とブール値の isUpdated プロパティを返します。
        • フォークが最新でない場合。次に、updateRepositoryFork ヘルパー関数
        • を使用してメイン プロジェクト リポジトリと同期させて更新を実行します。
      • リポジトリが最新であるか、メイン プロジェクト リポジトリと同期している場合。この時点で操作をキャンセルし、早期に復帰します;
    • プロジェクト リポジトリがユーザーのアカウントにフォークされていない場合。次に、userOctokit インスタンスを使用して「POST /repos/{owner}/{repo}/forks」エンドポイントを呼び出して、フォーク プロセスの開始に進みます。 (これによりフォークプロセスが開始されますが、プロセスがいつ完了するか正確にはわかりません?)
  • メインの forkRepository 関数内および他のヘルパー関数内でも使用される次のヘルパー関数を実装します。
    • updateRepositoryFork - リポジトリをメイン (ヘッド) リポジトリの状態に更新 (同期) するために使用されます
    • isRepositoryForkUpdated - フォークが(ヘッド リポジトリと同期している)メイン リポジトリと最新であるかどうかを確認するために使用されます
    • getBranch - Branch/Ref の詳細を取得するために使用されます
    • isRepositoryForked - ユーザーのフォーク リポジトリ リスト内の特定のリポジトリの存在を確認するために使用されます
  • getRepoParts を /lib/utils に追加しました。これは、リポジトリのフルネームから repoOwner と repoName を解決するために使用されるユーティリティ関数です。

関連問題

#2 を解決します

スクリーンキャスト/スクリーンショット

https://github.com/babblebey/jargons.dev/assets/25631971/16221b7e-3c28-4c6c-a1f3-24d583ce7e3a

?

GitHub で表示

フォローアップ:

Building jargons.dev [# The Fork Script 特技:フォークスクリプトでリポジトリ「フルネーム」を返す #29

Building jargons.dev [# The Fork Script
おしゃべり 投稿日:

この PR は、#3 のフォーク スクリプトの初期実装で欠落していたステップのフォローアップです。フォーク スクリプトは、次の計算ステップで使用できるリポジトリを返すことができませんでした。これは、最初の実装時に私が抱いた奇妙な仮定が原因でした。 ?以下の私の仮定を参照してください...

「POST /repos/{owner}/{repo}/forks」エンドポイントへの呼び出しは、応答をまったく保証せずに、フォーク プロセスの開始を保証するだけであると仮定します。つまり、呼び出し後のresponse.dataを正確に取得できない可能性があります

...しかし、それは真実ではありませんでした。response.data が実際に来ることがわかりましたが、フォークされるリポジトリが巨大な場合にのみ、時間がかかるだけかもしれません...そして現時点ではプロジェクト リポジトリのフォークは 5 秒以内に行われます。

行われた変更

  • 返されたフォーク リポジトリ - これは isRepositoryForked ヘルパー関数から返されたリポジトリのフルネーム値です。ここでは、実行ユーザーのアカウントでリポジトリがすでにフォークされている状態で、forkRepository 関数の実行からのメインの戻り値として返します
  • 返されたresponse.data.full_name - これは新しく作成されたフォーク リポジトリのフルネームです。これは、「POST /repos/{owner}/{repo}/forks」エンドポイント呼び出しに対する応答からの値です。実行中のユーザーのアカウントでフォークがすでに見つかっていない場合は、forkRepository 関数の実行からのメインの戻り値としてそれを返します
  • Cherry はここで使用するために #25 からいくつかの変更を選択しました
    • f12f25f548a5c5836e9be7d601ed226c5269f5ee
    • 436ceea649b67812c0ec1164fde95d443ce556e0

?

GitHub で表示

以上がjargons.dev の構築 [# フォーク スクリプトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptの文字列文字を交換しますJavaScriptの文字列文字を交換しますMar 11, 2025 am 12:07 AM

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

カスタムGoogle検索APIセットアップチュートリアルカスタムGoogle検索APIセットアップチュートリアルMar 04, 2025 am 01:06 AM

このチュートリアルでは、カスタムGoogle検索APIをブログまたはWebサイトに統合する方法を示し、標準のWordPressテーマ検索関数よりも洗練された検索エクスペリエンスを提供します。 驚くほど簡単です!検索をyに制限することができます

独自のAjax Webアプリケーションを構築します独自のAjax Webアプリケーションを構築しますMar 09, 2025 am 12:11 AM

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

例JSONファイルの例例JSONファイルの例Mar 03, 2025 am 12:35 AM

この記事シリーズは、2017年半ばに最新の情報と新鮮な例で書き直されました。 このJSONの例では、JSON形式を使用してファイルに単純な値を保存する方法について説明します。 キー価値ペア表記を使用して、あらゆる種類を保存できます

8見事なjQueryページレイアウトプラグイン8見事なjQueryページレイアウトプラグインMar 06, 2025 am 12:48 AM

楽なWebページレイアウトのためにjQueryを活用する:8本質的なプラグイン jQueryは、Webページのレイアウトを大幅に簡素化します。 この記事では、プロセスを合理化する8つの強力なjQueryプラグイン、特に手動のウェブサイトの作成に役立ちます

' this' JavaScriptで?' this' JavaScriptで?Mar 04, 2025 am 01:15 AM

コアポイント これは通常、メソッドを「所有」するオブジェクトを指しますが、関数がどのように呼び出されるかに依存します。 現在のオブジェクトがない場合、これはグローバルオブジェクトを指します。 Webブラウザでは、ウィンドウで表されます。 関数を呼び出すと、これはグローバルオブジェクトを維持しますが、オブジェクトコンストラクターまたはそのメソッドを呼び出すとき、これはオブジェクトのインスタンスを指します。 call()、apply()、bind()などのメソッドを使用して、このコンテキストを変更できます。これらのメソッドは、与えられたこの値とパラメーターを使用して関数を呼び出します。 JavaScriptは優れたプログラミング言語です。数年前、この文はそうでした

ソースビューアーでjQueryの知識を向上させますソースビューアーでjQueryの知識を向上させますMar 05, 2025 am 12:54 AM

jQueryは素晴らしいJavaScriptフレームワークです。ただし、他のライブラリと同様に、何が起こっているのかを発見するためにフードの下に入る必要がある場合があります。おそらく、バグをトレースしているか、jQueryが特定のUIをどのように達成するかに興味があるからです

モバイル開発用のモバイルチートシート10個モバイル開発用のモバイルチートシート10個Mar 05, 2025 am 12:43 AM

この投稿は、Android、BlackBerry、およびiPhoneアプリ開発用の有用なチートシート、リファレンスガイド、クイックレシピ、コードスニペットをコンパイルします。 開発者がいないべきではありません! タッチジェスチャーリファレンスガイド(PDF) Desigの貴重なリソース

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境