【Git】Githubでリモートウェアハウスにファイルをアップロードするとネットワークエラーがよく起きる、比較的安定した接続方法と私の例

1. 問題の概要

git を使用してプロジェクト ファイルをリモート ウェアハウスに転送すると、次のようなネットワーク接続エラーが頻繁に発生します。

fatal: unable to access 'https://github.com/biluko/RegionCLIP.git/': Failed to connect to github.com port 443 after 21106 ms: Timed out

もう一つの例:

error: failed to push some refs to 'https://github.com/biluko/RegionCLIP.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

もう一つの例:

fatal: unable to access 'https://github.com/biluko/RegionCLIP.git/': OpenSSL SSL_read: Connection was reset, errno 10054

このような状況が何度もあり、毎回不安を感じています。今日の午後、5 回アップロードしようとしましたが、ネットワークの問題によりすべて失敗しました。この問題を解決するために、安定してアップロードする方法を見つけたかったのです。

以下は私にとって最もスムーズなアップロード プロセスです。

2、完全なプロセス

2.1 初期化

コマンド ライン ターミナルまたは Git Bash を開き、Git リポジトリとして初期化するディレクトリに移動し、次のコマンドを実行します。

git init

Git は現在のディレクトリに「.git」というサブディレクトリを作成し、それを Git リポジトリとして設定します。この時点で、バージョン管理に Git の使用を開始できます。

すべてがうまくいけば、次のような出力が表示されるはずです。

Initialized empty Git repository in /path/to/your/repository/.git/

ここに画像の説明を挿入
この時点で、対応するフォルダーを見てみましょう。

ここに画像の説明を挿入

2.2 リモート ウェアハウスから最新の変更を取得し、現在のブランチにマージする

git pull コマンドは、リモート リポジトリから最新の変更をプルし、現在のブランチにマージするために使用されます。次のコマンドを使用して、リモート リポジトリ https://github.com/biluko/RegionCLIP.git からローカル ブランチに変更をプルできます。

git pull https://github.com/biluko/RegionCLIP.git

このコマンドを実行する前に、Git リポジトリが初期化されていることを確認してください (git init によって初期化できます)。また、リモート リポジトリにアクセスするための適切なアクセス権があることを確認してください。

git pull コマンドを実行すると、Git は最新の変更をリモート リポジトリから現在のブランチに自動的にマージしようとします。競合がある場合は、手動で競合を解決してコミットする必要があります。マージが完了すると、ローカル ブランチにはリモート リポジトリからの最新の変更が含まれます。

以前にリモート リポジトリに関連付けている場合 (git Remote add コマンドを使用)、URL の代わりにリモート リポジトリのエイリアスを直接使用できることに注意してください。

git pull origin

Origin を、使用しているリモート エイリアスに置き換えます。

ただし、このコマンドを使用すると、次のようなエラーが報告されます。

ここに画像の説明を挿入

2.3 リモートウェアハウスのSSH URL

上記の HTTP プロトコルを使用するとネットワークが不安定になるため、方法を改善して SSH URL を使用してみます。

git pull git@github.com:biluko/RegionCLIP.git

ここに画像の説明を挿入
git pull [email protected]:biluko/RegionCLIP.git は、SSH プロトコルを使用してリモート ウェアハウスから更新をプルするコマンドです。このコマンドは、SSH URL [email protected]:biluko/RegionCLIP.git に対応するリモート ウェアハウスから最新の変更を取得し、現在のブランチにマージしようとします。

SSH キーが適切に構成され、GitHub アカウントに追加されていることを確認してください。

このコマンドを実行すると、Git は認証用に構成した SSH キーを使用して SSH プロトコルを使用して通信します。すべてが正常であれば、Git はリモート リポジトリから最新の変更を取得し、現在のブランチにマージしようとします。

このコマンドを実行する前に、ローカル Git ウェアハウス ディレクトリで git init コマンドを実行して正しいリモート ウェアハウス アドレスを初期化および設定していることを確認してください。

エラーが発生した場合は、SSH キーが正しく構成されており、リモート リポジトリにアクセスできることを確認してください。

備考:

git pull [email protected]:biluko/RegionCLIP.git コマンドを実行するときに、リモート リポジトリの SSH URL を使用しました。ただし、このコマンドの構文は不完全で、リモート ウェアハウスのエイリアス (リモート) とブランチ名が欠落しています。

正しい構文は次のとおりです。

git pull <remote> <branch>

リモート リポジトリのエイリアスとプルするブランチの名前に置き換える必要があります。リモート リポジトリにエイリアスを追加していない場合は、 git Remote add コマンドを使用してリモート リポジトリを追加できます。

git remote add origin git@github.com:biluko/RegionCLIP.git

これにより、リモート リポジトリのエイリアスがorigin に設定されます。

次に、次のコマンドを使用して、リモート リポジトリの指定したブランチの最新の変更をプルできます。

git pull origin <branch>

必ず<branch>プルしたいブランチの名前に置き換えてください。

リモート リポジトリに確実にアクセスできるようにするには、(git init コマンドを使用して) ローカルで初期化し、正しい SSH キーを構成する必要があることに注意してください。

2.4 ステージング領域への追加

git add . コマンドは、現在のディレクトリ内のすべての変更 (新しく追加されたファイルと変更されたファイルを含む) を、後続の送信のために Git の一時記憶領域に追加するために使用されます。

git add . コマンドを実行すると、Git は現在のディレクトリとそのサブディレクトリ内のすべてのファイルをスキャンし、それらを一時記憶域に追加します。これは、Git がこれらのファイルへの変更を追跡し、コミット操作を実行するときにそれらの変更をコミットに含めることを意味します。

git add . コマンドは、追跡されていないファイルも含め、現在のディレクトリとそのサブディレクトリ内のすべてのファイルをステージング領域に追加することに注意してください。新しく追加されたファイルや追跡されていないファイルではなく、変更されたファイルのみをステージング領域に追加する場合は、 git add -u コマンドを使用できます。

git add . または git add -u を実行した後、 git status コマンドを使用して一時記憶領域のステータスを表示し、追加されたファイルが正しいかどうかを確認できます。

コミットを実行する前に、git commit コマンドを実行して、一時記憶域内の変更をローカル ウェアハウスに送信する必要がある場合もあることに注意してください。

git add .

ここに画像の説明を挿入

上記は、表示された結果のほんの一部です。

2.5 送信操作

git commit -m "RegionCLIP"

git commit -m "RegionCLIP" は操作を送信するコマンドです。これにより、一時ストレージ領域の変更がローカル ウェアハウスに送信され、送信に説明的な送信情報が追加されます。

このコマンドを実行するときは、git add コマンドを実行して、送信するファイルを一時記憶域に追加していることを確認してください。

コマンドのさまざまな部分を説明するには、次のようにします。

git commit: コミット操作を示します。
-m "RegionCLIP": -m パラメータに続く二重引用符の内容をコミットの説明として使用します。「RegionCLIP」をより具体的な提出情報に置き換えて、この提出の内容を説明できます。
git commit -m "RegionCLIP" コマンドを実行すると、Git は一時ストレージ領域の変更をローカル ウェアハウスに送信し、指定された送信情報を送信に割り当てます。

これにより、ローカル リポジトリにコミットが保存されるだけで、リモート リポジトリとは同期されないことに注意してください。ローカルのコミットをリモート ウェアハウスにプッシュする場合は、 git Push コマンドを実行してください。

コミット操作を実行すると、ステージングされたファイルへの変更をバージョン履歴に記録し、この変更に関する説明情報を提供できます。これは、プロジェクトの開発を追跡したり、チーム メンバーと共同作業したりするのに最適です。

ここに画像の説明を挿入

2.6 リモート ウェアハウスを Git ウェアハウスのリモート エイリアスとして追加する

git remote add origin git@github.com:biluko/RegionCLIP.git

ここに画像の説明を挿入

git Remote addorigin [email protected]:biluko/RegionCLIP.git は、リモート ウェアハウスを Git ウェアハウスのリモート エイリアス (リモート エイリアス) として追加します。このコマンドを使用して、origin という名前のリモート エイリアスをリモート リポジトリの URL [email protected]:biluko/RegionCLIP.git に関連付けます。

コマンドのさまざまな部分を説明するには、次のようにします。

git Remote add: リモート エイリアスを追加する操作を示します。
origin: これはリモート ウェアハウスに付けたエイリアスです。必要に応じて意味のある名前を選択できます。通常、デフォルトのリモートウェアハウスエイリアスとしてoriginを使用します。
[email protected]:biluko/RegionCLIP.git: は、リモート ウェアハウスの SSH URL です。
git Remote addorigin [email protected]:biluko/RegionCLIP.git コマンドを実行すると、指定したリモート リポジトリの URL に関連付けられた、origin という名前のリモート エイリアスがローカル Git リポジトリに追加されます。

リモート エイリアスを追加した後、オリジン エイリアスを使用してリモート ウェアハウスを参照できるようになります。これは、プッシュやプルなど、リモート ウェアハウスとの対話型操作に便利です。たとえば、git push origin <branch>ローカル ブランチを元のリモート リポジトリにプッシュするために使用できます。

このコマンドを実行する前に、Git リポジトリを初期化し (初期化には git init を使用)、正しい SSH キーを構成して、リモート リポジトリにアクセスできるようにしてください。

2.7 リモート倉庫へのプッシュ

git push origin master

ここに画像の説明を挿入
git Push Origin master は、ローカルの master ブランチをorigin という名前のリモート リポジトリにプッシュするコマンドです。

コマンドのさまざまな部分を説明するには、次のようにします。

git Push: プッシュ操作を示します。
origin: これは、リモート ウェアハウスに付与するエイリアスで、リモート ウェアハウスの URL を参照するために使用されます。git Remote add コマンドを実行するときは、通常、リモート ウェアハウスのエイリアスをorigin に設定します。
master: プッシュするローカル ブランチの名前を示します。この場合、ローカルの master ブランチをリモート リポジトリにプッシュします。
git Pushorigin master コマンドを実行すると、Git はローカル master ブランチ上のコミットをorigin という名前のリモート リポジトリにプッシュします。

リモート ウェアハウスにマスター ブランチを作成していない場合、Git は新しいマスター ブランチを作成し、ローカル マスター ブランチのコミットをリモート ウェアハウスにプッシュすることに注意してください。

このコマンドを実行する前に、リモート リポジトリの URL がリモート エイリアスとして追加されていること (git Remote add コマンドを使用)、およびそのリモート リポジトリにプッシュするための十分な権限があることを確認してください。

プッシュ操作を実行する前に、 git commit を実行してローカルの変更をローカル ウェアハウスに送信することをお勧めします。これにより、最新の変更が確実にプッシュされます。

2.8 最終結果

ここに画像の説明を挿入

3. HTTP と SSH の理解

3.1 両者の違い

GitHub の HTTP と SSH は、リモート リポジトリと通信し、コードをプッシュおよびプルするための 2 つの異なるプロトコルです。それらの主な違いは次のとおりです。

3.1.1 認証方式

HTTP はユーザー名とパスワードに基づく認証を使用しますが、SSH は認証に公開キーと秘密キーのペアを使用します。

  • HTTP: HTTP プロトコルを使用する場合、認証のために GitHub のユーザー名とパスワードを指定する必要があります。これは、リモート リポジトリと通信するたびにパスワードを入力する必要があることを意味します。
  • SSH: SSH プロトコルを使用する場合は、SSH キーのペア (公開キーと秘密キー) を生成する必要があります。公開キーを GitHub アカウントに追加しますが、秘密キーはローカルに保管されます。リモート リポジトリと通信するたびに、認証に秘密キーを使用します。この方法は、通信のたびにパスワードを入力する必要がないため、より安全です。

3.1.2 伝送プロトコル

HTTP はデータ転送に HTTPS プロトコルを使用し、SSH はデータ転送に SSH プロトコルを使用します。

  • HTTP: データ送信には HTTPS を使用し、暗号化と認証によって通信のセキュリティを確保します。
  • SSH: データ送信には SSH プロトコルを使用します。このプロトコルには暗号化機能と認証機能もあり、公開キーと秘密キーを使用して通信のセキュリティを確保します。

3.1.3 ウェアハウスクローン方式

リモート リポジトリのクローンを作成する場合、HTTP または SSH の使用を選択できます。

  • HTTP: HTTP を使用してクローンを作成する場合、リポジトリの HTTPS URL を使用できます。
git clone https://github.com/username/repository.git
  • SSH: SSH を使用してクローンを作成する場合、リポジトリの SSH URL を使用できます。
git clone git@github.com:username/repository.git

全体として、SSH プロトコルは認証に公開キーと秘密キーを使用し、データ送信も暗号化されるため、比較的安全です。HTTP プロトコルはよりシンプルで、高度なセキュリティを必要としない一部のシナリオに適しています。どのプロトコルを使用するかは、好みと特定のニーズによって異なります。

3.2 SSH ネットワークが HTTP よりも安定しているのはなぜですか?

HTTP ではネットワーク通信中にさまざまなネットワーク エラーが発生することがありますが、SSH が比較的安定している理由は次の点にあると考えられます。

  1. トランスポート プロトコルの違い: HTTP はテキストベースのプロトコルを使用しますが、SSH はバイナリ プロトコルを使用します。バイナリプロトコルはテキストプロトコルに比べて伝送効率が高く、より確実なデータ伝送が可能です。
  2. 長い接続と短い接続: HTTP は短い接続に基づいたプロトコルです。各リクエストは接続の確立と切断を行う必要があります。このような頻繁な接続の確立と切断操作により、ネットワーク伝送のオーバーヘッドと遅延が増加します。ただし、SSH は長い接続を確立するため、接続の確立と切断の回数が減り、データ送信の効率が向上します。
  3. 暗号化と認証メカニズム: SSH は ID 認証とデータ暗号化に公開キーと秘密キーのペアを使用します。このメカニズムにより、より高いセキュリティとデータ整合性が提供され、中間者攻撃やデータ改ざんが効果的に防止されます。HTTP の認証メカニズムは比較的単純で、ユーザー名とパスワードのみに依存しており、セキュリティは脆弱です。
  4. ポート制限: 一部のネットワーク環境では特定のネットワーク ポートに制限がある場合があり、SSH はデフォルトで制限の少ないポート 22 を使用します。HTTP で使用されるデフォルトのポートは 80 または 443 ですが、ネットワーク環境やファイアウォールの設定によっては、制限またはブロックされる場合があります。

まとめると、SSH は HTTP よりも安定性とセキュリティが高く、特にネットワークが不安定で、セキュリティ要件が高く、制限が多い環境では、SSH 通信を使用してより信頼性の高いリモート操作とデータ転送を行うことができます。

おすすめ

転載: blog.csdn.net/wzk4869/article/details/131626483