Gitを入れて使うまで@Windows
【自分の勉強日記的なメモ書きレベルの記事であり、人に見せることは微塵も意識してません。】【参考資料を探しに来た人はごめんなさい,回れ右】
Windowsで育った純正の窓っ子なのでWindowsを手放すなど許せないし、linuxとのデュアルブートも考えなくはなかったけど、日常的にWindowsを使用していたかったのでWindowsにgitを入れた。
今回は,IntelliJみたいにすんなりとはいかず,またいつもみたいなドッタンバッタンが発生したのでめちゃくちゃ長いです.
(※参考サイトに書いてある手順については改めて書いたりはしないので、僕が何言ってるかちゃんと読もうって気概がある猛者がいるのであれば、多分隣にもう一つウィンドウ開いて並べて読むと分かりやすいのではないかと思います。)
(あと,今回は編集中に大きく間が開きまして(下書き作成が2018/06/08だった),その間にPCの句読点設定を変えるなどしたため途中から句読点の種類が変わります.いちいち直すの面倒だったのもありますが,ぶっちゃけ変更しなきゃいけないことを覚えていられませんでした.(途中まで頑張ったが気づいたら忘れてる.) というわけなのでご了承ください.)
(それと,ドッタンバッタン中の記憶は飛びがち+いろいろしてるうちに気づかないで何かを変更したり修正してたりしてるかもしれない+でもメモする余裕もない+しかもかなり後に思い出しながら書いてる,ので何か変なところがあるかもしれない)
(前置きが長い)
作者前置き()
※Githubのアカウントを作る
手始めに、アカウント作るのが一番ハードル低いタスクだったので、とりあえずで作ってました。
別にいつ作ってもいいと思うんですけど、以降アカウント持ってる前提で話が進みます。
プロローグ
導入のHow toを探す
突然ダウンロードサイトに突撃して始められる勇者じゃない上に英語弱者なので、一連の流れを説明している参考サイトが必要。
このサイトはGitのざっくりとした説明や単語の意味一覧もあったし、読みやすそうだったのでここを参考にした。
インストールする
Git for Windowsからインストールソフトをダウンロードし実行。
エディタはvim(まさかのvimデビュー…真に遺憾である…)、PATHはBashだけ使うことにして変更なし、改行コードの取り扱いは忘れた…、後はデフォルトのままにしたはず。
このサイトが割と細かく説明してくれているので、もし気になる人がいるなら参考にすればいいと思う。先述の参考サイトはここら辺の説明をほぼ省いていたので別に何かを参考にしたと思うのだけど、ものの見事に思い出せない。
Gitの設定をする(アカウント情報)
Git Bashを開いてユーザー名とメールアドレスを登録。
Gitの設定をする(SSH鍵の設定)
ここです、ここ。ここら辺が最初に時間取られたところで、のちに間違いを疑いまくる。(違ったけど)
- 鍵を生成するコマンドを入れる
- ファイル名を変更する(保存先の変更もここ)
- パスフレーズの設定
- 生成完了
まあここまでは書いてある通りやるだけで、謎のやらかしに怯えるくらいしかなくむしろちょっと面白くてワクワクしてる節もあったくらい。
- パーミッションを変更する
詰まったのがここ。
パーミッション??英語弱者はそこから。
permission:許可
ほう。なんとなく察した。
(普通ある程度PCとか慣れた人は「-rw-------」って見た時点でこれくらいは察するんだろうけど、初心者は見覚えあるけどなんだっけ、までしか行かないという悲しい現実。)
このサイトが分かりやすく色々説明してくれてたので理解できた。
さて、理解したものの変更できない。←次ココ
ググりまくった結果、Windowsの場合変更しなくて大丈夫らしい。(時間かけた意味ェ…) 情報ソースはどこのブログだったか忘れてしまった。
- configの編集
とりあえずよくわからなかったけど先述の参考サイトに従って変更。(そして後々結局調べることになる。)
この段階での変更には特に手間取らなかったが、結論から言うといつまでも騒動に引っ張り出され、いじりなおしまくった。
GitHubのアカウントを作成する
これを書く過程で気づいたけど、参考にしたサイト、ここにきてアカウント持ってないなら作りましょうって言うんですね。
持ってるからいいや、って思って飛ばして読んでたけど、よく考えるともっと前のアカウント情報をGitに登録する段階で言うべきでは…って思ってみたり。
まあ、なんにせよ持ってたので飛ばした。
リポジトリ作成
ここら辺もBashでしてしまうのかと思ってた。でもGitとGitHubは別物なのだと先人が教えてくれた。
Git:バージョン(変更など)を監視管理してくれる@PC
GitHub:バージョンを管理してくれる@Web
(よく見たら(よく見なくても)普通に参考サイトにも書いてあった)
Gitのデータを分かりやすく保管したり公開してくれるのがGitHubで(多分)、GitHubでのリポジトリの作成はGitHubのことなのでGitHubでしなくちゃいけないんだと。
READMEは基本付けるスタイル。.gitignoreはよくわからなかったから作ってなかったけど、作った方がいいというアドバイスをもらったので今後は作る。(.gitignoreは、変更の把握管理の対象から外すアイテムを指定するファイル)
また、ライセンスについてはMIT Licenseを勧められたのでそれを使っていこうと思うがよくわかっていない。
GitHubに公開鍵を登録する
(そもそも先に参考サイトを斜め読みして大体の流れを把握するなどをやってない時点で仕方ないんですけど、) サイトの説明の順番にしたがって一つ一つこの記録を書いてて、このブログちょこちょこ手順前後してる気がするなぁって思った。(これとリポジトリ作るの普通逆では…)
まあそれは置いておいて、これはちょっとやらかしにビビりながらやった気がする。とりあえずここは何もやらかさずに無事に終わったのでいいんでつが。
自分用のわかりやすい名前を付けて公開鍵を値を張り付けるだけ。やらかすタイミングすらなかった。
SSH接続を確認する
コマンドをたたく。以上。
普通に確認できた。
そして全てが終わった気になった。
後にそれは間違いだったと知った。
GitHubを使う
ここまで中身の割に長々と書いたけど、実際結構時間かかってて。(だからこそもう終わりだと思ってたわけだが) それに既に新しいこととか単語とかお腹いっぱいだったんですよ。
だからもうあとはできるだけ新しいこと複雑なことは少なめで済ませたかったわけで。
ここまで参考にしてたページを改めて見ると、クローン、ブランチ…、普通に眉間にシワ。この時、隣のタブで参考サイト探しの時に見つけたページを開いてて、そっちがかなりシンプルな手順で済ませてあったので参考サイトを変更した。
ええ、ほんとここで何を思ったのか参考サイトを変えたんですよ。(まあそこまで問題もないんだけど。)
これ以降参考にしたのはここです。
ここを選んだのは、先述の理由もあるんですがそれに加えて、既に中身とか出来てる作業ディレクトリをGitHubに投げていこう、っていうスタイルだったからです。
(他の所は大抵ディレクトリをGitHubに投げる前提で作るタイプ。でも僕は多分色々作業進んでから、これはGitHubに投げてもいいなとか,Git管理したいな,って思う人間なので,それだとちょっと嬉しくなかったんです。特にこの時GitHub全部公開される頃だったので、駄作を人に見られることに抵抗がある人間としては最初からGitHubに投げるつもりでディレクトリを作ったりなんかしない。)
手順前半は飛ばして,GitHubの使い方のところから.GitHubでリポジトリを作成するのも終わってたので飛ばして,「ファイルの作成,編集を行う」あたりから再開.
とりあえず,Gitリポジトリに変換,インデックスに追加,コミット,までは順調に出来た.
「リモートリポジトリへ反映させる (git push)」
さあ事件はここで起こった.
起
エラーが起こるんですねー.
(ごめんなさい,エラー内容はどっか行きました.)
もう山場過ぎたと思ってて,とりあえず設定とか登録とか終わったからついでに実践もしておこう,程度の軽い気持ちでやってたのに,
ここにきてエラー起きて,すでにお腹いっぱいだし精神的にくたくただったから心の中でPCに中指.
でも,設定したときの記憶があるうちに解決しておかないとさらにヤバくなる,と思って,明日やろうとかしなかった.(偉い)(軽率な褒め)
承
Let's ネット検索,サイト奔走,試行錯誤タイム
→Hi gacchaaaaann! You've successfully authenticatedとはあったので,とりあえず問題はなし(ってことにした).
ここで問題ないと確信を持てなかった理由:先述の参考サイトではHiから始まるその一行についてしか言及しておらず,その前の"PTY alllocation request failed on channel 0"の一行と,後の"Connection to github.com closed"の一行が存在していいのかどうかわからなかった.(しかもfailedって不穏すぎる文言がある)
(こういうことがあるから,わからなくてもとりあえず書いてある通りやってみな,とか,理解は後ですればいいよ,とか言われてもあまり従う気になれないんですよね.経験値があれば,わからなくてもある程度大丈夫か否かの雰囲気を察せるんだろうけど,初学者は本当にわからないから,一言一句一致してないと安心できない.大丈夫のボーダーがわからないんですよ.何か起こってわからなくなって,そこまでの作業片っ端から疑って結局後から色々調べなきゃいけないなら,最初からちゃんと理解したうえで作業していれば,何か起こっても状況把握を的確に行えてあまり遠回りせずに解にたどり着けるのになあ,と思ってしまうんです.)
(流れ着いたサイトで,その前後の1行ずつは特に問題がなさそうな記述があるのを見てやっと安心できた.)
ただ,まあおかしいのは多分ssh設定あたりなんだろうなって思って,そこを重点的に見ていた.(でもまあ,いつも通り確信は持てないから疑えそうなところは全部疑いまくった.疲れた.)
そして,色々やってる中(どのタイミングだか覚えていないけど),”ssh github”でgithubって打つのがめんどくさく感じたので,ふとconfigのホスト名をgitに変えるなどしていた.(このころは他のgit管理サービスを知らなかったので,僕の中でgitって言ったらほぼGitHubと同義だったんです.)
(色々脱線したので戻る)
で,他に疑ったのが,sshの鍵生成あたり.
生成したときのログ,いっぱいあるから,何かやばいのを見落としてるんじゃないかとか思って何度も見比べたり,他の鍵生成の時のログ例見たりして,どこが一般的に生じる差分なのか確認しなおしたりとか,割と時間かけた.
→(結果的には)なんも問題なかった.(でも案の定最後まで確信持ててない.怖くてほんとやだね)
あとはconfigしか残ってないので,これが犯人なのかなと思いつつ,configのこと調べるお時間をしました.
転
今回把握したsshの.configのおはなし(ちょっとだけ)
ここにいい感じに説明されてるけど,今回に関係ない話(ポートの話とか)も割とあるので,今回使う部分だけピックアップしてみる.(半分くらいコピペに近くなる)
sshで接続する時の一番基本的なコマンド:"ssh ホスト名"
+ユーザー指定:"ssh ユーザー名@ホスト名"
+鍵認証:"ssh ユーザー名@ホスト名 -i ~/.ssh/鍵の名前"
こんな感じでオプションとか長いURLとか打たなきゃいけないんだけど,これをいちいち打たなくても,「こう入れたらこのURLにこのオプション付けてね」っていうオリジナルの省略の仕方を設定できるのが,.config.
(色々入れるの面倒だし,面倒=間違う可能性高いってことだからありがたい.しかも接続の話だから間違ってると色々厄介そうだし.)
Host 略称
HostName ホスト名
User ユーザー名
IdentityFile 鍵のPATH(-iの後に入れるやつそのまま)
って言うのを.configに書いておくと
ssh 略称
と打つだけで先述のめちゃ長いやつに変換して実行してくれるんですねー.わー便利便利.(なんかエイリアスみたい.)
…ってわかるわけあるかよ.
どのサイト見ても,当たり前のようにホスト名とかユーザー名とか,知ってるの当たり前って感じで書いてあるんですよね.(まあ授業でやったよ?って言われたらぐうの音も出ない.一度や二度勉強した程度じゃ残ってくれない記憶力をしてる僕が悪い.)
やっぱりこういうのは結局全部わかってる人がやることで,全部わかったうえでやらないといけないんだな,って思うのこういうとこ.
そうなものとそうでないものがあるのかもしれないけど,その区別すら初心者はわからないわけで,最終的にとりあえず全部そうなのかな,って思うことになるんですな.そこら辺の見切りがうまい人は独学がうまい人なのかもしれない.(また脱線した)
[ホスト名]
接続先のコンピュータを指定するアドレス.それはなんとなく察してはいた.
(URLと大して違わないんじゃないかな…って雰囲気で思ってたけど多分そういうこと軽率に言ったら怒られが発生しそう.)
ただ,"ホスト名"でググると,大抵ドメイン名と一緒に説明してあって,example.comはドメイン名って書いてあるんですよね.
…え,GitHubの接続設定でgithub.comって入れてたじゃないですか.あれー??????
でもまあ,それ抜いたらもう何も残らないし,よくあるガバガバ定義で混在して使われたりするって記述も方々で見かけたので,多分そういうことなんだと思う.混乱するなァ…腹立つ….
ssh接続のHostNameが広義のホスト名なのかっていう確信がちょっと欲しかったけど,"ssh ホスト名"とかで雑に調べただけじゃ出てきてくれなかったので,気力が持たないからそうなんだろうなってことで終わりにしてしまった.(多分なんか英語のドキュメントかなんかが存在して,そういうのには書いてあるんだろうなとは思うんだけど.)
あとIPアドレスでもいいらしいですね.
[ユーザー名]
ログインする時の,"相手側のサーバー内での"ユーザー名.こっちのPC側の話ではない.
この忌々しいユーザー名ってのにもいい感じに引っかかって時間持ってかれた.
だってユーザー名ですよ.しかもあっちのサーバーにログインする時に使うんだって言われたら………
……GitHubのユーザー名だと思うじゃん!!????
いや思うでしょ,思う!!!!!全人類思う!!!!!!(思わない)
(あとかなり時間経ってて錯乱状態極まってたから,あまり落ち着いて考えられてないって言うのもある.ので,いや思わねえよって思っても優しい目で見てください.)
まあそう思った僕は,これで解決!!!!って喜び勇んで変更して試して,見事にエラーが返ってきて逆ギレしてた気がします.
>>> githubにssh接続する時のユーザー名は"git"を指定.<<<
これはそういうものらしい.なんでとかそういうのではなく,多分GitHubのサーバー側の設定がそうなんだなって落ち着いた今なら思う.
きっとGitHubのssh接続についてのページかなんかにそう書いてあるんではないかな.(読んでないけど)
(このころはすでにもう夜遅くて,いつもの"なんでなんで"癖がほぼ死んでいる.)
ところで.
ホスト名もユーザー名も問題ないとなると,いよいよ何がダメだったのかわからない.
ほぼ詰んだ状態で,「よっしゃこれ(git push)が終わったら寝れるー,とか思ってたのは何だったんだろう…もう1時間も2時間も経ってますが…は???」みたいなことを思ってた気がする.(実際どれくらい経ってたか覚えてないけど,1時間以上は経ってたはず)
結
解決
リモートリポジトリのアドレス指定が間違っていた.
散々ssh接続の話だのなんだのいっぱい調べましたが,問題はそこではなく,"git remote add"で入れたアドレス指定が間違ってたようで.
ssh接続用のリンクをコピペして貼り付けたはいいんですけど,そこで僕は謎の賢さを発揮しました.
configを設定していたことを思い出したんです.
なら,それに合わせて変えなくてはなと.
ここで勘違いをしたのが諸悪の根源.
○ [Host名]:[ユーザーID]/[リポジトリ名].git
× [Host名]@github:[ユーザーID]/[リポジトリ名].git
具体的に言うと,元は
git@github:[ユーザーID]/[リポジトリ名].git
変えるべきは
git@github:[ユーザーID]/[リポジトリ名].git
変えたのは
git@github:[ユーザーID]/[リポジトリ名].git
ははっ…(乾いた笑い)
判明したときは腹式呼吸を使ったクソデカため息をするなどしました.
remote addでリモートリポジトリ追加したときって,アドレス間違っててもエラー吐かないんですね.落とし穴だなって思いました.
(わかんない,もしかしたらremote addでエラー吐かれたのかも(記憶力があれなので定かでない))
にしても,参考にしてた1つ目のサイトはコピペしてたけどなんで大丈夫なんだろう….
エピローグ
てな感じで,なんとかかんとかドッタンバッタンやって繋げた後,実はまた色々エラー吐かれるんですけど(ファイルのバージョンが云々とかfetchとかなんとか),ほんとにもう惰性というかとりあえず終わらせる一心でやったのでよく覚えていなくて,後日やり直したので,それはそれでまた別に書きます.
あと,途中で心が折れかけて,1つ目のサイトに従って全部やろうかなぁ,って思ってクローンとかプルリクエストとか理解しようとしたりして,でも結局疲弊した頭では何も理解できず諦めるなど,そういう優柔不断な行動をしたりしていたので,ほんとにめちゃくちゃ時間かかりました.
まあ,そんなわけで,Gitを入れて接続して使ってみるまで,のおはなしでした.
読んでくれてありがとうございます.お疲れ様です.
四苦八苦した僕もおつかれ.あと書いた僕もおつかれ.