Qtチュートリアル Git実践
すいません。以前の記事でGit使ってみようとか言っておきながら、ただのGitの説明になっちゃいましたね。
前回で、GitHubの登録・公開鍵の登録・Gitのインストールの3つが終わり、晴れてGitでプロジェクトを管理できるようになりました。
この3つの環境が整うことが大切なわけです。
そしてさらに、First ProjectというリポジトリをGitHubに作成しました。
次は、ここから始まります。

これがFirst Projectの画面です。この画面は、.gitignoreファイルと、README.mdというファイル、そしてLICENSEという3つのファイルがあることがわかりますね。
前回のお話を理解していただけていれば、簡単ですね。3つとも、Gitのリポジトリを作成するときに、作ると決定して作ったものです。
README.md ・・・自分のプロジェクトの詳細を書くファイル
.gitignore・・・gitの管理の対象外にしたいファイルを指定するファイル
LICENSE ・・・あなたのプロジェクトのライセンス
この3つがあれば完璧だ!と思いますよね。でも待てよ?
2回目のお話で、プロジェクトの作成をしました。CドライブのQtというフォルダのsrc_selfというフォルダにプロジェクトを作ったことを覚えておられますか?
このリポジトリと、そのプロジェクトって、これからどうやって関係してくるの?っていうのが疑問ですよね。
ズバリ言います・・・。最初のプロジェクトの作り方は、個人的に非推奨のやり方です。まずGitHubに登録し、リポジトリを作ってから、最初のプロジェクトをつくる方法を、私は推奨します。
とはいえ、せっかく作ったプロジェクトを無駄にしたくはありませんよね?
というわけで、自分達が作ったプロジェクトを生かしつつ、新しく作成したリポジトリも生かす、ということをやって行きたいと思います。
まず、Windowsボタン+Rを押します。OKを押して、PowerShellを開きます。

この位置に行ってくださいね。
そして、次は、リポジトリを見てください。

これ!明らかに目立つボタンがありますよね。ココを押します。

こうなっていますね。まぁ、HTTPSのでいいです。Clone using the web URLとありますので、右の

ここをクリックしてください。左のURLがコピーできます。
で、

こうやって、git clone コピーしたURLとします。

こうなれば成功ですね!
今まで見ていたリポジトリを、リモートリポジトリと言います。つまり、ネットワークの向こう側にあるリポジトリ、リモートっていうのは、遠方の、っていう意味ですからね。
で、こちら側にあるリポジトリを、ローカルリポジトリと言います。こちら側にリポジトリなんて作ったっけ?と思われるかもしれませんが、実は作られている、いや、これから作るのです。
とりあえず、クローンしたファイルがあることを確かめてみましょう。

PowerShellの場合は、Linuxのようなfindコマンドはなくて、Get-ChildItemコマンドを使い、探したいフォルダを指定します。すると、上記のように出てきますね。確かにローカルリポジトリにクローンすることができたようです。クローンというのは、クローン人間とかでおなじみですが、とりあえず、そっくりさんを作るわけです。
でも、2回目に作成した場合と違い、CMakeLists.txtから始まる、一連のMainWindow.cppとか、ソースファイルやヘッダファイルがありませんよね。
それを今度は作ります。

すでにFirstProjectはあるのですが、プロジェクトの名前として、あえてFirstProjectを選択します。プロジェクトはすでに存在していると言われますが気にせずに。

最後にこのように聞かれます。.gitignoreファイルは、2回目のプロジェクトの作成で、バージョン管理システムとしてGitを選択したときに、Qt用のそれが作成されていたのですね。結局同じものが出来上がると思うのですが、(ひょっとしたら、プロジェクトの作成で作られた.gitignoreの方が、よりQt的かもしれないと個人的には思っていますので、上書きはしないのがいいのではないか…と思っています。ちょっと見比べてみたらいいですかね。)
とりあえず、どちらを選んでもいいです。

はい。第2回目のプロジェクトの作成を参考にして、ここで再びプロジェクトの作成を完了いたしました。
QtCreatorから直接プロジェクトを作成する場合は、Gitを選ぶと.gitignoreだけが出来上がり、リモートで作ったプロジェクトをクローンすると、.gitignoreの他、README.mdファイルと、LICENSEファイルがついてくる、ということなので、どうなのかな・・・。リモートリポジトリをクローンする方が、いいっちゃいいのかなと思っています。
それはさておき、ここで作成したFirstProjectは、ローカルリポジトリでの作成ですよね?ということは、この変更は、リモートリポジトリには伝わっていません。リモートリポジトリ見て頂いたらわかりますけどね。
QtCreatorの自動生成機能に頼って複数のファイルを作成したわけなんですけれども、ある意味、あなたが手打ちで全てのファイルを作成し、その中身を書いたことと結果は変わりません。
というわけで、あなたはここまでプロジェクトを改変してきたということにします。必要なファイルを作り、必要なコードを記述した。
そこで、このファイルたちを、今度はリモートリポジトリの方へ渡すことにします。これを、プッシュと言います。プッシュをするためには、一連の手続きを踏む必要がありますね。

まず、パワーシェルで、FirstProjectの場所に行きます。

git statusと打つと、赤い字で示されたファイルがあることに気が付きます。こちらが、最終更新(gitにある今の状態)よりも後に加わった変更を意味しています。言い換えれば、これだけローカルとリモートに誤差がある、ということでもありますね。
この変更をリモートリポジトリの方へ伝えたいわけです。

変更を全てgit addします。これをステージングと言います。これからこのファイルたちを、リモートリポジトリに更新されたファイルとして伝えるのだ!という準備段階になるわけです。

次はgit commit -m "First Commit"
ですね。addが準備であるならば、commitは確定です。

git branchで、現在のブランチを確認しましょう。mainブランチにいますね。

これで、pushができます。
しかし、あなたたちは、初めてgitでpushをします・・・。実は、この時エラーが起きるはずです。
エラーはどういうものかちょっと忘れたのですが、2つの可能性があります。
まず、あなたは誰?と聞かれます。
git config --global あなたのEメールアドレス(Git登録時の)
git config --global あなたの名前(アルファベットで入れるんだろうと思う)
これを行うと、gitの履歴に、あなたの名前とメールアドレスが記録されるようになります。
次の可能性は、送るって言っても、どこに送ればいいの?ということです。
実はまだこの設定が出来てない可能性があります。リモートリポジトリからクローンしてきたんだから、そこへ送るってわかるでしょ?という気もしますが、一応教えてあげなければいけません。
git remote add origin クローンしたときのURL
この2つを行った後に、再度
git push origin main
としてください。

こうなればうまくいったことになります。これで、ローカルリポジトリと、リモートリポジトリがかみ合いましたね。
開発は、ローカルリポジトリで行っていきます。そして、修正を加えていくたびに、今のようにリモートリポジトリに上げていきます。
なお、addを使うときに、よくこれを使う人がいます。
add .
これは、変更されているものも、変更されていないものも、全てコミットの対象になるので、あまりお勧めしません。変更されていないファイルに対しても、例えばFirst Commit、と言ったメッセージがついてしまい、正確なログとは言えなくなるからです。add .は手間がかからないので便利ですが、できれば変更されたファイルを一つ一つ丁寧に上げていくことがいいと思います。
上のリポジトリを見てみてください。変更があったファイルにだけ、commitメッセージがつけられていますよね。元々あったファイルに対しては、変更がなかったようになっています。
また、言い忘れたことですが、公開鍵と秘密鍵の対応です。この前はプログラマ100人いたら!と言いましたが、もっと正確なことを言うと、OS環境の数だけ、公開鍵と秘密鍵のペアが必要になります。公開鍵と秘密鍵を複製すれば、1つで済むと言えば済みますが、お勧めはしません。
githubのページに、公開鍵が複数登録できるようになっていることに気が付いたはずです。
例えば、私は今動かしているWindowsのパソコンの他に、wslという、Window上でLinuxのを動かせるシステムとか、Visual Studioというエディタの中で利用するLinuxターミナル上とか、その中でssh-keygenを呼び出し、それぞれの.sshディレクトリ内の公開鍵と秘密鍵を登録しています。
裏を返せば、登録していなければ、そのエディタや環境からgitコマンドを使ってpushしても、認証パスワードを求められることになるからです。
・・・
とまぁ、今回はこんな感じでgitを使いました。これが基本的なgitの使い方で、個人で使う分には、これを何度も繰り返していくことになります。
ブランチの管理とか、マージとか、複数人が同時に係るプロジェクトとかでは、もうちょっと深く入らないといけませんが、とりあえずこれだけできておけばいいでしょう。話も長くなりましたので、この辺りで終わりにしておきたいと思います。
お疲れさまでした!
(本記事の内容は、上記の本とは無関係です。)
この記事が気に入ったらチップで応援してみませんか?
