├── README.md ├── RULES.md └── docs ├── git.pdf ├── git.tex ├── github.pdf └── github.tex /README.md: -------------------------------------------------------------------------------- 1 | # アルゴリズムとデータ構造 2 | 3 | 今年度の履修はもう受け付けません。 4 | 5 | 1. 挨拶 6 | https://www.youtube.com/watch?v=_tlt-tsyyeQ 7 | 1. Slack のワークスペースに参加してください。本名で参加してください。 8 | 1. 右上の "Sign Up" のボタンからGitHubのアカウントを作ってください。既にアカウントを持っている人はそれを使って構いません。 9 | 1. 以下のリンクから氏名、学籍番号、GitHubアカウント名を登録してください。 10 | 1. 演習をするための PC が Windows の人は以下の説明に従い WSL2 をインストールしてください(参考 https://docs.microsoft.com/ja-jp/windows/wsl/setup/environment )。 11 | 1. 管理者として PowerShell を実行する(タスクバーの検索窓に powershell と入力し、「管理者として実行する」を選択すればよいです)。 12 | 1. `wsl --install` と入力し Enter キーを押す。その後指示に従ってコンピューターを再起動する(Linux ディストリビューションは Ubuntu でよいです)。 13 | 1. インストールされた Ubuntu を実行し、ユーザー名とパスワードを設定する。 14 | 1. 演習をするための PC が Mac の人はターミナルから `xcode-select --install` と入力することで`clang`をインストールしてください。 15 | 既にインストール済の場合は 16 | ```xcode-select: error: command line tools are already installed, use "Software Update" to install updates``` 17 | と表示されると思いますが問題ありません。 18 | 1. Youtube のプレイリスト(講義ビデオ等) 19 | https://youtube.com/playlist?list=PLmCVdZFx-DucPlvhzdAjjM0QFkM7KwF4T 20 | 21 | [プログラミング演習のルール](/RULES.md) 必ず読んでください 22 | -------------------------------------------------------------------------------- /RULES.md: -------------------------------------------------------------------------------- 1 | # プログラミング演習のルール 2 | 3 | ## 鉄の掟 4 | 5 | * 資料をちゃんと読むこと。資料を読まないで質問していることが分かった場合、質問には答えません。 6 | * エラーメッセージを読むこと。エラーが起きたらとりあえず質問する、というのはやめてください。 7 | エラーメッセージを読み、自己解決を試みてください。 8 | 9 | もちろん「資料を読んだけれども分からない」、「エラーメッセージを読んだけれども分からない」という質問は歓迎します。 10 | 11 | ### C言語のコンパイラについて 12 | コンパイラは `gcc` か `clang` のどちらかを推奨します。`clang` の方がエラーメッセージが親切です。 13 | またオプション `-Wall` を使うとエラーだけでなく警告(Warning)も表示してくれます。コンパイルするときは `clang -Wall apple.c` というコマンドを使うとよいです。 14 | 15 | ### コンパイルエラーメッセージの読み方 16 | 17 | コンパイルエラーのメッセージは 18 | 19 | quickselect.c:10:37: error: .... 20 | 21 | という形になっています。これは `quickselect.c` というファイルの10行目の37文字目にエラーがあるという意味です。 22 | 上記の `...` のところに具体的なエラーの説明が入ります。 23 | `clang`の場合エラーが起きたところを表示してくれるので分かりやすいです。 24 | 25 | quickselect.c:30:32: error: expected ';' after return statement 26 | if(end == m + k) return pivot 27 | ^ 28 | ; 29 | 30 | 上記の例の場合、この場所でセミコロンを書き忘れていることがはっきり分かります。 31 | エラーメッセージを見るだけではどうしてエラーが起きたか分からない場合は**行番号をチェックしてその周辺を良く調べましょう**。 32 | また気がつきにくいエラーとして**全角スペースが混入している**というものがあります。気をつけましょう。 33 | 34 | ### 実行時エラーについて 35 | 実行時エラーはコンパイルエラーよりも原因を発見しにくいです。ほとんどの場合、実行時エラーは`Segmentation fault`だと思います。 36 | 37 | Segmentation fault: 11 38 | 39 | このエラーが起きる場合はほぼ2通りで、**配列のインデックスが配列が確保されている範囲を超えている**か 40 | **再帰呼び出しが無限に続いている**かのどちらかです。 41 | 42 | また、`Floating point exception`は**0で割り算している**場合におこります。 43 | -------------------------------------------------------------------------------- /docs/git.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algd2022/Algorithms-Datastructures/b885bef0458b380bf6c5194c0c79236cc6e9f615/docs/git.pdf -------------------------------------------------------------------------------- /docs/git.tex: -------------------------------------------------------------------------------- 1 | \documentclass[a4paper,11pt, article]{memoir} 2 | 3 | %\setstocksize{237.8mm}{420.5mm} 4 | \settrimmedsize{\stockheight}{\stockwidth}{*} 5 | \setlrmarginsandblock{20mm}{20mm}{*} 6 | \setulmarginsandblock{18mm}{30mm}{*} 7 | \setheadfoot{13.6pt}{15mm} 8 | \setheaderspaces{*}{0mm}{*} 9 | \checkandfixthelayout[fixed] 10 | %\pagestyle{empty} 11 | 12 | \usepackage{xeCJK} 13 | \usepackage{url} 14 | \usepackage{hyperref} 15 | \defaultfontfeatures{Ligatures=TeX} 16 | 17 | \setCJKmainfont[BoldFont= Noto Sans CJK JP Bold]{Noto Serif CJK JP} 18 | \setCJKsansfont{Noto Sans CJK JP} 19 | \setCJKmonofont{Noto Sans Mono CJK JP} 20 | 21 | 22 | \setmainfont[BoldFont= Noto Sans CJK JP Bold]{Noto Serif CJK JP} 23 | \setsansfont{Noto Sans CJK JP} 24 | \setmonofont{Inconsolata} 25 | 26 | \counterwithout{section}{chapter} 27 | 28 | \setsecnumdepth{subsection} 29 | %\maxsecnumdepth{section} 30 | 31 | \usepackage{listings} 32 | 33 | \title{Git の使い方} 34 | \author{森~立平} 35 | \date{} 36 | 37 | \begin{document} 38 | \maketitle 39 | 40 | \noindent 41 | 目標 42 | \begin{itemize} 43 | \item バージョン管理システム Git を使えるようになる。 44 | %\item Scala の2通りの実行方法を経験する。 45 | %\item Scala の ビルドツール sbt を触る。 46 | \end{itemize} 47 | 48 | %\noindent 49 | %今日のワークフロー 50 | %\begin{enumerate} 51 | %\item この原稿の1, 2章を読む。 52 | %\item 3章に書いてある課題をやる。 53 | %\item 4, 5章を読む。 54 | %\item 6章に書いてある課題をやる。 55 | %\end{enumerate} 56 | 57 | \section{バージョン管理システムとは} 58 | バージョン管理システムはある程度の規模のプログラム(もっと一般にテキストファイル)を書く上では必須のツールです。 59 | 今までプログラムを書いてきて、既にある程度動作するプログラムに大きな変更を加えたくなったことがあると思います。 60 | そのような場合に一旦別ファイルにコピーしてからプログラムを編集した経験があるかもしれません。 61 | バージョン管理システムを使えばそのようなことをする必要はありません。過去のバージョンをいつでも見ることができます。 62 | またチームでプログラムの開発をする場合には一つのファイルを複数の開発者が書き換えた場合に可能な限り自動的にマージをしてくれます。 63 | この授業では最近のバージョン管理システムの中でも最もよく使用されている Git を使います。 64 | 以下 Git の最小限の説明をしますが、より詳しく知りたい人はPro Git \url{https://progit.org/} を読むとよいでしょう。 65 | 66 | \section{Git の基本的な使い方} 67 | \subsection{初期設定} 68 | ホームディレクトリに \texttt{.gitconfig} というファイルを作って以下のように書いてください。 69 | \begin{verbatim} 70 | [user] 71 | name = 名前 72 | email = メールアドレス 73 | [push] 74 | default = simple 75 | \end{verbatim} 76 | ここで \texttt{名前} はあなたの名前の英語表記で置き換えてください。 77 | また \texttt{メールアドレス} はあなたのメールアドレスで置き換えてください。 78 | 79 | \subsection{リポジトリを作る(演習では使わないが知っておいた方がよい)} 80 | Git はリポジトリという単位でファイル群を管理します。 81 | まず Git で管理したいディレクトリに移動します。 82 | 既に作成したファイルがあっても、空のディレクトリであっても構いません。 83 | そして 84 | \begin{verbatim} 85 | git init 86 | \end{verbatim} 87 | とコマンドを実行します。 88 | これで現在のディレクトリ以下を Git で管理できるようになりました。 89 | この Git で管理されているディレクトリのことをリポジトリと呼びます。 90 | このディレクトリには \texttt{.git} というディレクトリが作成されています(\texttt{ls -A} で確認できます)。 91 | このディレクトリは Git が情報を保存するためのディレクトリであり、設定ファイルである \texttt{.git/config} 以外を編集することはありません。 92 | 93 | \subsection{管理するファイルを追加する} 94 | リポジトリを作っただけでは Git はどのファイルを管理すればよいのか分かりません。 95 | \begin{verbatim} 96 | git add ファイル名 97 | \end{verbatim} 98 | というコマンドで Git で管理したいファイルを指定します。 99 | ここで \texttt{ファイル名}は Git で管理したいファイル名に置き換えてください。 100 | たとえば \texttt{hello.scala} というファイルを Git で管理したいときは 101 | \begin{verbatim} 102 | git add hello.scala 103 | \end{verbatim} 104 | としてください。これで Git は 「\texttt{hello.scala} というファイルの変更を管理すればよいのだ」 105 | ということを理解します。しかしまだ Git は\texttt{hello.scala} の内容を読んではいません。 106 | 次に紹介する \texttt{git commit} でファイルの内容を記録する必要があります。 107 | また一つのリポジトリ内で複数のファイルを追加しても構いません。 108 | 109 | 110 | \subsection{管理しているファイルの変更を記録する} 111 | \texttt{add} したファイルを Git で記録したいときは 112 | \begin{verbatim} 113 | git commit -m "コメント" 114 | \end{verbatim} 115 | とします。 116 | ここで \texttt{コメント} は「このファイルの変更に対するコメント」で置き換えてください。 117 | 自分一人しか使用しないリポジトリの場合はこのコメントはなんでもよいです。 118 | 119 | リポジトリ内で最終コミット以降に更新された全てのファイルの変更を記録したいときは 120 | \begin{verbatim} 121 | git commit -a -m "コメント" 122 | \end{verbatim} 123 | としてください。 124 | 125 | コミット直後に Git が記録している最新のファイルの状態をリビジョンと呼び、それぞれのコミットに「リビジョン名」が割り当てられます(後述)。 126 | 127 | 128 | \subsection{その他のコマンド} 129 | 過去のコミットログを見たい場合は 130 | \begin{verbatim} 131 | git log 132 | \end{verbatim} 133 | としてください。 134 | 135 | 最終コミットと現在のファイルとの差分を見るには 136 | \begin{verbatim} 137 | git diff 138 | \end{verbatim} 139 | としてください。 140 | 特定のリビジョンと現在のファイルとの差分を見たい場合は 141 | \begin{verbatim} 142 | git diff リビジョン名 143 | \end{verbatim} 144 | としてください。 145 | ここで \texttt{リビジョン名}は比較したいリビジョンのリビジョン名で置き換えてください。 146 | ここでリビジョン名とは \texttt{git log} で該当するコミットに関するログ 147 | \begin{verbatim} 148 | commit 8ac50947b3f75158f457335c65f3ff93e687c045 149 | Author: Ryuhei Mori 150 | Date: Sat Sep 19 10:33:44 2015 +0900 151 | 152 | comment 153 | \end{verbatim} 154 | の中で \texttt{8ac50947b3f75158f457335c65f3ff93e687c045} にあたる部分です。 155 | これはとても長いですが最初の数文字を指定すれば十分です。 156 | 例えばこの例の場合は 157 | \begin{verbatim} 158 | git diff 8ac509 159 | \end{verbatim} 160 | としてください。 161 | 162 | 特定のリビジョン同士の差分を見るには 163 | \begin{verbatim} 164 | git diff リビジョン名1 リビジョン名2 165 | \end{verbatim} 166 | としてください。 167 | 168 | コマンドのヘルプを見たいときは 169 | \begin{verbatim} 170 | git help gitコマンド名 171 | \end{verbatim} 172 | としてください。 173 | ここで \texttt{gitコマンド名} は git のコマンド名(init, add, commit, log, diff など)で置き換えてください。 174 | また、ここで紹介したコマンド以外にもたくさんの gitコマンドがあります。 175 | 176 | \if0 177 | \subsection{リポジトリの clone} 178 | 上の使用方法では自分でリポジトリを作りましたが、既に存在するリポジトリを自分の環境にコピーすることができます。 179 | \begin{verbatim} 180 | git clone gitリポジトリパス 181 | \end{verbatim} 182 | とすると現在のディレクトリに新しいディレクトリが作成されます。 183 | この新しいディレクトリは \texttt{gitリポジトリパス}で指定したリポジトリのコピーです。 184 | リポジトリの指定方法については後述します。 185 | 186 | Clone で作成されたリポジトリの場合、\texttt{.git/config} に clone 元のリモートリポジトリのパスが書かれているはずです。 187 | Clone したリポジトリに対して書き込み権限があれば変更をリモートリポジトリに反映することができます。 188 | \begin{verbatim} 189 | git push 190 | \end{verbatim} 191 | としてください。 192 | 193 | リモートリポジトリが更新された場合にその変更を自分のリポジトリに取り込むには 194 | \begin{verbatim} 195 | git pull 196 | \end{verbatim} 197 | とします。ただし、自分のリポジトリとリモートリポジトリとで同じファイルの同じ部分を編集していた場合には 198 | コンフリクトを自力で解消する必要があります。 199 | \fi 200 | 201 | %この \texttt{git push}, \texttt{git pull} についてはこの授業で使用するかどうか検討中です。 202 | 203 | \if0 204 | \section{Scala のプログラムファイルをコンパイルする} 205 | 206 | \section{Scala用のビルドツール sbt を利用する} 207 | \fi 208 | 209 | \section{やってみよう} 210 | Git の リポジトリを作って一通りコマンドを使ってください。 211 | 一例としては、リポジトリを作る$\rightarrow$なにかテキストファイルを作る$\rightarrow$追加する$\rightarrow$コミットする$\rightarrow$ファイルを編集する$\rightarrow$差分を見る$\rightarrow$変更をコミットする$\rightarrow$ログを見る 212 | $\rightarrow$ファイルを編集する$\rightarrow$ 最初のリビジョンとの差分を見る。 213 | %\item 脇田先生の Git リポジトリから clone する。 214 | %\begin{verbatim} 215 | %git clone https://github.com/titech-is-cs115/Alogirhtms-Datastructures.git 216 | %\end{verbatim} 217 | %というコマンドを実行してください。 218 | %このリポジトリは GitHub というサービスを利用して公開しています。 219 | %ウェブブラウザから \texttt{https://github.com/\allowbreak titech-is-cs115/lecture} にアクセスすることでもリポジトリの内容を見ることができます。 220 | %\item 以降は \url{https://titech-is-cs115.github.io/lecture/assignments/lx00a.html} を参照。 221 | %\item Scalaプログラムをコンパイルしてから実行する。 222 | %\item sbtコマンドを一通り使う。 223 | 224 | \section{Git の \texttt{clone}, \texttt{push}, \texttt{pull} について} 225 | %Git の基本的な使い方については前回の資料を見てください。 226 | %より詳しい説明は公式のドキュメント \url{https://git-scm.com/} にあります 。 227 | Git を使って複数人で共同開発するには\texttt{clone}, \texttt{push}, \texttt{pull} コマンドを使用する必要があります。 228 | この演習の授業でもこれらのコマンドを使って課題の配布、提出をおこないます。 229 | この章で使う用語の説明をします。 230 | \begin{itemize} 231 | \item ワーキングディレクトリ: 現在作業しているディレクトリで Git で管理されているもの。ディレクトリ \texttt{.git/} を直下に含むディレクトリ。 232 | \item ローカルリポジトリ: ワーキングディレクトリに対応するリポジトリ。実体としては \texttt{.git/} の中身。 233 | \item リモートリポジトリ: インターネット上あるいはその他ネットワーク上にあるリポジトリ。この授業では GitHub上のリポジトリを指す。 234 | \end{itemize} 235 | 236 | \subsection{リモートリポジトリを clone する} 237 | リモートリポジトリを clone してローカルリポジトリを作成するには 238 | \begin{verbatim} 239 | git clone リモートリポジトリのパス 240 | \end{verbatim} 241 | とコマンドを実行します。 242 | ここで \verb|リモートリポジトリのパス| の指定方法には HTTPS と SSH の二種類がありますが、 243 | この授業では SSH を用いてアクセスします。 244 | %HTTPS は事前の設定が必要ありませんが、GitHub で使用するときには\texttt{push/pull} するときに毎回 245 | %ログイン名とパスワードを求められます。 246 | GitHub 上のリポジトリのパスはウェブブラウザからリポジトリのページにアクセスすることで調べられます(リポジトリのページにある``Clone or download''と書いてある緑色のボタンを押して``Clone with SSH''を選んでください)。 247 | 例えば\texttt{alg2018/Alogirhtms-Datastructures}の場合はリポジトリのパスは 248 | \begin{verbatim} 249 | git@github.com:alg2018/Alogirhtms-Datastructures.git 250 | \end{verbatim} 251 | です。なので 252 | \begin{verbatim} 253 | git clone git@github.com:alg2018/Alogirhtms-Datastructures.git 254 | \end{verbatim} 255 | とすることで GitHub の\texttt{alg2018/Alogirhtms-Datastructures}というリポジトリを clone できます。 256 | 現在のディレクトリの下に \texttt{Alogirhtms-Datastructures} というディレクトリが作成されました。 257 | これは Git のローカルレポジトリでもあります。 258 | 259 | \subsection{ローカルリポジトリの変更をリモートリポジトリに反映する} 260 | リモートリポジトリに書き込む権限がある場合にはローカルリポジトリの変更をリモートリポジトリに 261 | 反映することができます。 262 | まずワーキングディレクトリの内容をローカルリポジトリに commit してください。 263 | %\begin{verbatim} 264 | %git diff 265 | %\end{verbatim} 266 | %としても何も表示されない 267 | \begin{verbatim} 268 | git status 269 | \end{verbatim} 270 | とコマンドを実行して 271 | \begin{verbatim} 272 | nothing to commit, working directory clean 273 | \end{verbatim} 274 | と最後の行に表示されていれば大丈夫です。 275 | このローカルリポジトリに対する commit をリモートリポジトリに反映するには 276 | \begin{verbatim} 277 | git push 278 | \end{verbatim} 279 | とします。 280 | もしもリモートリポジトリが更新されている可能性があるのであれば先に次に説明する \texttt{git pull} を実行しておいてください。 281 | 282 | \subsection{リモートリポジトリの変更をローカルリポジトリに反映する} 283 | 逆にリモートリポジトリの変更をローカルリポジトリに反映したい状況があります。 284 | 複数人でファイルを更新している場合や一人が大学や自宅など複数の場所でファイルを更新している場合等 285 | が該当します。 286 | そのような場合には 287 | \begin{verbatim} 288 | git pull 289 | \end{verbatim} 290 | とします。 291 | 前回の pull の後にリモートとローカルで同じファイルの同じ箇所が変更されていると、 292 | 変更の衝突を自力で解決する必要があります(今回は説明しません)。 293 | 294 | \section{この授業の課題の進め方について} 295 | この授業では GitHub の Fork という機能と Pull request という機能を使って課題の配布、提出を実現します。 296 | %当初はこの9月に公開された GitHub の機能 ``Classroom for GitHub''を利用したかったのですが問題があったため利用を見送りました。 297 | この授業で課題を受け取り提出するまでのワークフローは以下のようになります。 298 | \begin{enumerate} 299 | \item ウェブブラウザで GitHub 上の課題のリポジトリ(alg2018 の下のリポジトリ。学生は Read-Only)にアクセスし自分のアカウントに Fork する。 300 | そのためにウェブブラウザで GitHub 上の課題のリポジトリにアクセスし右上にある Fork と書かれたボタンを押す。 301 | \item 自分のアカウントに Fork されたリポジトリをローカルに clone する。 302 | \item ファイルを編集したり追加したりして課題を終らせる。その間には定期的に commit したりその他の Git のコマンドを使用したりする。 303 | \item GitHub上の Fork によって作成されたリポジトリに push する。単に \texttt{git push} とすればよい。課題を進める途中で push しても構わないが最後には必ず push する。 304 | \item GitHub上の Fork によって作成されたリポジトリから Fork 元のリポジトリに Pull request を送る。 305 | そのためにウェブブラウザで Fork によって作成されたリポジトリにアクセスしファイルリストの上にある``New pull request'' ボタンを押す。 306 | そうすると Fork元のリポジトリとの差分が表示される。 307 | Pull request のタイトルとメッセージを書いて緑色の ``Create pull request'' ボタンを押す。 308 | タイトルは最後の commit のメッセージが入力されているはずだが好きなものに変更してよい(「課題を提出します」など)。 309 | メッセージは簡単な感想や質問、課題の中で工夫した点などを書く。 310 | \item もしも Pull request を送った後にファイルを更新して再提出したい時には自分の一回目の Pull request にコメントでその旨を書く。 311 | 各課題につき Pull request は一人一回とする。 312 | \end{enumerate} 313 | %この Fork と Pull request を使った方法の場合、 314 | 学生同士でお互いの GitHub 上のリポジトリや Pull request を見ることができます。 315 | 自分が課題を終えた後に他の人の解法を見てみると、勉強になるかもしれません。 316 | 以下が課題提出の注意点です。 317 | \begin{enumerate} 318 | \item \textbf{Fork してから clone する}。元の\texttt{alg2018/レポジトリ名}からclone しない。 319 | \item 忘れずにワーキングディレクトリの内容をローカルリポジトリに commit する。 320 | \item その後に忘れずにリモートリポジトリ(Fork で作成されたもの)に push する。 321 | \item その後に忘れずに GitHub 上で Forkで作成されたリポジトリから Fork元のリポジトリに Pull request を送る。 322 | \end{enumerate} 323 | このうち一つでも忘れると正しく課題が提出できないので注意してください。 324 | 課題が提出できたか不安なときは教員、TAに聞いてください。 325 | 326 | 327 | 328 | \if0 329 | \section{この授業の課題の進め方について(没になった案)} 330 | この授業ではつい先月公開された GitHub の機能 ``Classroom for GitHub''を利用して課題の配布/提出を行います。 331 | 課題を受け取り提出するまでのワークフローは以下のようになります。 332 | \begin{enumerate} 333 | \item GitHub 上の titech-is-cs115/student の wiki に書かれた課題に対応する URL にアクセスする。 334 | すると各学生ごとにリポジトリが GitHub の titech-is-cs115 の下にできる(リポジトリ名は \verb|#課題名#-#ユーザー名#| となるはず)。 335 | \item そのリポジトリをローカルに clone する。 336 | \item ファイルを編集したり追加したりして課題を終らせる。その間には定期的に commit したりその他の Git のコマンドを使用したりする。 337 | \item GitHub上のリモートリポジトリに push する (課題を進める途中で push しても構わないが最後には必ず push する)。 338 | \end{enumerate} 339 | 最後の提出の方法について push の後にもう1ステップを今後追加する可能性があります。 340 | 当面は GitHub上のリポジトリのある時刻のものを提出物としてみなすことにします。 341 | 342 | また、\texttt{titech-is-cs115/students} は Git の練習用のリポジトリです。 343 | 学生全員が \texttt{push/pull} することができます。 344 | 自由にファイルを作成してよいので Git を使う練習をしてみてください。 345 | \fi 346 | 347 | 348 | %\section{sbt と ScalaTest を用いた単体テスト} 349 | %まず、titech-is-cs115/student の wiki に書かれている URL にアクセスして ``Accept this assignment'' ボタンを押して課題(assignment) に参加してください。 350 | %titech-is-cs115 の下に \verb|assignment0-アカウント名| というリポジトリができるはずです。 351 | %そのリポジトリの中に課題の説明のファイル(このpdf)と課題のプログラムの雛形が置かれています。 352 | 353 | 354 | 355 | \section*{日常での Git の使用} 356 | Git はとても便利な道具です。Gitに慣れると継続的に編集するようなテキストファイルを全て Git で管理したくなります。 357 | 今後プログラムやレポート、論文(Texファイル) を書く機会が増えてくるかと思いますが、それらを Git で管理しインターネット上の 358 | リポジトリに保存しておくととても便利です。 359 | 大学でも自宅でも同じファイルにアクセスすることができ編集履歴が全て残ります。 360 | %そのため日常的に Git を使うことをすすめます。ただし GitHub は無料アカウントでプライベートリポジトリを作成できないので 361 | %Bitbucket 等他のリポジトリホスティングサービスを使用した方がよいでしょう。 362 | 363 | \end{document} 364 | -------------------------------------------------------------------------------- /docs/github.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algd2022/Algorithms-Datastructures/b885bef0458b380bf6c5194c0c79236cc6e9f615/docs/github.pdf -------------------------------------------------------------------------------- /docs/github.tex: -------------------------------------------------------------------------------- 1 | \documentclass[a4paper,11pt, article]{memoir} 2 | 3 | %\setstocksize{237.8mm}{420.5mm} 4 | \settrimmedsize{\stockheight}{\stockwidth}{*} 5 | \setlrmarginsandblock{20mm}{20mm}{*} 6 | \setulmarginsandblock{18mm}{30mm}{*} 7 | \setheadfoot{0mm}{15mm} 8 | \setheaderspaces{*}{0mm}{*} 9 | \checkandfixthelayout[fixed] 10 | %\pagestyle{empty} 11 | 12 | \usepackage{xeCJK} 13 | \usepackage{url} 14 | \usepackage{hyperref} 15 | \defaultfontfeatures{Ligatures=TeX} 16 | 17 | \setCJKmainfont[BoldFont=Noto Sans CJK JP Bold]{Noto Serif CJK JP} 18 | \setCJKsansfont{Noto Sans CJK JP} 19 | \setCJKmonofont{Noto Sans Mono CJK JP} 20 | 21 | 22 | \setmainfont[BoldFont=Noto Sans CJK JP Bold]{Noto Serif CJK JP} 23 | \setsansfont{Noto Sans CJK JP} 24 | \setmonofont{Inconsolata} 25 | 26 | \counterwithout{section}{chapter} 27 | 28 | %\setsecnumdepth{subsection} 29 | %\maxsecnumdepth{section} 30 | 31 | \usepackage{listings} 32 | 33 | \title{GitHubアカウントの作り方} 34 | \author{森~立平} 35 | \date{} 36 | 37 | \begin{document} 38 | \maketitle 39 | 40 | \noindent 41 | 目標 42 | \begin{itemize} 43 | \item GitHub アカウントを作る。 44 | \item Google Form で履修者の情報を登録する。 45 | \end{itemize} 46 | 47 | 48 | \noindent 49 | ワークフロー 50 | \begin{enumerate} 51 | \item GitHub アカウントを作る。 52 | \item SSH鍵を作る。 53 | \item SSH鍵を GitHub アカウントに登録する。 54 | \item Google Form から情報を登録する。 55 | \end{enumerate} 56 | 57 | \section{SSH 鍵の GitHub への登録} 58 | この授業の課題の配布、提出は GitHubを通じて行います。 59 | Git から GitHub 上のリポジトリにアクセスする度にパスワードを入力するのは面倒なので SSH 鍵を登録しておきます。 60 | ここで SSHとは Secure Shell の略で暗号化された通信を実現するための仕組みです。 61 | まず SSH 鍵を生成するために 62 | \begin{verbatim} 63 | ssh-keygen 64 | \end{verbatim} 65 | とコマンドを実行します。 66 | すると 67 | \begin{verbatim} 68 | Generating public/private rsa key pair. 69 | Enter file in which to save the key (/home/mori/.ssh/id_rsa): 70 | \end{verbatim} 71 | と鍵ファイルのパスを尋ねられますがデフォルトのままでよいので、そのまま Enter を押します。 72 | 次に 73 | \begin{verbatim} 74 | Enter passphrase (empty for no passphrase): 75 | Enter same passphrase again: 76 | \end{verbatim} 77 | とパスフレーズ(鍵を使用するときのパスワード)を尋ねられますが、これは空にしたいので何も入力せずに Enter を押します。 78 | そうすると 79 | %\begin{lstlisting}[frame=single] 80 | %test 81 | %\end{lstlisting} 82 | \begin{verbatim} 83 | Your identification has been saved in /home/mori/.ssh/id_rsa. 84 | Your public key has been saved in /home/mori/.ssh/id_rsa.pub. 85 | The key fingerprint is: 86 | 3c:08:1f:10:a4:c1:4e:46:cf:5a:6d:ca:8c:58:ad:2b mori@gmac01.is.titech.ac.jp 87 | \end{verbatim} 88 | \begin{verbatim} 89 | The key's randomart image is: 90 | +--[ RSA 2048]----+ 91 | | oo.+. | 92 | | +* o | 93 | | +o * + | 94 | | o.B = + | 95 | |. + + o S | 96 | | . . | 97 | |E . | 98 | | . | 99 | | | 100 | +-----------------+ 101 | \end{verbatim} 102 | というように表示されて鍵が生成されます。 103 | ここで \texttt{id\_rsa} が秘密鍵、\texttt{id\_rsa.pub}が公開鍵です(両方ともテキストファイルです)。 104 | 公開鍵は暗号化に用いられ秘密鍵は復号に用いられます。秘密鍵は他人に知られてはいけません。公開鍵は暗号化された通信を 105 | するために通信の相手に教える必要があります。公開鍵は第三者に知られても安全です。 106 | この授業でこれ以上公開鍵暗号の説明はしませんが、「秘密鍵は信用できない者に知られてはいけない」、「公開鍵は誰に知られたとしても安全」 107 | ということは知っておいてください。 108 | 109 | 次に公開鍵を GitHub に登録します。 110 | GitHub にログインして右上にあるアイコンから Settings を選びます。 111 | 左のメニューから SSH keys を選びます。 112 | そこで Add SSH key を選び、Title とKey (公開鍵)を入力します。 113 | Title はなんでもよいです(例えば「西7演習室」など)。公開鍵として \texttt{id\_rsa.pub} の内容を入力します。 114 | ホームディレクトリで 115 | \begin{verbatim} 116 | cat .ssh/id_rsa.pub 117 | \end{verbatim} 118 | とコマンドを実行すると 119 | \small 120 | \begin{verbatim} 121 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/gxywsteOQMka+SQRuSboMkamcKTp16 122 | s1Kaac6GsdSIhZeJNfn+j/Ei9HOR7kg94ENIon2FHhgAffMtMIno9HZiiE+32ynxBf5trL 123 | AgvzBnzDTu8PMfz3uxH6Yai5MDVufBlT++A42fwhxQQGcF4rmO77/2LWXSwTijGk7W2ji8 124 | 0OdBvZgmhwQNNg5LPa8x9JsPt4E3LgZPEREaVyxmPJzJFohRXLvMyqBtft3F60Qb7hAnrP 125 | mUssRGLqxt8ah39HL/nN2t1KXMx3UH2pLMgxvxv/K6hhItX93vQM88YLtL8E+dB14Tp7lk 126 | DxshNfgaA+qhlWrFgd98OLsvCeEMtb mori@gmac01.is.titech.ac.jp 127 | \end{verbatim} 128 | \normalsize 129 | というようにファイルの中身が表示されます。 130 | これをコピーアンドペーストで Key のところに入力してください。 131 | % 132 | これで GitHub に SSH を通じてアクセスできるようになりました。 133 | もしも自宅など別の環境から GitHub にアクセスしたい場合には別途 SSH鍵を作成して登録してください(GitHubには複数の公開鍵を登録できます)。 134 | 135 | \textbf{[この段落は余談です]} SSH はもともとリモートマシンに暗号化された通信用いて安全にログインするための仕組みです。 136 | SSH を使えば西7号館の演習室に外からログインすることも可能です。 137 | 設定は演習室で \texttt{\~{}/.ssh/authorized\_keys} というファイルを作成して自宅で使用するSSH鍵の公開鍵を書き込むだけです(\texttt{\~{}/}はホームディレクトリという意味)。 138 | これで自宅など他の場所から 139 | \begin{verbatim} 140 | ssh アカウント名@porto.is.titech.ac.jp 141 | \end{verbatim} 142 | で演習室の外部接続用のマシンにログインできるようになります(Windows の場合は何か SSH クライアントをインストールして使う必要があります)。 143 | このマシンには \texttt{sbt} や \texttt{scala} はインストールされていませんが、 144 | さらに \texttt{ssh is-kan2} としてアカウントのパスワードを入力すると、演習室と同じ環境のマシンにログインできます。 145 | ここで使用する秘密鍵は絶対に他人に知られないようにしてください。 146 | 秘密鍵を知られてしまうと演習室のマシンにログインされてしまいます。 147 | 148 | 149 | 150 | 151 | \end{document} 152 | --------------------------------------------------------------------------------