Furudateのブログ

プログラミングやネットワーク系の知識・技術がメインのブログ。技術メモ帳的な感じになるかと。岩手から発信していきます。

SourceTree for WindowsからSSHでGitHubにアクセスする

こんにちは。

前回SourceTree for Windowsをインストールし、鍵を生成しました。

今度は、その鍵を使ってGitHubにSSHでアクセスし、リポジトリをクローンしてプッシュするところまでやりたいと思います。これでGitHubのリポジトリをいじり放題です!

GitHubに公開鍵を登録

  • SourceTreeで、tools > create or import ssh keys を選択する
  • ParametersがSSH-2 RSA 1024 であることを確認する
  • loadから前回作成した秘密鍵のファイルを選択する
  • 上のPublic key for pasting in to OpenSSH authorized_keys file:の下に書かれている公開鍵をコピーする (ssh-rsa・・・から始まるやつ)
  • githubのアカウントにコピーした公開鍵を登録する


以上で公開鍵の登録は終了です。次にGitHub上のリポジトリをCloneします。
なお、以下の作業を行う前にGitHub上にリポジトリを作成しておく必要があります。
自分の場合は、他人のリポジトリを自分のリポジトリにコピーする必要があったので、まずGitHub上でForkを行いました。

GitHub上のリポジトリをClone

  • SouceTreeで、Clone / Newをクリック
  • Source Path / URL にGitHubのクローンURLを入力
    • Read + Write権限があるリポジトリでないといけません
    • GitHubのリポジトリ上でSSHを選ぶとURLが出てきます(git@github.com:...みたいなの)
  • Destination folderでローカルに保存する場所を選択し、Cloneをクリック

これでローカルにリポジトリがダウンロードされました。
なお、本来ならばここはCUIでやりたかったのですが、なぜか後述するエラーでできず、仕方なくGUIでやりました。。
CUIでやる場合は、「git clone URL」でいけると思います。

ステージングからプッシュまで

次に、ローカルのリポジトリを変更し、その結果をGitHub上に反映させます。

変更を反映するためには、ステージングしてコミットしてプッシュします。
・・・GitやSVNを触ったことがない人から見れば意味不明ですね笑
以下にそれぞれの意味を載せておきます。自分の解釈なので間違っているかもですが・・・

  • ステージング
    • 変更したファイルに印を付けておき、追跡する。つまり、リポジトリに反映するためにどのファイルが変更されたかをステージングによって区別させておく。
  • コミット
    • 更新を確定すること。反映するためにこの更新をしましたよ!っていうのがコミット。
  • プッシュ
    • コミットで更新されたリポジトリを本家(ここではGitHub)に反映させること。名前の通り「押し出す」って感じですね。


そして、具体的な操作の流れとしては以下のとおりになると思います。

なお、SourceTreeではGUIで操作ができるのですが、GUI負けだと思ってる簡単すぎてGitのコマンドや仕組みが逆に覚えづらくなってしまうので、なるべくCUIでやりたいと思います。

  • ファイルを変更(追加or削除or編集)
  • ファイルをステージング(ターミナルを起動しておく)
    • 「git status」で変更状態を確認
    • 「git add ファイル名(ディレクトリ名)」で変更したファイルをステージング。ディレクトリを選ぶとそのディレクトリ以下全てのファイルをステージングする。
    • ちなみに、「git diff」を使うと、変更はしたがステージングされていないファイルを知ることができる。「git diff --cached」ではこれまでステージングされた一覧を見ることができる。
  • 「git commit」でコミットを行うとVim(デフォルトでは)が起動する。ここではCOMMIT Messageを入力できる。というか、入力しないとエラーになるので、一番上の行にでも入力しましょう。コメント化はしないでくださいね。
  • 「git push リモートリポジトリ 対象のブランチ」でプッシュが出来る。
    • リモートリポジトリは「git remote」で分かります(基本はorigin?)
    • 対象のブランチは「git branch」で分かります。


以上でプッシュまで完了しました!!

ただ、自分の場合はgit pushを打ったところでエラーが発生しました・・・
数時間かけて試行錯誤してみましたが結局できなかったため、結局PushはGUIでやってしまいました。なぜCUIだけでできないのか・・・。ちなみにエラー文は以下のような感じです。

fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

CUIでできないのがヒジョーに悔しいので、これからも試行錯誤してみたいと思います。
エラー文的にはアクセス権がどうのこうのとあるので、鍵の設定とかが原因なのかなーとも思いましたが、GitHubにはちゃんと公開鍵登録してるし、pageantもちゃんと起動して秘密鍵ロードしてるし・・・よく分からん!

もし原因分かる方いたら是非教えていただきたいです。


そして、以下は小技的なやつです。

  • ファイルを削除した場合
    • ファイルを削除した場合は、「git rm ファイル名」を使ってステージングエリアから除外します。
    • ハードディスク上には残しておきたいが、ステージングエリアからは除外したい場合は「git rm --cached」を使います。
  • ファイルを移動した場合
    • この場合は「git mv file_from file_to」を使います。


以上です。

今回はかなりハマってしまい、しかも結局分からず仕舞いでしたが、めげずにGitの勉強を頑張っていきたいと思います。

ではではー。


今回参考にさせていただいたサイト

Git - 変更内容のリポジトリへの記録