Shogo Shimahara
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # Git/GitHub 今日の教育はGit/GitHubの教育です! <h2> Git とは? </h2> <p> Git とは、ソースコードのバージョンを管理するための仕組みのことです(いつ誰がどこを変えたのか? 最新のバージョンはどれか? など)。ソースコードを書き始めると、ソースコードをある時点まで書いたら動いたけど、追加のコードを書いたら動き始めなくなった、という場面が多々出てくると思います。そのために、gitを使います。 Gitを使えば、 ソースコードv1.cpp ソースコードv2.cpp のようにバージョンを管理するために毎回新しいソースコードを作る必要がなくなります。 </p> <h2> GitHub とは? </h2> <p> GitHubは、gitで管理しているソースコードを共有するためのインターネットサービスのことです。Gitでは、ローカルでソースコードを管理することができますがこれを他の人と共同で作業したいときはどうするのが良いでしょうか?ここで、GitHubが活躍します。 ![](https://i.imgur.com/QquXOkD.png) ソースコードをオンライン上に載せ、チーム開発を行うために必要になるのがGitHubになります。実際はGitLabなどのようなソースコード管理ツールもありますが、GitHubが一番有名であり、普及しているのでこちらをベースに説明をしていきます。 </p> <h2> Git の初期設定 </h2> <p> Gitは、標準で搭載されているGitを使うのが良いかと思います。(既にインストールされているものがあるはず) ``` git --version ``` 念のため、上のコマンドで確認してみよう。 </p> <h2> GitHub の初期設定 </h2> <p> GitHubはソースコード管理用のオンラインサービスですので、アカウントをGitHubで作成する必要があります。 https://github.com/ にアクセスし、早速アカウントを作ってみましょう。 ※アカウントが既にある人は、そのアカウントを使ってもらって全然問題ありません。 ![](https://i.imgur.com/OXmmUCk.png) GitHubアカウントの設定をローカルにする ""内は各自で登録したusernameとメールアドレスを設定する。 ```git config --global user.name "John Doe"``` ```git config --global user.email johndoe@example.com``` 登録が完了したら、 ```git config user.name``` ```git config user.email``` を入力し、設定が正常にできているかを確認する。 </p> <h2> GitHubにSSHで接続できるようにする </h2> <p style="padding-bottom: 30px;"> 今までの教育期間中は  ```git clone https://~~/~~/~~.git``` というコマンドを実行してソースコードをGitHubから取得する作業を行なってきた。これはHTTPS方式でソースコードを取得する方法です。 場合によってはSSH接続でソースコードを取得する機会もあるかとは思いますので、SSH接続もセットアップしておきましょう。 cd ~/.ssh ssh-keygen -t rsa -b 4096 ``` Enter file in which to save the key (/Users/user-name/.ssh/id_rsa): github Enter passphrase (empty for no passphrase): Enter same passphrase again: ``` 鍵のペアができたら  cat ~/.ssh/github.pub | pbcopy で、公開鍵をコピーします。 Settingsをクリック ![](https://i.imgur.com/bWac3v6.png) SSH and GPG keysをクリック ![](https://i.imgur.com/NC1NHbZ.png) New SSH key をクリック ![](https://i.imgur.com/WlzPUsX.png) Title: 公開鍵名(識別できるように) Key: さっきコピーした公開鍵を貼り付ける 終わったらAdd SSH keyで終了 ![](https://i.imgur.com/lQqQAu1.png) 以下のコマンドでSSHできるかを確認できる ```ssh -T git@github.com``` ![](https://i.imgur.com/hqsqb5c.png) </p> <h2> リポジトリを作成してみよう </h2> <p> GitHubではソースコードを管理するための単位としてリポジトリというのがあります。ディレクトリやソースコードなど細かく整理するのが基本となります。 (以下はDPDKというネットワーク関連ソフトウェアの公開リポジトリです) ![](https://i.imgur.com/FiJiWey.png) RepositoriesのNewをクリックし、リポジトリを作成できます ![](https://i.imgur.com/YO2o6Wn.png) リポジトリの初期設定を行います。 ![](https://i.imgur.com/Kmjrd0k.png) まずターミナルで ```mkdir test``` ```cd test``` のコマンドを入力します その後、以下の画像の一連の手順を踏むことによりソースコードをリポジトリに公開できます。 ![](https://i.imgur.com/2qDXbax.png) ※originってなんだよという方へ ```git remote -v``` で正体が分かります。 ここまでの手順で、リモートのGitHub及びローカルのGitの管理が紐づいた状態になります。 </p> <h2> Gitに関する操作・コマンド </h2> <p> Gitの操作を行う上で必要になるコマンドを順番に説明していきます。 </p> <h3> $ git status </h3> <p> Gitによるファイルの修正状況を表示してくれます。 現在の状態で打ち込むと、 ```nothing to commit, working tree clean``` と表示されるかと思います。これは、まだ何も新規のコミットがされていない状況ということになります。 </p> <p> ここで一度、 ```echo "README.mdを修正したぜ!!!" >> README.md``` と入力しましょう。これで、READMEファイルに新しい情報が書き加えられます。 その状態で、 ```git status``` を入力してみてください。<br> modified: README.mdと表示されていれば、ファイルが書き換わったことを教えてくれます。 </p> <h3> $ git add </h3> <p> ここで、 ```git add README.md``` と入力し、その後に ```git status``` を入力してみましょう。 modified: README.mdの色が変わったかと思います、これは、修正したファイルをコミットすれば反映できる(ステージング)ようにした状態になります。<br> ここで、 ```touch not-managed.txt``` を作成し、```git status``` を入力すると、ステージングされたREADME.mdファイルとステージングされていないnot-managed.txtファイルに分かれるかと思います。 </p> <h3> git reset </h3> <p> ソースコードをステージングできたと思いますが、誤ってステージングしてしまった!というケースが出てくるかと思います。 その場合には、git resetというコマンドが活躍します。 ``` git reset README.md ``` このコマンドを入力することにより、先ほどのgit addで追加したREADME.mdのステージング状態を解除することができます。 git statusで確認してみよう。 確認ができたら、 ``` git add README.md ``` で再度READMEファイルをステージングしておこう。 </p> <h3> git commit </h3> <p> 先ほど出てきたコミットという単語ですが、コミットこそがgitのバージョン管理の単位だと思っていただいて構いません!これを実行することにより、ソースコードのバージョンを最新のものに変更することができます。(先ほどREADME.mdに加えたテキストをステージングし、コミットしたことによりバージョンが更新されたということ) ```git commit -m "README更新"``` を入力すると、新しいバージョンのソースコードになります。 </p> <h3> git log </h3> <p> 本当に今のコミットでバージョン変わったの?という人は ```git log``` を入力してみましょう。<br> 今までのバージョンのログが列挙されます。HEADと書いてあるのが最新のバージョンということになります。(qを押すと画面を閉じれる) ![](https://i.imgur.com/dtcTS7n.png) このようにしてバージョン(コミット)はGit内で管理されていきます。 </p> <p> ここまで読んで、gitを使う上で、ファイル・フォルダには複数のステータスがあることが分かったかと思います。 ![](https://i.imgur.com/6Kroe5R.png) </p> <h2> GitHubに関する操作・コマンド </h2> <p> Gitでソースコードのバージョン管理をできるようになりました!<br> しかし、これだけでは自分の中での管理のみになってしまい、他人に共有することはできない…<br> そこで、GitHubの登場です。 </p> <h3> git push </h3> <p> GitHubは、言わばソースコードのリモート掲示板だと思ってください。新しいソースコードを貼り付けないと他の人には共有できないし、他の人ははりつけられたものを取ってこないとソースコードを見ることができません。 ![](https://i.imgur.com/QquXOkD.png) 新しいソースコードを掲示板に貼り付けるためには、 ```git push origin master``` と入力してみてください。これを行うことにより、最新版のソースコードを掲示板に掲載する(GitHubにpushする、と表現する)ことができます。 実際にGitHubのリポジトリを見てみましょう。READMEの内容が更新されていることが分かります。 ![](https://i.imgur.com/rwlstom.png) </p> <h3> git pull </h3> <p> ここまでの過程で掲示板に新しいソースコードを貼り付けることができました。<br> チーム開発をしている場合だと、このプッシュした情報を自分の環境に引っ張り、最新版に追いつかないといけません。<br> 現在この作業は一人でやってるかと思いますのであまり意味がないと思いますが、 ```git pull origin master``` と入力することにより、最新版のソースコードに他の人もキャッチアップすることができます。 </p> <h2> gitのブランチ </h2> <p> チーム開発をするときにはブランチ機能というものを使います。<br> ブランチ機能とは:<br> 例えば、ソースコードの最新バージョンに一つの機能を付け加えてあげたいとします。しかし、ローカルで新しい機能を加えて動かしてみたら正常に動作しなかった…<br> そんな状態で最新版にプッシュしたら、まずいですよね?<br> このソースコードを一本線で管理していたら、ソースコードをGitHubで共有できない状態となってしまいます。そこで、一本線ではなく、最新バージョンから新しい分岐点を作ることによって、新しい開発用の線を派生させる仕組みがGitにはあります。これをブランチ(枝)と言います。 ![](https://i.imgur.com/fKu6d4y.png) <ul> <li>git branch</li> <p> 現在のリポジトリにて用意されているブランチを表示することができます。 ```git branch``` と入力してみましょう。 masterというブランチが表示されれば、OKです。(qを押すと画面を閉じれる) </p> <li>git checkout</li> <p> 現在いるブランチから移動することができます。<br> また、ブランチを新しく作って切り替えるということも可能です。 ```git checkout -b test``` を入力してみましょう。これにより、masterブランチを幹とする新しいブランチ(枝)を派生させることができます。 この状態で ```git branch``` を入力すると、新しいブランチが作成されていることが分かります。(*は現在いるブランチのことを表します。)(qを押すと画面を閉じれる) ここで、git statusを入力してみると、ファイルの管理状態も引き継いだ上で新しくブランチが派生されていることが分かるかと思います。 ```echo "testブランチからの更新!!" >> README.md``` を入力してみましょう。その後に ```git add README.md``` ```git commit -m "README.mdの更新 @ testブランチ"``` を入力し、コミットします。これはtestブランチへの更新になりますので、masterには何も変更されないという点に注意してください。最後に、 ```git push origin test``` と入力し、GitHubにtestのブランチをプッシュします。 branchが新しく増えていることが分かります。 このブランチはmasterブランチからは独立しているため、masterブランチには何も影響しません。 ![](https://i.imgur.com/AMYmlVv.png) このようにして、ブランチを作成し、masterブランチから離れて開発を行うことがGitHubでの作法となります。 </p> </ul> <h4> gitのブランチを統合(マージ) </h4> <p> ブランチを切って開発を進めたわけですが、最後にこのブランチで新しい機能を追加して問題なく動くようであれば、masterのブランチに統合したいですね。 チーム開発においては、masterブランチの統合はgitHub上で行います。ローカル側で統合を行った上でプッシュしてしまうと、他の共同開発者が更新内容を確認できないまま上がってしまうためです。 そこでGitHubが用意しているのが、プルリクエストと呼ばれる機能になります。 ![](https://i.imgur.com/roWvMlU.png) masterブランチとtestブランチを比較することができます。 緑色でAble to mergeと表示されれば、統合ができる状態にあるということになります。 [Create pull request]をクリックしていきます。 ![](https://i.imgur.com/0B8svm1.png) ![](https://i.imgur.com/Jx1ZjMa.png) これでプルリクエストの登録は完了です。 これで、リポジトリが見える人はブランチごとのソースコードの差分を見ることができます。(緑色や赤い部分が差分) ![](https://i.imgur.com/rlhZQUR.png) 最後に、Merge pull requestを行うことによってmasterにtestの更新分を反映させることができます。 これで、masterブランチにtestの分を更新することができました。 チーム開発はこんな感じで進めていきます。 </p> <h4> git clone/fork </h4> <p> 上までがGit/GitHubでチーム開発を行う上で知っておくべき最低限の知識になるかと思います。 次に、公開されているリポジトリのソースコードを自分のローカルに持ってくるコマンドを紹介します。 </p> <h4> git clone </h4> <p> リモートにあるリポジトリをローカルに引っ張ることができます。おそらく一番よく使うことになるかもしれないコマンド。 </p> <h4> git fork </h4> <p> 他人のリモートリポジトリを自分のリモートリポジトリとして使いたい時に重宝するコマンドです。 OSS(オープンソースソフトウェア)の開発を行う場合には結構重宝するコマンド。 リモートでの作業のみなので、GitHubのみでの操作となる。 </p>

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully