1. ホーム

Git のリモート・リポジトリの関連付けに関するいくつかの問題点

2022-03-20 13:36:57

0. 準備中

リモートのコードリポジトリを関連付ける前に、ローカルのssh公開鍵をコードリポジトリに追加する必要があります。データ転送全体は対称的な暗号化機構になっているので、特に注目する必要はありません。これは ssh-keygen コマンドで作成します。

ssh-keygen -t rsa -b 4096 -C "[email protected]"

これは、秘密鍵のラベルとして電子メールを使用して、新しいssh鍵を作成します。

あとはEnterと入力するだけですが、もちろん秘密鍵の保存場所は自分で指定できます。デフォルトは、以下の画像のように、ルートディレクトリの.sshフォルダにあります。

最後に、以下の画像のように、コードリポジトリの対応する場所にコピー&ペーストしてください。

1. 関連するコードのリポジトリ

要件 ローカルにプッシュアップしたいプロジェクトは、間違いなくコードリポジトリと関連付ける必要があります。

実際、git clone url コマンドで直接始めることができます。これは、現在のフォルダーにリモートリポジトリのフォルダーを作成し、すべての関連付けやその他を行った後、プロジェクトをそのフォルダーにコピーしてプッシュするだけでよいのです。

しかし、プロジェクトのあるディレクトリにあるリポジトリを関連付けたいだけの場合もあるので、次の方法を使う必要があります。

1.1 空のリモートリポジトリをローカルプロジェクトに関連付ける

下の画像は、そのReadmeファイルを含まない空のリポジトリです。

  • プロジェクトの場所を探し、git bashを開く。
  • ローカルリポジトリを初期化する
git init

  • リモートコードベースの関連付け

説明:名前のリモートコードベースのためのもので、一般的に名前の起源に行く、私はここで一般化し、ユを書く

git remote add yu [email protected]:Test00097/test.git

関連付けの後、あなたは今、あなたがプッシュすることができるかどうかを知りたいと思うでしょう

現在の状態を見るには、git statusコマンドを使います。

git status


次のような結果が得られ、関連付けがなされていることがわかります。

  • 次に、プッシュのための一連のコマンドを実行します
git add .

git commit -m "code commit"

git push

<イグ

すると、次のようなエラーが発生します。リモートリポジトリのどのブランチにプッシュするかを正確に指定していないためです。

fatal: 設定されたプッシュ先がありません。



コマンドラインからURLを指定するか、リモートリポジトリを設定するには

    git remote add <name> <url>

そして、リモート名を使ってプッシュします。

    git push <name>



 次に、このコマンドを入力します。

# push to the master branch of the remote repository named yu
git push yu master

正常に投稿されたことがわかる↑。

次に、ケース2を見てみましょう。ローカルにコードがあり、リモートコードリポジトリが空でない場合、例えば、readmeファイルが自動的に作成されるような場合です。

1.2 リモートの空でないコードリポジトリに関連するローカルプロジェクト

このケースは最初のケースより複雑ですが、以下のコマンドに従えば大丈夫です。

まず、下の画像でコードリポジトリが空でないことと、readmeファイルが自動的に作成されることが確認できます。

次に、通常のコマンドに従って、関連付けます。

まず、ローカルリポジトリを初期化し、コードベースを関連付けます。"he" はリモートコードベースに付けた名前です。

git init

git remote add he [email protected]:Test00097/test.git


それから、リモートリポジトリにはプルダウンする必要のあるファイルがあるので、次のコマンドは確実にエラーになります。

git pull

<ブロッククオート

現在のブランチにはトラッキング情報がありません。



どのブランチとマージするかを指定してください。



詳しくは git-pull(1) を参照してください。

    git pull <remote> <branch>

このブランチにトラッキング情報を設定したい場合は、次のようにします。

    git branch --set-upstream-to=he/<branch> master



 まず、最初のオプションとして、特定のリポジトリとブランチ情報を使用する方法から説明します。

git pull he master

<イグ

リモートコードリポジトリからreadme.mdファイルがローカルに正常に引き出されたことがわかります。

もちろん、2つ目の方法であるローカルブランチを追跡するbranchtrackを選択し、それを設定した後に、どのリポジトリやブランチを指定せずに、直接git pullコマンドを使用することも可能です。

git branch --set-upstream-to=he/master master

he/master はリモートの he リポジトリで、最後の master はローカルの master ブランチです。

このコマンドは、ローカルの master ブランチがリモートの he リポジトリの master ブランチを追跡するように設定されていることを意味します。

しかし、2番目の方法を直接使用すると、masterブランチが存在しないことをプロンプトが表示されます。

現在利用可能なブランチを見てみましょう

git branch -a

ブランチが空であることは間違いないので、リモートリポジトリからブランチを取得する必要があります。

git fetch he
# merge to local branch
git checkout master

この時点ではアップストリームを設定する必要すらなく、デフォルトで追跡します。

最初の方法を使う場合、ローカルプロジェクトをプッシュできるかどうか試してみましょう。これも、通常のプッシュコマンドに従えば間違いなくエラーになります。

git add .
git commit -m "upload code"
git push

このコードを実行すると、次のように表示されます。

<ブロッククオート

fatal: 設定されたプッシュ通知先がありません。



コマンドラインからURLを指定するか、リモートリポジトリを設定するには

    git remote add <name> <url>

そして、リモート名を使ってプッシュします。

    git push <name>

 では、ステップ1が終わったので、ステップ2を行っていきます。

つまり、ローカルのコミットをリモートのコードベースの master ブランチにプッシュします。

git push he master

しかし、通常のプロンプトに従いましょう

git push he

fatal: 現在のブランチ master には上流のブランチがありません。



現在のブランチをプッシュし、リモートをアップストリームとして設定するには、次のようにします。

    git push --set-upstream he マスター

 次のようなデフォルトの上流を設定しましょう。

git push --set-upstream he master

それでも master ブランチがないと言われたら、上記の、git fetch he を使えばいいのですが、そうでない場合は使いません。

これにより、以下のコマンドでプッシュできるようになります。デフォルトでは、master ブランチにプッシュします。

git push

<イグ

2. その他の問題

  • リモートリポジトリのファイル名がローカルプロジェクトのファイル名と同じである

次のようなエラーメッセージが表示されます。

のエラーが発生しました。以下の追跡されていない作業ツリーファイルは、チェックアウトによって上書きされます。



        a.c



ブランチを切り替える前に、移動または削除してください。



中止する

この時点で、同じ名前のファイルにリネームすることができます

mv filea filea1

次に、使いたいコマンドを使用します。

  • マージ拒否のエラーメッセージが表示された場合

無関係な履歴のマージを拒否する

コマンドの最後に--allow-unrelated-historiesを追加するだけです。

git pull origin master --allow-unrelated-histories