分享到plurk 分享到twitter 分享到facebook

版本 e2757d75f9b2cff471321d17ef395df4ddeab208

github

Changes from e2757d75f9b2cff471321d17ef395df4ddeab208 to current

---
title: GitHub 設定指引
toc: no
...

(以下內容由 `許元杰<https://github.com/Jayjack0116>`_ 貢獻)
(以下內容由 [許元杰](https://github.com/Jayjack0116) 貢獻)

建立 GitHub 帳號
------------------------
* Github 是個 Git 的托管網站,可讓開發者將自己的專案儲存到網路上,與全世界分享,我們可方便的使用 Git 在本機進行專案管理。
* GitHub 同時提供付費帳號和為了開放原始碼程式提供的免費帳號。根據 2009 年的 Git 使用者調查,GitHub 是最熱門的 Git 分享網站。它提供了如 feeds、followers 和顯示開發者們如何在他們版本庫上的版本工作的圖表。 GitHub 也提供類似剪貼簿的功能,issue tracker 和網頁使用 Wiki,通過一個 git repository 即可對這些頁面進行編輯。

.. image:: /use-git-01.png
![](/use-git-01.png)

 

建立新 repository
------------------------
在和本機的 repository 連動之前,先給自己的專案取個名字吧,這會是你專案之後的名字,也會是其他人搜尋你專案的時候的關鍵字,好的專案一定有一個好的名字。

.. image:: /use-git-02.png
![](/use-git-02.png)

上圖是筆者新增一個叫做 "Embedded-System-Class" 的 repository,以及 Fork 課程所用的 `embedded2015/arm-lecture<https://github.com/embedded2015/arm-lecture/>`_ 這個 repository。
上圖是筆者新增一個叫做 "Embedded-System-Class" 的 repository,以及 Fork 課程所用的 [embedded2015/arm-lecture](https://github.com/embedded2015/arm-lecture/) 這個 repository。

 

綁訂機器的 SSH key
---------------------------
因為要讓 Github 知道是我們這台電腦上傳的專案,所以我們要和 Github 之間建立一種默契,這個默契就是使用 ssh 協定時的 `public key<http://en.wikipedia.org/wiki/Public-key_cryptography>`_,我們給 Github 我們本機的 ssh public key ,告訴 Github 拿著這個 key 的電腦才是這個帳號的使用者, 如此一來就只能由這台電腦進行管理,才不會造成其他人來我們的帳號亂上傳東西的窘境。
因為要讓 Github 知道是我們這台電腦上傳的專案,所以我們要和 Github 之間建立一種默契,這個默契就是使用 ssh 通訊協定時的 [public key](http://en.wikipedia.org/wiki/Public-key_cryptography),我們給 Github 我們本機的 ssh public key ,告訴 Github 拿著這個 key 的電腦才是這個帳號的使用者, 如此一來就只能由這台電腦進行管理,才不會造成其他人來我們的帳號亂上傳東西的窘境。

首先,點選右上角的工具按鈕,進入帳號設定頁面,在頁面的左下角點選 "SSH keys"

.. image:: /use-git-03.png
![](/use-git-03.png)


SSH key 產生的方法
---------------------------

(``$`` 開頭的表示法,就是說明在 Linux 終端機輸入指令)


1. 輸入指令
```
    $ ssh-keygen -t rsa -C "your_email@example.com"
```
後面那是自己申請 Github 所使用的信箱。之後 ssh 程式會要求輸入 passphrase:

.. code-block:: prettyprint
![](/use-git-04.png)

    $ ssh-keygen -t rsa -C "your_email@example.com"
2. 直接按下 Enter 鍵即可。

2. 後面那是自己申請 Github 所使用的信箱。之後 ssh 程式會要求輸入 passphrase:
![](/use-git-05.png)

.. image:: /use-git-04.png
3. 輸入一個 passphrase,如不想輸入直接按下 Enter 鍵即可。

3. 直接按下 Enter 鍵即可。
![](/use-git-06.jpg)

.. image:: /use-git-05.png
4. 此時顯示的是你 SSH Key 的 fingerprint

4. 輸入一個passphrase,如不想輸入直接按下 Enter 鍵即可。
![](/use-git-07.jpg)

.. image:: /use-git-06.jpg
5. 將剛剛產生的 key 加入 ``ssh-agent`` 中

5. 此時顯示的是你SSH Key的fingerprint
如果你已安裝了 [Windows 版的 Github](https://windows.github.com/) ,你可以在不使用 SSH Key 的狀況下,執行 clone 等操作。Windows版本同時支援許多 Git bash tool,可運行眾多的 Git 指令。

.. image:: /use-git-07.jpg
* 如果你已安裝 Git bash,輸入以下指令以啟動 ``ssh-agent``

    5-1. 將剛剛產生的key加入ssh-agent中
![](/use-git-08.jpg)

如果你已經安裝了 `Windows版的Github<https://windows.github.com/>`_ ,你可以在不使用SSH Key的狀況下執行clone等操作。windows版本同時支援許多Git Bash tool,可運行眾多的Git指令。
* 如果你使用的是 [msysgit](https://msysgit.github.io/) 等軟體,則輸入以下指令

![](/use-git-09.jpg)

* 將剛剛產生的 key 加入 ``ssh-agent`` 中

![](/use-git-10.jpg)

6. 到 Github 網站加入你的 SSH key

將 SSH key 複製到你的剪貼簿,如果你的 key 檔案名稱不為 ``id_dsa.pub``,請自行將以下程式碼中 ``id_rsa.pub`` 修改成你的檔案名稱。

![](/use-git-11.jpg)

* 點選工具 icon

![](/use-git-12.jpg)

* 點選SSH Keys

![](/use-git-13.jpg)

* 選擇 Add SSH key

![](/use-git-14.jpg)

* 貼上key!!!!

![](/use-git-15.jpg)

* 按下 Add key就完成啦!

7. 驗證你有沒有綁訂了

* 輸入 ``ssh -T git@github.com``

![](/use-git-16.jpg)

* 你會看到這個 warning,然後輸入"yes"

![](/use-git-17.jpg)

* 你將會看到

![](/use-git-18.jpg)

這樣就成功囉!

同步
----------
將本機 repository 和遠端 Github repository 同步

打開空的 repository,Github 會指示你如何將本機 repository 的 remote 設定為遠端的 repository 目錄,並輸入以下指令,即可連線並把目前的 repository 同步到 Github 上面了。
```
    $ git remote add origin git@github.com:your_account/your_repository.git
    $ git push -u origin master
```
之後只需要輸入
```
    $ git push
```
即可


Clone 其他使用者的專案
------------------------------
Clone 是一個較為特殊的稱呼方式,意思是將遠端的 repository 複製一份到本機。在本機的 repository 可以自由修改/實驗,或是針對專案所需要的改善發送 patch 給原 repository,進而貢獻此專案。
如果你有寫入權限的話 (被加入成 "Collaborators"),就可透過 SSH 通訊協定,以 git 去 "clone" 下來:
```
    $ git clone git@github.com:Username/repository.git
```
如果沒有寫入權限 (Collaborators) 的話,因為這個專案是公開的,所以你還是可以用 Git 通訊協定 clone 下來:
```
    $ git clone git://github.com/Username/repository.git
```
若因遭逢防火牆問題 (如成功大學校園環境),請改用 HTTPS 通訊協定:
```
    $ git clone https://github.com/Username/repository.git
```

Pull: 從遠端更新
------------------------
```
    $ git pull
```
或
```
    $ git pull origin master
```
實際作用是先 git fetch 遠端的 branch,然後與本地端的 branch 做 merge,產生一個 merge commit 節點

Push: 將 Commit 送出去
------------------------
```
    $ git push
```
或
```
    $ git push origin master
```
實際的作用是將本地端的 master branch 與遠端的 master branch 作 fast-forward 合併。如果出現 [rejected] 錯誤的話,表示你必須先作 pull。

若想要熟悉 Git 指令
---------------------------
以下是以 GUI 方式呈現指令所產生結果的網站:

* [LearnGitBranching](http://pcottle.github.io/learnGitBranching/)
* [Visualizing Git Concepts with D3](http://onlywei.github.io/explain-git-with-d3/)