Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Git勉強会 2016 Gitで卒論を管理しよう回

1,120 views

Published on

卒論をGitで管理しよう会

Published in: Education
  • Be the first to comment

Git勉強会 2016 Gitで卒論を管理しよう回

  1. 1. Git 勉強会 卒論はGitで管理しましょう回 @kinmemodoki *卒論については104pageから 第⼆回
  2. 2. 2 参考資料(Git) Git講習 masawada⽒ http://sssslide.com/speakerdeck.com/masawada/gitjiang-xi-2014-dot-04-dot-15 Git チュートリアル https://www.atlassian.com/ja/git
  3. 3. 覚えていってほしいもの 1. git の準備 init 2. コミット add & commit 3. 巻き戻し操作 rebase 4. ブランチ操作 brunch & marge 5. リモートリポジトリ操作 clone & pull & push 3 はじめに
  4. 4. What is git? “Git” ってなんですか Gitは、プログラムのソースコードなどの 変更履歴を記録・追跡するための 分散型バージョン管理システムである。 4Wikipedia[git]:http://ja.wikipedia.org/wiki/Git Wikipediaより
  5. 5. What is git? プログラムの基礎っぽいところができたとき 5 次はチャット機能を 追加しようかな でもヘタに変えたら 動かなくなるかも…
  6. 6. What is git? プログラムの基礎っぽいところができたとき 6 新しいディレクトリに コピーして編集しよう!!
  7. 7. What is git? 7 どれが最新…? ⼀個前のはどれ…?
  8. 8. What is git? 8 ソースを特定の時期の 状態にもどしたい…
  9. 9. What is git? 9 チーム開発で最新ファイルの 共有をしたい… ソースコード編集して新機能追加しました お前が編集したのは前バージョンのものだ!
  10. 10. What is git? 10 そんな問題を解決!
  11. 11. What is git? 11 • コードの状態を保存 • 更新した内容がわかる • チームでの開発だともっと便利
  12. 12. 12 0. gitの準備
  13. 13. Windows 1. http://git-scm.com/downloads からインストール 13 0. gitの準備 2. Git Bash を起動
  14. 14. Mac 1. http://git-scm.com/downloads からインストール 14 0. gitの準備
  15. 15. Mac 2. pkgファイルをインストール 3. shファイル(シェルスクリプト)使ってパス設定 15 0. gitの準備
  16. 16. 確認 「git --version」を⼊⼒し versionが表⽰されたら完了 16 0. gitの準備
  17. 17. 17 1. プログラミングをする前
  18. 18. 18 $ git init <directory> 1.プログラミングをする前 新しい 作業ディレクトリ .gitフォルダを含む新規フォルダが作成される + .git
  19. 19. 19 $ git init 1.プログラミングをする前 カレントディレクトリ .git カレントフォルダに.gitディレクトリが作成される +
  20. 20. データの編集履歴の保存場所 昔の状態に戻りたい時に参照 20 1.プログラミングをする前 .git リポジトリ
  21. 21. データの編集履歴の保存場所 昔の状態に戻りたい時に参照 21 1.プログラミングをする前 .git リポジトリ データベース的な感じ
  22. 22. git管理するファイルの例外を登録 (卒論pdfや外部ライブラリなど...) 22 1.プログラミングをする前 .gitignore 情報漏えいや履歴データの節約になる
  23. 23. 23 2. コード編集後
  24. 24. 24 2. コード編集後 ワークツリー 編集履歴をリポジトリに保存する流れ ワークツリーでファイルを追加/編集/削除 (作業ディレクトリ)
  25. 25. 25 2. コード編集後 ワークツリー インデックス 編集履歴をリポジトリに保存する流れ リポジトリに登録したいファイルを追加 (データベース)
  26. 26. 26 2. コード編集後 ワークツリー リポジトリインデックス 編集履歴をリポジトリに保存する流れ 追加したファイルをリポジトリに登録
  27. 27. 27 2. コード編集後 編集履歴をリポジトリに保存する流れ add commit ワークツリー リポジトリインデックス
  28. 28. 28 [filename] を インデックスに登録 $ git add [filename] 2. コード編集後 ワークツリー インデックス add
  29. 29. 29 作業ディレクトリ追加/変更されたファイルをadd $ git add . 2. コード編集後 ワークツリー インデックス add
  30. 30. 30 ワークツリーに追加/変更/削除されたファイルをadd $ git add -A 2. コード編集後 ワークツリー インデックス add
  31. 31. 31 2. コード編集後 作業 ディレクトリ リポジトリ ステージング エリア 編集履歴をリポジトリに保存する流れ add 編集したファイルを登録する準備ができました
  32. 32. 32 $ git commit リポジトリ ステージング エリア commit 登録されたファイルをリポジトリにすべて保存 2. コード編集後
  33. 33. commit後のコメント⼊⼒(vim) 33 2. コード編集後 何の更新をしたかをコメント
  34. 34. 34 $ git commit –m “comment” リポジトリワークツリー commit コメントをしつつコミット 2. コード編集後
  35. 35. リポジトリに登録完了! (これで過去のファイルを復元できる!) 35 リポジトリ登録完了
  36. 36. 36 $ git status ファイルのadd状態を表⽰ 2. コード編集後 ワークツリー インデックス
  37. 37. 37 リポジトリのログを表⽰ $ git log 2. コード編集後 リポジトリlog
  38. 38. 38 2. コード編集後 リポジトリの “詳しい” ログを表⽰ コメント ⽇付 更新者
  39. 39. 39 リポジトリの “短い” ログを表⽰ $ git log --oneline 2. コード編集後 リポジトリlog
  40. 40. 40 2. コード編集後 リポジトリの “簡易的” ログを表⽰ コメント
  41. 41. Tips 41
  42. 42. 42 What is staging? インデックスっている?
  43. 43. 4343 インデックスっている? 編集 ファイル リポジトリ commit What is staging?
  44. 44. 4444 チャット機能&履歴閲覧機能を 実装したぞ!! chat.js history.js チャット機能を付けるために変更したファイル What is staging?
  45. 45. 4545 chat.js リポジトリ history.js まとめて commit 「chat&history機能つけました」 What is staging?
  46. 46. 4646 リポジトリlog 3/14「chatとhistory機能つけた」 3/12「基本機能つけた」 New Old What is staging?
  47. 47. 4747 その後… history機能でバグ発⾒ 「history機能を実装し直しだ…」 リセットしよう! What is staging?
  48. 48. 4848 リポジトリlog 3/14「chatとhistory機能つけた」 3/12「基本機能つけた」 イマココ What is staging?
  49. 49. 4949 リポジトリlog 3/14「chatとhistory機能つけた」 3/12「基本機能つけた」⼀個前 「chat機能も実装し直しじゃねーか…」 What is staging?
  50. 50. 5050 http://protectasapporo.blog.fc2.com/blog-entry-205.html What is staging?
  51. 51. 5151 なんてことになる前に! http://protectasapporo.blog.fc2.com/blog-entry-205.html What is staging?
  52. 52. 5252 chat.js リポジトリ history.js commit 「chat機能つけました」 リポジトリ commit 「history機能つけました」 commitはしっかり分けましょう ※分け⽅はいろいろ commitしたらhistoryを編集 What is staging?
  53. 53. 5353 チャット機能をcommitする前に history.js作っちゃったぞ! history.jsは消さなきゃダメ…? What is staging?
  54. 54. 5454 インデックス What is staging?
  55. 55. 5555 commitchat.js history.js 「chat機能つけました」 add addしない What is staging?
  56. 56. 5656 commitchat.js history.js 「history機能つけました」 add What is staging?
  57. 57. 5757 What is staging? インデックス 良いcommitをするための 整理場所
  58. 58. 5858 Tips ワークツリー リポジトリインデックス 編集履歴をリポジトリに保存する流れ add commit
  59. 59. git できるようになったこと ・リポジトリに登録できるようになった 59 おさらい でてきたコマンド ・git init 初期準備 ・git add 登録するファイルを選ぶ ・git commit リポジトリへ登録 ・git status add状態を表⽰ ・git log commitの履歴を表⽰
  60. 60. 60 3. 巻き戻したいとき
  61. 61. 61 3. 巻き戻したいとき Tips:コミットの指定⽅法 3/14「4th commit」 ------> HEAD 3/12「3rd commit」 ------> HEAD^ 3/10「2nd commit」 ------> HEAD^^ 3/8 「1st commit」 ------> HEAD^^^ New Old
  62. 62. 62 $ git reset (option) (commit ID) 3. 巻き戻したいとき ↑ commit ID(commit IDは HEAD^^ でも指定できる)
  63. 63. 63 3. 巻き戻したいとき git reset (option) 何を戻すのかを指定可能 作業ディレクトリ インデックス リポジトリ(オプション) --hard (no option) --soft 今のまま 今のまま 今のまま
  64. 64. 64 3. 巻き戻したいとき 間違えてaddした!!
  65. 65. 65 ステージングファイルを前回のコミット時に $ git reset HEAD 3. 巻き戻したいとき ステージング ファイル
  66. 66. 66 3. 巻き戻したいとき 過去に戻りたい!!
  67. 67. 67 $ git reset --hard HEAD^^ 3. 巻き戻したいとき 1st commit HEAD^^ 2nd commit HEAD^ latest commit HEAD ワークツリー
  68. 68. 68 3. 巻き戻したいとき 間違えてcommitした!!
  69. 69. 69 直前のコミットをキャンセルしてコミット $ git commit --amend 3. 巻き戻したいとき 新規コミット前コミット内容
  70. 70. 70 前のコミットをキャンセルしてコミット $ git commit --amend 3. 巻き戻したいとき 新規コミット前コミット内容 上書き保存
  71. 71. 71 4. 新機能を追加したいとき
  72. 72. 72 4. 新機能を追加したいとき ブランチ brunch枝
  73. 73. 73 4. 新機能を追加したいとき ブランチ(branch) 複数の機能を並⾏して作成したり リリース版やhot fix版作ったりするときに利⽤ チャット機能 画像アップ機能 主機能 commit commit
  74. 74. 74 $ git branch [name] name master commit デフォルトは「master」 ブランチを新規作成 4. 新機能を追加したいとき
  75. 75. 75 $ git checkout [name] name master commit 編集中のブランチを変更 4. 新機能を追加したいとき 編集中
  76. 76. 76 $ git merge [name] name master commit ブランチを統合 4. 新機能を追加したいとき 編集中 commit
  77. 77. 77 4. 新機能を追加したいとき ブランチの流れ 作成 移⾏ 編集 保存 移⾏ 統合 master commit 編集中
  78. 78. 78 4. 新機能を追加したいとき ブランチの流れ chat master commit 作成 移⾏ 編集 保存 移⾏ 統合 $ git brunch chat 編集中
  79. 79. 79 4. 新機能を追加したいとき ブランチの流れ chat master commit 作成 移⾏ 編集 保存 移⾏ 統合 $ git checkout chat 編集中
  80. 80. 80 4. 新機能を追加したいとき ブランチの流れ chat master commit 作成 移⾏ 編集 保存 移⾏ 統合 $ vim sample.java とか 編集中
  81. 81. 81 4. 新機能を追加したいとき ブランチの流れ chat master commit 作成 移⾏ 編集 保存 移⾏ 統合 $ git commit 編集中 commit
  82. 82. 82 4. 新機能を追加したいとき ブランチの流れ chat master commit 作成 移⾏ 編集 保存 移⾏ 統合 $ git checkout master 編集中 commit
  83. 83. 83 4. 新機能を追加したいとき ブランチの流れ chat master commit 作成 移⾏ 編集 保存 移⾏ 統合 $ git merge chat 編集中 commit
  84. 84. 84 4. 新機能を追加したいとき コンフリクト (マージの衝突)
  85. 85. 85 4. 新機能を追加したいとき コンフリクト (マージの衝突)
  86. 86. 86 4. 新機能を追加したいとき コンフリクト 同じファイルに違う編集をした状態でマージしたとき TAKENOKO is GOD KINOKO is GOD 主機能 commit commit commit
  87. 87. コンフリクトのエラー対処法 87 <<<<<<<HEAD echo("TAKENOKO is GOD"); ======= echo("KINOKO is GOD"); >>>>>>> kinoko コンフリクト状態のファイルを 編集してコミット 4. 新機能を追加したいとき
  88. 88. コンフリクトのエラー対処法 88 <<<<<<<HEAD echo("TAKENOKO is GOD"); ======= echo("KINOKO is GOD"); >>>>>>> kinoko コンフリクト状態のファイルを 編集してコミット 消去 4. 新機能を追加したいとき
  89. 89. コンフリクトのエラー対処法 89 echo("TAKENOKO is GOD"); コンフリクト状態のファイルを 編集してコミット TAKENOKO is GOD 4. 新機能を追加したいとき
  90. 90. 5. リモートでリポジトリを使う 90
  91. 91. 91 5. リモートでリポジトリを使う ひとりでバージョン管理するには
  92. 92. 92 5. リモートでリポジトリを使う みんなでバージョン管理するには 要:みんながアクセスできるリポジトリ R
  93. 93. 93 5. リモートでリポジトリを使う R リモートリポジトリ それぞれの計算機にある ローカルなリポジトリとは別物の 共有リポジトリ
  94. 94. 94 5. リモートでリポジトリを使う R リモートリポジトリ
  95. 95. 95 5. リモートでリポジトリを使う 作業 ディレクトリ リポジトリ ステージング エリア add commit 編集履歴をリポジトリに保存する流れ
  96. 96. 96 5. リモートでリポジトリを使う 作業 ディレクトリ リポジトリ ステージング エリア add commit R pull push リモート リポジトリ
  97. 97. リモートリポジトリから ローカルリポジトリを新規作成してコピー + リモートリポジトリの登録 97 5. リモートでリポジトリを使う $ git clone [URL] R
  98. 98. URL:GitHubのコピーしたいリポジトリの 右下を参照(HTTPSの場合) 98 5. リモートでリポジトリを使う $ git clone [URL]
  99. 99. リモートリポジトリを変更する場合 URL:GitHubのコピーしたいリポジトリの 右下を参照(HTTPSの場合) 99 5. リモートでリポジトリを使う $ git remote set-url origin [URL]
  100. 100. ローカルリポジトリ変更履歴を リモートリポジトリへアップロード 100 5. リモートでリポジトリを使う $ git push R
  101. 101. リモートリポジトリ変更履歴を ローカルリポジトリへダウンロード 101 5. リモートでリポジトリを使う $ git pull R
  102. 102. 覚えていってほしいもの 1. git の準備 init 2. コミット add & commit 3. 巻き戻し操作 rebase 4. ブランチ操作 brunch & marge 5. リモートリポジトリ操作 clone & pull & push 102 まとめ
  103. 103. 以上! 103
  104. 104. 104 素材元 HUMAN PICTOGRAM 2.0 http://pictogram2.com/ git http://git-scm.com/downloads/logos/
  105. 105. 105 本題 卒論でGitを管理しよう!!!
  106. 106. 106 参考資料 参考: http://fromatom.hatenablog.com/entry/2014/02/09/001136
  107. 107. 107 筆者視点 • 論⽂のバックアップができる 校閲者視点 • 誰がどこまで校閲したのかわかる (先⽣がここまで⾒てるなら、ここから読めばいっか...) なぜGit管理するのか
  108. 108. 108 論⽂作成の流れ master"init" とりあえず初期コミット
  109. 109. 109 master $ git branch 1st 論⽂作成の流れ 1st "init"
  110. 110. 110 論⽂作成の流れ 節を書くor修正する毎にコミット コメントは”add (節番号)”、”fix (節番号)” +α にしましょう master 1st "init" "add 1.1" "add 1.2"
  111. 111. 111 論⽂作成の流れ git push して⼤学院⽣に校閲してもらう + pdf を WebDav にアップする master 1st "init" "add 1.1" "add 1.2"
  112. 112. 112 論⽂作成の流れ 校閲する約束をとりつけたら空コミットで校閲者を記載 校閲中、(やる気があれば)待たずに進める master 1st "init" "add 1.1" "add 1.2" "revised by ~~"
  113. 113. 113 $ git commit --allow-empty -m "revised by (校閲者)" 論⽂作成の流れ master 1st "init" "add 1.1" "add 1.2" "revised by ~~"
  114. 114. 114 論⽂作成の流れ master ブランチにマージ masterにコミットが無いとマージコミットは発⽣しません master"init" "add 1.1" "add 1.2" "revised by ~~"
  115. 115. 115 論⽂作成の流れ 以降、別ブランチに切って修正+加筆 ... master"init" "add 1.1" "add 1.2" "revised by ~~" "fix 1.1" "add 2.1" 2nd
  116. 116. 116 前項(master)と現項(Nst)を git checkout で⾏き来できる (必要なければ全部masterで良いかも) (校閲の際に前回の校閲との差分も⾒やすそう) ブランチを切る理由 ブランチ分ける必要ある?
  117. 117. 117 実際にやってみよう!
  118. 118. 118 1. git clone で論⽂テンプレートをダウンロード 2. リモートリポジトリにgitlabのリポジトリを設定 3. 0thブランチを作成 4. document/introduction.tex の1.1節 を編集 5. コメントつけてコミット 6. リモートリポジトリにプッシュ 7. マージ やることリスト
  119. 119. 119

×