久々にGitを触ってみる(Windows編)
こんにちは。プログラマ2年目のzomi(ぞみ)です。 今日は以前書いたコードをGitで管理していきたいと思ったので、久しぶりにGitを触っていきます。 ↓以前の記事 SVNとは:(引用) 他のバージョン管理システムとも共通する基本的な機能として、「リポジトリ」(repository)と呼ばれるサーバ上の保管領域でファイルを集中的に管理し、複数の作業者が並行して内容を更新していくことができるようにする。作業者側にリポジトリを置かない集中型バージョン管理システムに分類される。 SVNは「サブバージョン」と読みます。 ローカルリポジトリを置かず、サーバ上のリモートリポジトリでバージョンを管理します。 今回行った手順をまとめます。以下の記事を参考に進めました。 すべてデフォルト状態でインストールを行いました。 インストールが終わったら起動して、バージョンを確認しました。 新規登録する場合は初期設定で「ユーザ名」「メールアドレス」を設定するようですが、以前使用していたため行いませんでした。 「何で設定していたっけ・・・?」 というレベルだったので、確認してみました。( GitHubにログインして、リモートリポジトリを作成します。
ディレクトリを作成します。今回は「vending」としました。 Git Bashでディレクトリに移動して 事前にコミットしたいファイルの準備をしていたので、このままコミットを進めていきます。 URLはGitHubで確認することができます。[Code] > [HTTPS]
余談ですが、Git Bushへの貼り付けの仕方が分からず悩みました。(マウスの中央ボタンでできました!) プッシュして無事完了!となるところが、エラーになりました。
リモートのmasterブランチの内容をローカルのmainブランチに持ってくる→再度 見たい方はどうぞ! デフォルトのブランチをmainとしていたので、 そこでいろいろと試してみました。 以下のコマンドで、origin/masterブランチをそのままコピーする、mainブランチを作成します。 ※origin/masterとローカルのmainを紐づけているので、分岐したことを教えるエラーが出ています。 強制的にマージを行いプッシュして事なきを得ました。。。 エラーで苦戦しましたが、調べてやってみることが 一番上達の近道なのかなと感じました。
Gitは奥が深いですね... 何かありましたら、ご意見やご感想をいただけると幸いです。
読んでいただき、ありがとうございました。1.はじめに
2.環境
3.現在の状況
4.手順
①Git Bashのインストール
$ git --version
git version 2.40.1.windows.1
②初期設定
git config --list
で確認しました。)$ git config --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
...
user.name=XXX
user.email=xxx.yyy@gmail.com
merge.ff=false
pull.rebase=merges
③リモートリポジトリの作成
④ローカルリポジトリの作成
git init
を入力し、初期化を行います。ユーザー名@パソコン /c/java/vending
$ git init
Initialized empty Git repository in C:/java/vending/.git/
⑤ローカルリポジトリにコミットする
git add ファイル名
(または .
で全指定)でインデックスに追加します。git commit -m “メッセージ内容”
でインデックスに存在するファイルをローカルリポジトリへ追加します。ユーザー名@パソコン /c/java/vending (master)
$ git add .
ユーザー名@パソコン /c/java/vending (master)
$ git commit -m "[Add] files"
[master (root-commit) 9e0ccbf] [Add] files
3 files changed, 18 insertions(+)
create mode ...
...
⑥ローカルリポジトリとリモートリポジトリの紐づけ
git remote add origin
~ を実行します。ユーザー名@パソコン /c/java/vending (master)
$ git remote add origin https://github.com/ユーザー名/ディレクトリ名.git
git push origin main
でプッシュを行います。5.エラーの解消
git push origin main
でプッシュを行えばOKだったように思いますが、いろいろとやった結果
強制的にマージしてプッシュする方法を取りました。There isn't anything to compare.
main and master are entirely different commit histories.
比較するものは何もない。
mainとmasterはまったく別のコミット履歴だ。
git push origin main
としていたら 出なかったであろうエラー。①追跡するリモートブランチの設定
ユーザー名@パソコン /c/java/vending (master)
$ git branch --set-upstream-to origin/master main
fatal: branch 'main' does not exist
②リモートリポジトリの最新の履歴の取得
git fetch
を行います。ユーザー名@パソコン /c/java/vending (master)
$ git fetch
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 582 bytes | 72.00 KiB/s, done.
From https://github.com/ユーザー名/ディレクトリ名
* [new branch] main -> origin/main
③リモートから最新の履歴を取得してローカルにマージ
git pull
を行います。// masterをmainにマージ→origin/mainにプッシュしたい
ユーザー名@パソコン /c/java/vending (master)
$ git pull origin master
From https://github.com/ユーザー名/ディレクトリ名
* branch master -> FETCH_HEAD
Already up to date.
④mainブランチに切り替え
git checkout main
を行います。ユーザー名@パソコン /c/java/vending (master)
$ git checkout main
Switched to branch 'main'
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
(あなたのブランチと 'origin/master' が分岐しました、
ブランチと 'origin/master' は分岐しており、それぞれ 1 と 1 の異なるコミットがあります。)
⑤リモートから最新の履歴を取得してローカルにマージ
git pull
を行ってからマージしたところ、うまく行かなかったのでユーザー名@パソコン /c/java/vending (main)
$ git pull origin main
From https://github.com/ユーザー名/ディレクトリ名
* branch main -> FETCH_HEAD
Already up to date.
ユーザー名@パソコン /c/java/vending (main)
$ git merge master
fatal: refusing to merge unrelated histories
// 強制的にマージ
ユーザー名@パソコン /c/java/vending (main)
$ git merge --allow-unrelated-histories master
hint: Waiting for your editor to close the file...
Merge made by the 'ort' strategy.
...
3 files changed, 18 insertions(+)
create mode 100644 xxx
create mode 100644 yyy
create mode 100644 zzz
// 強制的にマージしたのでリモートのmainにプッシュ
ユーザー名@パソコン /c/java/vending (main)
$ git push origin main
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 367 bytes | 367.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/ユーザー名/ディレクトリ名.git
3174e74..e946720 main -> main
6.参考
7.おわりに
Javaで何か作りたい①1種類だけ販売してくれる自動販売機
1.はじめに
こんにちは。プログラマ2年目のzomi(ぞみ)です。
今日は現在学習中のJavaを使い、簡単なものを作りたいと思います。
2.環境
Windows 11 Pro 22H2
3.学習中の教材
以下の「スッキリわかるJava」を使用しています。
スッキリわかるJava入門 第3版 (スッキリわかる入門シリーズ) | 中山清喬, 国本大悟, 株式会社フレアリンク |本 | 通販 | Amazon
4.Javaの開発3ステップ
①ソースコードの作成と編集
②コンパイルによる変換
③完成プログラムの実行
「スッキリわかる~」を学習すると「dokojava」という機能を使用することができます。
とてもお手軽なのですが、実際に自分でも3ステップを体感してみたいと思い環境構築をやってみます。
①c:に「java」フォルダを作成→Main.javaファイルを追加します。
public class Main { public static void main(String[] args) { System.out.println("Hello world"); } }
②コンパイルを行う
コンパイルとは:プログラム言語をコンピュータが理解できる言語に変換すること
C:\java>javac Main.java
③完成プログラムの実行
クラスファイルがあることを確認してから実行します。
C:\java>dir ドライブ C のボリューム ラベルは Windows です ボリューム シリアル番号は **** です C:\java のディレクトリ 2023/06/17 16:00 <DIR> . 2023/06/17 16:00 413 Main.class C:\java>java Main Hello world
5.今回作成したもの
160円のペットボトルしか販売していない自動販売機です。とにかく作ってみることを意識!
①数字を入力する
②160以上の場合:お釣りの金額を表示して「お買い上げありがとうございました!」で終了(1)
160未満の場合:160以上を入力するまで「お金が足りません。お金を入れなおしてください。」を繰り返す→160以上を入力したら(1)となるので終了
(1)フローチャート
(2)コード
public class Main { public static void main(String[] args) { System.out.println("お金を投入してください。"); // お金を入れる処理 int money = new java.util.Scanner(System.in).nextInt(); while ( money < 160 ) { System.out.println("お金が足りません。"); System.out.println("お金を入れなおしてください。"); money = new java.util.Scanner(System.in).nextInt(); } // お釣りの計算の処理 int change = money - 160; // お釣りを表示する System.out.println("投入金額は" + money + "円なので、お釣りは" + change + "円です。"); System.out.println("お買い上げありがとうございました!"); } }
今回は学習内容のうち、3つの要素を入れてみました。
- 繰り返し
- キーボードから1つの整数を受け付ける
- 計算
(3)エラー
以下のエラーが出ました。原因は文字コードの相違です。(ファイル形式をUTF-8で保存しています。)
コンパイルの際に「-encoding UTF-8」をつけることで解消しました。
Main.java:15: エラー: この文字(0x81)は、エンコーディングwindows-31jにマップできません // System.out.println("縺願イキ縺?荳翫£縺ゅj縺後→縺?縺斐*縺?縺セ縺励◆?シ?"); ^ エラー18個 C:\java>javac -encoding UTF-8 Main.java
6.参考
7.おわりに
形にするのは楽しいですね!いろいろなものを作り アウトプットしていく習慣を身に着けたいと思います。 学習過程が進んだ際にリファクタリングもしていけたらと思います。 何かありましたら、ご意見やご感想をいただけると幸いです。
読んでいただき、ありがとうございました。