More Related Content Similar to Get along with Git (20) Get along with Git9. What's VCS
Version Control System
電子的なファイルの変更履歴を残しておき、
過去の状態に戻したり変更内容を確認できるようにするソフトウェアの総称
音楽・写真・テキスト・書類など電子的な記録全てが対象
数あるVCS ソフトウェアのうちの1つがみんな大好きGitです
14. もともとGit はLinux 開発者のLinus Tovalds が
「オープンソースでLinux作りたいんだけど
良いVCSないわ〜、作るわ〜」
と言い出してサクサク作ったものだそうです
(二週間で作ったという話です… 🙈)
そう、オープンソースのために作ったの
です。
23. GitHub makes Git Champion
GitHub の登場によってオープンソース活動が世の中に急速に拡大しました。
その結果「Git 最強じゃね?」となったのです。
40. ~/.git $ tree -L 1
├── HEAD
├── config
├── description
├── hooks
├── info
├── objects
└── refs
8 directories, 17 files
git init で作ったgit リポジトリです
さっそくREADME.md をつくってコミットしてみましょう
41. ~/gitdir $ echo test > README.md <-- README.mdを作って
~/gitdir $ git add README.md <-- ステージングにして
~/gitdir $ git commit -m "initialize repository" <-- コミット
[main (root-commit) d041e09] initialize repository
1 file changed, 1 insertion(+)
create mode 100644 README.md
42. [main (root-commit) d041e09] initialize repository
~/gitdir $ echo test > README.md <-- README.mdを作って
~/gitdir $ git add README.md <-- ステージングにして
~/gitdir $ git commit -m "initialize repository" <-- コミット
1 file changed, 1 insertion(+)
create mode 100644 README.md
43. [main (root-commit) d041e09] initialize repository
最初のコミットができましたね
~/gitdir $ echo test > README.md <-- README.mdを作って
~/gitdir $ git add README.md <-- ステージングにして
~/gitdir $ git commit -m "initialize repository" <-- コミット
1 file changed, 1 insertion(+)
create mode 100644 README.md
44. ~/.git $ tree
// ~~~省略~~~
├── logs
│ ├── HEAD
│ └── refs
│ └── heads
│ └── main
├── objects
│ ├── 9d
│ │ └── aeafb9864cf43055ae93beb0afd6c7d144bfa4
│ ├── c1
│ │ └── 2d7c0ed49ad9c7aa938743ba6fdee54b6b7fe1
│ ├── d0
│ │ └── 41e090b548f4ab7c11848384f9e171e728fc3d
│ ├── info
│ └── pack
└── refs
├── heads
│ └── main
└── tags
.gitにいろいろ増えました
45. Commit
[main (root-commit) d041e09] initialize repository
1 file changed, 1 insertion(+)
create mode 100644 README.md
.git/objects
├── objects
│ ├── 9d
│ │ └── aeafb9864cf43055ae93beb0afd6c7d144bfa4
│ ├── c1
│ │ └── 2d7c0ed49ad9c7aa938743ba6fdee54b6b7fe1
│ ├── d0
│ │ └── 41e090b548f4ab7c11848384f9e171e728fc3d
│ ├── info
│ └── pack
46. Commit
[main (root-commit) d041e09] initialize repository
.git/objects
├── objects
│ ├── 9d
│ │ └── aeafb9864cf43055ae93beb0afd6c7d144bfa4
│ ├── c1
│ │ └── 2d7c0ed49ad9c7aa938743ba6fdee54b6b7fe1
│ ├── d0
│ │ └── 41e090b548f4ab7c11848384f9e171e728fc3d
│ ├── info
│ └── pack
1 file changed, 1 insertion(+)
create mode 100644 README.md
47. Commit
[main (root-commit) d041e09] initialize repository
.git/objects
│ ├── d0
│ │ └── 41e090b548f4ab7c11848384f9e171e728fc3d
1 file changed, 1 insertion(+)
create mode 100644 README.md
├── objects
│ ├── 9d
│ │ └── aeafb9864cf43055ae93beb0afd6c7d144bfa4
│ ├── c1
│ │ └── 2d7c0ed49ad9c7aa938743ba6fdee54b6b7fe1
│ ├── info
│ └── pack
48. Commit
[main (root-commit) d041e09] initialize repository
.git/objects
│ ├── d0
│ │ └── 41e090b548f4ab7c11848384f9e171e728fc3d
おや、一致したID が見つかりましたね
1 file changed, 1 insertion(+)
create mode 100644 README.md
├── objects
│ ├── 9d
│ │ └── aeafb9864cf43055ae93beb0afd6c7d144bfa4
│ ├── c1
│ │ └── 2d7c0ed49ad9c7aa938743ba6fdee54b6b7fe1
│ ├── info
│ └── pack
50. git cat-file で解析できます
$ git cat-file -p d041 <-- 最初4文字くらいでOK
tree c12d7c0ed49ad9c7aa938743ba6fdee54b6b7fe1
author SuGit <sgmt.snj@gmail.com> 1626708424 +0900
committer SuGit <sgmt.snj@gmail.com> 1626708424 +0900
51. git cat-file で解析できます
tree c12d7c0ed49ad9c7aa938743ba6fdee54b6b7fe1
$ git cat-file -p d041 <-- 最初4文字くらいでOK
author SuGit <sgmt.snj@gmail.com> 1626708424 +0900
committer SuGit <sgmt.snj@gmail.com> 1626708424 +0900
52. git cat-file で解析できます
tree c12d7c0ed49ad9c7aa938743ba6fdee54b6b7fe1
│ ├── c1
│ │ └── 2d7c0ed49ad9c7aa938743ba6fdee54b6b7fe1
こちらも.git/object に同じIDのものがありますね。
$ git cat-file -p d041 <-- 最初4文字くらいでOK
author SuGit <sgmt.snj@gmail.com> 1626708424 +0900
committer SuGit <sgmt.snj@gmail.com> 1626708424 +0900
├── objects
│ ├── 9d
│ │ └── aeafb9864cf43055ae93beb0afd6c7d144bfa4
│ ├── d0
│ │ └── 41e090b548f4ab7c11848384f9e171e728fc3d
│ ├── info
│ └── pack
55. これもcat-file しましょう
100644 blob 9daeafb9864cf43055ae93beb0afd6c7d144bfa4 README.md
│ ├── 9d
│ │ └── aeafb9864cf43055ae93beb0afd6c7d144bfa4
ほう… 次は君ですね
$ git cat-file -p c12d
├── objects
│ ├── c1
│ │ └── 2d7c0ed49ad9c7aa938743ba6fdee54b6b7fe1
│ ├── d0
│ │ └── 41e090b548f4ab7c11848384f9e171e728fc3d
│ ├── info
│ └── pack
57. まとめると
├── 9d
│ └── aeafb9864cf43055ae93beb0afd6c7d144bfa4
├── c1
│ └── 2d7c0ed49ad9c7aa938743ba6fdee54b6b7fe1
├── d0
│ └── 41e090b548f4ab7c11848384f9e171e728fc3d
$ git cat-file -p 9dae
test
$ git cat-file -p c12d
100644 blob 9daeafb9864cf43055ae93beb0afd6c7d144bfa4 README.md
$ git cat-file -p d041
tree c12d7c0ed49ad9c7aa938743ba6fdee54b6b7fe1
author SuGit <sgmt.snj@gmail.com> 1626708424 +0900
committer SuGit <sgmt.snj@gmail.com> 1626708424 +0900
3種類の情報が記録されている、と言うことのようですね。
58. type: commit
$ git cat-file -p d041
tree c12d7c0ed49ad9c7aa938743ba6fdee54b6b7fe1
// c12d のツリーにコミットをつんだよ
author SuGit <sgmt.snj@gmail.com> 1626708424 +0900
// コミットの著者はSuGit だよ
// 時刻は1626708424 +0900 = 2021/7/20 00:27:04 だよ(UNIX時間)
committer SuGit <sgmt.snj@gmail.com> 1626708424 +0900
// コミッターは... 以下同文
59. type: tree
$ git cat-file -p c12d
100644 blob 9daeafb9864cf43055ae93beb0afd6c7d144bfa4 README.md
// README.md を圧縮して9dae に保存したよ
62. 次はログをみましょう
│ ├── HEAD
│ └── refs
│ └── heads
│ └── main
~/.git $ tree
// ~~~省略~~~
├── logs
├── objects
│ ├── 9d
│ │ └── aeafb9864cf43055ae93beb0afd6c7d144bfa4
│ ├── c1
│ │ └── 2d7c0ed49ad9c7aa938743ba6fdee54b6b7fe1
│ ├── d0
│ │ └── 41e090b548f4ab7c11848384f9e171e728fc3d
│ ├── info
│ └── pack
└── refs
├── heads
│ └── main
└── tags
64. log が1つでは寂しいので、コミットをもう一度追加しておきましょう
📄README.md
- test
+ # Abs.
+ This repository is just for testing the git behaviour
せっせとコミット
~/gitdir $ git add README.md
~/gitdir $ git commit -m "update README.md"
[main dd96c8f] update README.md
1 file changed, 3 insertions(+), 1 deletion(-)
65. ~/gitdir$ git log
commit dd96c8f8bbcff86922b3db1f94aa38c4c6f3d633 (HEAD -> main)
Author: Sugit <sgmt.snj@gmail.com>
Date: Tue Jul 20 01:09:32 2021 +0900
update README.md
commit d041e090b548f4ab7c11848384f9e171e728fc3d
Author: SuGit <sgmt.snj@gmail.com>
Date: Tue Jul 20 00:27:04 2021 +0900
initialize repository
新しいコミットが増えました
66. commit dd96c8f8bbcff86922b3db1f94aa38c4c6f3d633 (HEAD -> main)
Author: Sugit <sgmt.snj@gmail.com>
Date: Tue Jul 20 01:09:32 2021 +0900
update README.md
新しいコミットが増えました
~/gitdir$ git log
commit d041e090b548f4ab7c11848384f9e171e728fc3d
Author: SuGit <sgmt.snj@gmail.com>
Date: Tue Jul 20 00:27:04 2021 +0900
initialize repository
67. このときのログファイルは...
~/.git/logs $ tree
├── HEAD
└── refs
└── heads
└── main
~/.git/logs $ cat HEAD
0000000000000000000000000000000000000000
d041e090b548f4ab7c11848384f9e171e728fc3d
SuGit <sgmt.snj@gmail.com> 1626708424 +0900
commit (initial): initialize repository
d041e090b548f4ab7c11848384f9e171e728fc3d
dd96c8f8bbcff86922b3db1f94aa38c4c6f3d633
Sugit <sgmt.snj@gmail.com> 1626710972 +0900
commit: update README.md
72. コミット1つ目
0000 d041
0000000000000000000000000000000000000000 ## <- 1つ前のコミットハッシュ
d041e090b548f4ab7c11848384f9e171e728fc3d ## <- 自身のコミットハッシュ
SuGit <sgmt.snj@gmail.com> 1626708424 +0900 ## <- コミット情報
commit (initial): initialize repository ## <- メッセージ
コミット2つ目
d041 dd96
d041e090b548f4ab7c11848384f9e171e728fc3d
dd96c8f8bbcff86922b3db1f94aa38c4c6f3d633
Sugit <sgmt.snj@gmail.com> 1626710972 +0900
commit: update README.md
78. 単にlog のファイルを書き換えているだけ
SuGit <sgmt.snj@gmail.com> 1626708424 +0900 <-- ここを書き換える
commit (initial): initialize repository <-- ここを書き換える
0000000000000000000000000000000000000000 ## <- 1つ前のコミットハッシュ
d041e090b548f4ab7c11848384f9e171e728fc3d ## <- 自身のコミットハッシュ
105. git reset は"まだリモートに入れていない"
ローカルのコミットに対してだけ安全です
コミットはハッシュの連鎖でしたね。
push済みのコミットに対してgit reset をするということは、
リモートで既に構築されたコミットの連鎖を破壊するってことですね。
135. git stash save
git stash list
git stash apply
git stash drop
git stash pop (apply してdrop する)
147. git merge --squash topic
0000 d041 dd96
9437
a79b 88a0
これを…
0000 d041 dd96
9437
a79b 88a0
b1d9
こう
156. 6 Things to Avoid When Contributing to OSS
1. Pull Requests Should Handle ONE Thing
2. Don’t Break Consistency
3. Don’t Start Work Without Approval
4. Don’t Re-Open Known Problems/Solutions
5. Squash Those Commits
6. Be Meaningful
158. 1. Pull Requests Should Handle ONE Thing
PRでは1つのトピックに関するもののみ
バグAを修正したよ
ついでにxxx の書き方が非効率だったから直してやったぜ
159. 1. Pull Requests Should Handle ONE Thing
PRでは1つのトピックに関するもののみ
バグAを修正したよ
ついでにxxx の書き方が非効率だったから直してやったぜ
いやぁぁぁぁぁぁ!!!😱
160. 2. Don't Break Consistency
一貫性を守ること(空気を読んでくれ…)
コーディングスタイルを守って欲しい、ということです。
161. 3. Don't Start Work Without Approval
急にPR送ってこないで…
まずはIssue たてて、コミュニケーションとってからやで…
169. 3. テンプレート使ってよ… 🥺
Issue のテンプレートが用意されている場合があります。なるべく探しましょう。
📄bug_report.md
## Steps to Reproduce
1. Run `flutter create bug`.
2. Update the files as follows: ...
3. ...
**Expected results:**
**Actual results:**
Logs...
参考: https://github.com/flutter/flutter/issues/59842
184. Branch
master (main) : 製品リリース版のブランチ。リリースに合わせてTagをつける。
develop : 開発ブランチ。リリース前の最新情報はここにある状態にする。
feature : 追加機能、バグ修正などの小テーマごとに用意するブランチ。
release : リリース直前(develop以上、master以下)の微調整作業用ブランチ。
hotfix : masterブランチで発生した緊急修正用のブランチ。