Skip to main content

GITHUB

ソースコントロールシステム

いままで, あなたは一つのコンピュータのディスクにプログラムを書いていました.すると,いろいろな問題が出てきます.

  • プログラムはあなたのPCに書いてあるので,他人は,見ることができません.
    • 複数人のチームで一つのプログラムを開発することは不可能です.見えないものに開発協力はできないです.
    • PCのアカウントと,クラスターのアカウントは,コンピュータ的には他人です.だから,あなたがPCで開発したプログラムを,計算機クラスターに「転送」しなければならない
  • そのPCが盗難にあったり故障すると,プロジェクトは終わる
  • あなたが死亡してもプロジェクトは終わる. だれも引き継げないからです.
  • あなたが,うっかり新バージョンを旧バージョンで上書きしたら,努力が水の泡になる.
    • あなた以外のだれも,途中経過を知らないからです.
  • 開発途中で,AプランとBプランが出てきた場合,同時並行に開発して,調子が良い方を採用する,という手法が取れない
    • あなたが単独で開発しているからです.

ソースコントロールシステムは,これらの問題を一挙解決するものです.まあ少々語弊があるが

  • プログラムをWEBサイトに保存したら,みんなが見られて幸せ(ま,パスワードとかは知っとかなきゃ,だが)
  • そのサイトを「レポジトリ」と呼びます.
  • 過去の各瞬間の記録を保持してます.なので,「昨年の4月ごろって,どうやってたっけ」タイムマシンのように戻れます
  • データはWebサイトにあるので・・・まあ,あなたのPCは,動いていたらラッキー程度の重要度になります
  • 開発者も一人とは限らなくなるので・・・まあ,あなたは生きていた方が良い程度の重要度になります.
  • Aパターン,Bパターン,・・・を多数保持できます.AパターンをAくんが, BパターンをBくんが試し,成果の一部を交換したりも可能

というものです.いろいろなレポジトリサイトがありますが,VSCodeにはGITHUBが必要不可欠でついてきているので,利用してみましょう.

  • GITHUB以外でも,同じように利用できます. 有名なレポジトリサイトは
    • GITLAB: そもそもgithubはLinuxというWindowsではない無料OSの開発の中心となっていたわけですが,途中でMicrosoftが「うちのよりいい感じやね」と思って突然Githubを6000億円で買収しました.で,Githubは金満臭がキツくなってきたので,それが嫌いな人たちが大勢GitLabに脱走しました.なので,結構多くのプログラムがGitLabにあります.
    • BITBUCKET: 昔はGithubはお金がありませんでした.で,ヒゲ親父の信念に影響されて「ここに登録したソフトウェアは人類の資産である」「よって,すべての人類にオープンでなければならない」というわけで,研究用の秘密のコード(privateレポジトリ)という設定ができませんでした.それでは困ると思ったオーストラリアのソフト会社アトラシアンが作ったレポジトリです.あまり大手ではないが,流体力学分野はここでGitを始めたので,ここに登録しているソフトは多いです.その後Githubは金持ちになってprivateレポジトリも作れるようになったので,ここを使う積極的理由はないが,インターフェースはGithubより使いやすいところもある

では,それを学びましょう!

GITUBのサイト

GITHUB-Copilotを登録するときに, GITHUBにユーザー登録しているはずです.ブラウザを使って, サイトにログインしてみましょう.

【Setting】

 右端の【Setting】

ここで,  SSH公開鍵を2通り登録してね!

  • あなたのMacのノートパソコンのSSH公開鍵 $HOME/.ssh/id_ed25519.pub
  • あなたのクラスターのSSH公開鍵 $HOME/.ssh/id_ed25519.pub

を,【SSH and GPG keys】に, 下の感じで

すると,こんな感じに!

これでサイト準備が完了したので,今度はあんたのMacのVSCodeを設定します.

インストール

インストールする前に, gitではユーザー名とemailを登録しておかねばなりません.らしいですので,

こんな感じで,

  • git config --global user.name "ユーザー名"
  • git config --global user.email  メールアドレス

を登録しておいてくださいね!

VSCodeでGITが便利に使える【GIT Lens】拡張機能をインストールしましょう:

さて, お前さんのMacのVSCodeで, いつものようにフォルダーを開いているとします.ここでGITボタンを押します:

 

ここに出てくるように動かない場合が報告されています.その場合は

コースは違う感じですが,対応する作業が可能で,下図のように,GITHUBのサイトに誘導されます.

すると,なんでかブラウザでGITHUBのサイトが開いて

 「つないじゃっていいかな?」なんて聞いてくるのでOK

で, 今度はあんたのMacのVSCode

で,共有したいファイルにチェックを入れます.よくわからん場合は全部共有でOKね.

すると

 送っちゃっていいかな,ってさっきOK言うたやんけ

VSCodeのほうは, これで完成

レポジトリーの設定

ブラウザの方はこうなるはず:

いくつか,やってた方が絶対良い設定があるので,済ませておきましょう.

はじめてのCommit

コンピュータ個別用のファイルなど, 共有しても仕方がない, というか共有すると邪悪なことが起こるファイルがあります.そのようなファイルは登録しないように設定しておくのが良いです.

まずは .gitignore を選択

編集する前に,猿知恵を借りよう!

コピーしてから【編集】してペーストして保存.ちょっと気になったので別途調べたが

*.dSYM/
main

も,入れといた方が良いらしいので追加しておこう.

保存はSaveではなく, Commitと言います:

確認でも【Commit】

さて, 成功裡にCommitできたのかどうかは,ここからCommit履歴を見れば良い:

変更の履歴が見える.項目をクリックすると,何をやらかしたか詳細が表示される:

不要なファイルの削除

ふと作成したレポジトリなので,不要なファイルが登録されています..gitignore をみる限り, 

.vscodeフォルダ
...dSYMフォルダ
 mainという名前の,コンパイル済みファイル

は, サイトから削除した方がよさそうです(実際には,絶対に削除しておいた方が良い.必ず,邪悪なことが起こる).不要なフォルダーやファイルを選んで

 

消しちゃいましょう. 整理したらシンプルになりましたよ:

初めてのpull

さて, ブラウザでいろいろと変更を加えてしまいましたが,あなたのMacのVSCodeは,そんな大騒ぎに自動的に気づくわけではありません.明示的に,「最近の状況を反映して」と,命令する必要があります.それが pull コマンドです. あなたのMacのVSCodeで,他の開発者(今の場合,GithubのWebサイトを編集している,だれかさん)の作業を,自分のPCに反映させましょう!

これをクリック

 反映されました!

さて,これでちゃんと再生とかできるか,試してみましょう

  • 試したバージョンでは,いくらなんでもdeleteしすぎたのか,なんか色々作業しました.

で,作業すると,変更点が増えていきます:

では,VSCodeで行った変更を Commit しよう.

すると,送信メッセージ案が表示される. さいしょの1行に,あなた自身のメッセージが必要であるので必ず一言,「馬鹿野郎」とか,入力する必要がある.

メッセージを保存しましょう.で,これは,変更案を保存しただけ,なのです.サーバーには,未送信なのです.

 これで,送信が行われるのです.

これを push と言います.送信できたら,GITHUBのサイトの方で,変更が行われているはずです.チェックしてみましょうね:

はじめてのclone

さて, ここまでで, あなたのプログラムはGITHUBの管理下になりました.

  • もはや,あなたのPCに意義はない.プログラムはGITHUBに残っているので,そのパソコンが水没しても困らない.新しいの買うだけ
  • もはや,あなた自身に意義はない.プログラムはGITHUBに残っているので,あなたが死んでも誰かが開発を継続するだけである.

ですので,計算機クラスター(研究室や,計算機センター)でも開発者を追加すれば,プログラムの開発が行えます.それをcloneと言います.

GITHUBサイトで,あなたのレポジトリーのアドレスを取得しましょう.これが,あなたのレポジトリのアドレスです:

では, 外部計算機でcloneしてみましょう.

方法1: ボタンでClone

あなたのMacのVSCodeで,外部計算機に接続すると

ここで, あなたのレポジトリーのアドレスを入力:

で,外部計算機で,プログラムを入れておくフォルダーを指定します. 指定したフォルダーの下に,あなたのレポジトリのコピーができますよ:

もちろん開くと

 できた!

一度こうやって開くと,次回からは,外部計算機への接続で,直接フォルダーを開くメニューができます:

おっさんの外部コンピュータ,おおいな?と思う向きに説明しておきましょう.

  • sun0ext    おうちやスタバなど,研究室外部からsun0サーバーに接続
    • 私の$HOMEは /net/sun0 にあるので,ディスク共有を経由しないので速い
    • 京都大学のForwardサーバーを経由したVPNなので,どこからでも繋がりますが,その分,低速です
  • sun0         研究室の有線でsun0サーバーに接続
    • 私の$HOMEは /net/sun0 にあるので,ディスク共有を経由しないので速い
    • sun0サーバーはsun1サーバーより非力なので, そういう点では遅い
    • sun0サーバーはMySQLサーバーであるので,MySQLは速い
    • おうちやスタバからは利用できませんが,直接接続なので,データ転送が速い!
  • sun1          研究室の有線で接続
    • 私の$HOMEは /net/sun0 にあるので,ディスク共有を経由してしまい,遅い
      • あなたの$HOMEが /net/sun0 なのか? /net/sun1 なのか? は,自分で調べてね
    • sun1サーバーはsun0サーバーより強力なので, そういう点では速い
    • sun1サーバーはMySQLサーバーではないので, MySQLは少し遅い
  • sun1ext    おうちやスタバなど,研究室外部からsun1サーバーに接続
  • sakura     研究室のWebサーバーは大阪にある
  • などなど

あ,それと,初心者には理解が難しいかもですが

  • 計算機クラスターは,多数のマシンでディスクを共有しているので, sun0 でも sun1 でも,同じフォルダーが見える
  • 違うマシンのディスクは速度が遅くなるだけ.中身は同じ

です.

方法2: ターミナルでClone

はて,今の環境で必要な局面が想像できませんが,Cloneはターミナルでキータイプしても可能です.あなたのMacのVSCodeで,外部計算機に接続して【ターミナル】を開いておきます.

% cd $HOME/test   ←あなたのソースファイルを入れるフォルダーに移動. いや・・・ $HOME/src とかの方が,それっぽいが
% mkdir tmp      ←あとで消すつもりのフォルダーを作成
% cd tmp      ←そこに入れてみる
% git clone git@github.com:sugimoto605/PROG_EXE.git  ここはあなたのアドレスね
Cloning into 'PROG_EXE'...
The authenticity of host 'github.com (20.27.177.113)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes  ←yでは許してくれない
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (5/5), done.
$ ls -l PROG_EXE/
合計 4
drwxrwxr-x 2 sugimoto fluid 30  5月 26 09:26 P1
drwxrwxr-x 2 sugimoto fluid 52  5月 26 09:40 P2
drwxrwxr-x 2 sugimoto fluid 55  5月 26 09:26 P3
-rw-rw-r-- 1 sugimoto fluid 49  5月 26 09:26 README.md
$ rm -rf PROG_EXE     ←うまくいった場合,もうこれいらねえ

このように手動でもできます.

他のさまざまな作業

GITをつかうと,いろいろな作業ができますが,それはおいおい紹介します.

  • AパターンとBパターンなど,いくつかの可能性や,複数人での作業を同時に進めたい:ブランチの作成
  • 別のブランチの作業を,取り込みたい
    • 全て取り込みたい::ブランチのマージ
    • 一部を取り込みたい:
    • 取り込もうとしたらエラーした:
  • 過去のある時点に戻りたい