Git
GitHub

gitの使い方がわからないので勉強したらしい。

こんにちは!

未来電子テクノロジーでインターンをしている者です。

いざgitを使ってみようと思ったのですが、よくわからなくて詰みました。

やっぱりプログラミング関連の勉強では実際に触ってみることが重要ですね。

知ることで使えるようになる、使うことで慣れることができる。

このサイクルで再現性を担保しないといけませんね。

口上さておき、今回はgitを実際に触ってみたので、そのアウトプットとして色々公開します。

□環境

OS:ubuntu18.04

端末:tmux(zsh)

まぁgitのコマンドは基本的にOSに関係なく共通だと思うので大丈夫でしょう。

□やること

学校の課題で作成した書籍管理システムのコードをgitで管理したいと思います。

やってることはファイルの管理と変わらないです。


本題

プルリクエストを作成してマージするところまで行きます!


ディレクトリを作成・移動

gitで管理するってことをわかりやすくするために、gitpraというディレクトリを作成しました。

そして、そのディレクトリの中に今回取り扱うプロジェクトをぶち込みます!


$ mkdir gitpra
$ mv デスクトップ/sisuproen/ gitpra/
#※gitpraディレクトリの中にsisuproenディレクトリをmv(移動)しました。
#sisuproenディレクトリはデスクトップにあったので上記のような記述になっています。

mvコマンドを使えばファイルやディレクトリの移動、名前の変更などができるので便利ですね。


ローカルリポジトリを作成する

早速ローカルリポジトリを作成します。


$ cd sisuproen
$ git init #ローカルリポジトリの作成

これで自分のパソコンにローカルリポジトリが作成できました。

sisuproenディレクトリに変なディレクトリが作成されただけなんですが。


結果の確認

では、何が作成されたのか確認してみましょう。

$ ls -a

<< COMMENTOUT
. .git bookdb.db cgi-bin selectbooklist.py
.. BookList.csv booklist.py day0.py
COMMENTOUT

.gitに注目してください。

このディレクトリだけが追加されました。

このディレクトリにはgitの情報が入っています。

次は、以下のコマンドを実行します。

$ git status

<< COMMENTOUT
ブランチ master(ブランチはmasterですよ)

No commits yet(まだコミットしてませんよ)

追跡されていないファイル:(gitの管理外のファイルですよ)
(use "git add <file>..." to include in what will be committed)

BookList.csv
bookdb.db
booklist.py
cgi-bin/
day0.py
selectbooklist.py

nothing added to commit but untracked files present (use "git add" to track)
COMMENTOUT

gitの管理下においてもらうためには、git addをしなければならないようです。


git addするとどうなるの??

「とっととコミットすればええやんけ」

と思ったのですが、

gitではコミットまでにいくつかの手順を踏むようです。

そのうちの一つがgit addです。

git addを実行すると、まずは対象のファイルがステージングエリアに登録されます。

もっと細かく言えば、

「ワーキングツリー」で編集したファイルを「ステージングエリア」に登録するのです。

□ワーキングツリー

gitの管理下にあり、かつ現在作業中のディレクトリです。

□ステージングエリア

コミットの準備ができているファイルが集まるところです。

$ git add . 

#現在のディレクトリ(sisuproen)の中にある全てのファイルを
#ディレクトリごとステージングエリアに登録。

$ git status
<<COMENTOUT
ブランチ master

No commits yet

コミット予定の変更点:
(use "git rm --cached <file>..." to unstage)

new file: BookList.csv
new file: bookdb.db
new file: booklist.py
new file: cgi-bin/update2.py
...(中略)

COMENTOUT

さっきとは違うのがわかりますか?

追跡されていないファイルという文が消えましたね。

sisuproenディレクトリのファイルとディレクトリが全て、gitの管理下に置かれたわけです。


ファイルを編集してみる

次は、ファイルを編集してみましょう。

今回は、update2.pyファイルに以下の文を追記しました。


update2.py


# これは追加したコメントです。

そして、以下のコマンドを実行します。


$ git diff

<<COMENTOUT
diff --git a/cgi-bin/update2.py b/cgi-bin/update2.py
index 45511d1..1eea10e 100755
--- a/cgi-bin/update2.py
+++ b/cgi-bin/update2.py
@@ -132,3 +132,5 @@ print(
)
% hogehoge
)
+
+# これは追加したコメントです。
COMENTOUT

下の2行に注目です。

追加されたものに+がついていますね。

もし、追加ではなく削除をした場合は代わりに-が表示されるようです。

では、以下のコマンドを実行してみましょう。


$ git status

<<COMENTOUT
ブランチ master

No commits yet

コミット予定の変更点:
(use "git rm --cached <file>..." to unstage)

new file: BookList.csv
new file: bookdb.db
...(中略)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: cgi-bin/update2.py
COMENTOUT

gitの管理下に置かれたupdate2.pyというファイルが編集されたので、modifiedという欄にそのファイル名が書かれていますね。


コミットしてみよう

$ git commit -m "ここにはなんかコメントを入れてください"

これで、ステージングエリアにあるファイルは全てコミットされました。

では、statusを確認してみましょう。

$ git status

<<COMENTOUT
ブランチ master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: cgi-bin/update2.py

COMENTOUT

あれ?

なんか残ってますね。

コミットしたはずなのに...

これは、先程編集したupdate2.pyです。

編集したあとはそのファイルをgit addしていません。

そのため、ステージングエリアに登録されていないのです。

だから、ステージングエリアに登録されていない修正後のupdate2.pyはコミットされなかったのです。

(修正前のファイルはコミットされています。)

ということは、こうすれば良いのですね。

$ git add cgi-bin/update2.py 

$ git status
<<COMENTOUT
ブランチ master
コミット予定の変更点:
(use "git reset HEAD <file>..." to unstage)

modified: cgi-bin/update2.py
COMENTOUT

$ git commit -m "update2.pyの修正版をコミット"
<<COMENTOUT
[master 34439e9] update2.pyの修正版をコミット
1 file changed, 2 insertions(+)
COMENTOUT

$ git staus
<<COMENTOUT
ブランチ master
nothing to commit, working tree clean
COMENTOUT


リモートリポジトリを作成しよう

$ cd .git

$ code config

gitの設定内容がまとめられたディレクトリに移動し、configのファイルを開きます。VScodeが入っていない場合は、vimなどのテキストエディタを使いましょう。

そして、Github上で作成したリポジトリのsshキーをconfig

url = 

の部分に上書きします。

うまく行かなければ色々調べましょう。(投げやり)

$ git push -u origin master  

これで、Githubのリポジトリを再読込したら、リモートリポジトリができました。


要らないファイルを削除する

ファイル管理能力がゴミなので要らないファイルが大量に残ってしまっています。

なので、これからこいつらを闇に葬り去ろうと思います。

手順としては、

1、ファイルを削除する(まだ削除できていない?)

2、コミットする(削除できた?)

よくわかっていないので試してみます。

$ git rm selectbooklist.py

#rm 'selectbooklist.py'

$ git status
<<COMENTOUT
ブランチ master
Your branch is up to date with 'origin/master'.

コミット予定の変更点:
(use "git reset HEAD <file>..." to unstage)

deleted: selectbooklist.py

この状態がどういうことかというと、

Gitのディレクトリにあったがselectbooklist.pyが削除されたのですね。

lsコマンドで確認したら、消えていました。

でも、コミットをしなければバージョン管理がされない(gitは削除前のファイルを最新版だと思っている)ので、最後にコミットしましょう。

$ git commit -m "消してやったぜ"

<<COMENTOUT
[master e0d6e26] 消してやったぜ
1 file changed, 28 deletions(-)
delete mode 100644 selectbooklist.py
COMENTOUT


ブランチを作ってみる

その前にローカルの変更内容をリモートに反映させておこう。

$ git push

ブランチを作成します。

$ git branch PRbranch

$ git branch
#qを押せば戻れます。

新しく作ったブランチに移動しましょう。

$ git checkout PRbranch

では、README.mdを作ってみたいと思います。

$ code README.md

内容は秘密です。

では、これをステージングエリアに登録し、コミットできる状態にしたらコミットしてあげましょう。

$ git add README.md

$ git commit -m "README.mdを作成しました"

masterブランチとは違うブランチで作業し、コミットしました。

これはまだローカルリポジトリでしか反映されていません。

なので、リモートリポジトリに反映させてあげましょう。

そのためにまずは、プルリクエストを作りましょう。

$ git push origin PRbranch

<<COMENTOUT
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 455 bytes | 455.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
remote:
remote: Create a pull request for 'PRbranch' on GitHub by visiting:
remote: https://github.com/a27yb/repository/pull/new/PRbranch
remote:
To github.com:a27yb/repository.git
* [new branch] PRbranch -> PRbranch
COMENTOUT

では、Githubを見に行きましょう。

「Your recently pushed branches:」というものが出てきました。

その右側の緑のボタンを押します。

すると、「Open a pull request」というページがでてきました。

あとは適当にメッセージを書いて緑のボタンを押しましょう。

これでプルリクエストが完了しました。

あとはマージボタンを押すだけですね。

最後に、Github上での変更(プルリクエストを承認し、マージしたこと)をローカルでも反映させましょう。

今回は

$ git pull

で終わらせました。(ブランチはmaster)


さいごに

間違っていたら指摘していただけると嬉しいです。