## 關卡內容：

把電腦裡的 <n>repository</n> 和 <adj>remote</adj> 的 <n>repository</n>連結起來，並 <v>push</v> 電腦上的修改。

## <n>Remotes</n>

當專案傳到 GitHub 上面，它會被儲存在 GitHub 的主機上。這個專案就變成了 <adj>remote</adj> <n>repository</n>，因為專案現在 GitHub 的主機上也有一份了，所以叫做 <n>remote</n>。當你把電腦上的程式修改 <v>push</v>到 <n>remote</n>，這就叫做同步。

其他人可以透過 <v>pull</v> 你的 <adj>remote</adj> <n>repository</n> 來取得專案的最新版本，儲存到他們的電腦上。這樣一來，大家就可以一起修改同一個專案，而不需要用 USB 或 Email 等其他方式來取得專案的最新進度。

## 步驟：建立一個 <adj>Remote</adj> <n>Repository</n>

你想要把電腦上的版本和存在 GitHub.com 上的 <adj>remote</adj> 版本做同步。所以我們先在 GitHub 上開啟一個新的 <adj>remote</adj> <n>repository</n>。

- 到 github.com 登入，然後按一下右上角的 '+' 號來新增一個 <n>repository</n>。
- 取一個名字，最好和你電腦上的程式名稱一樣，也就是 'hello-world'，並且給它一個簡短的說明。
- 設定為 public（公開）。
- 不要勾選 'initialize with a README'，因為我們已經在電腦上的版本建立了一個檔案，叫做 'readme.txt'。
- 也不要修改 .gitignore 和 license 的設定，保留原先 'none' 的設定就好。
- 按下 'create repository'！

## Readme（讀我檔案）、.gitignore 和 License（著作權聲明）

在開源軟體中，這些是你將會常常見到的檔案。

<n>readme</n> 通常是用來解釋一個程式的功用、使用方法以及如何貢獻程式碼（但有時候這部份也會另外用一個 CONTRIBUTING.md 來說明）。

<n>.gitignore</n> 則是要忽略的檔案清單，這是用來告訴 Git，當在做版本控制記錄的時候，不要理會這些檔案。例如，當某個檔案中包含密碼的時候，我們就不希望 Git 記錄它們下來。

License（著作權聲明）是用來聲明一個程式可以、或不可以被怎麼樣的使用。你可以到 choosealicense.com 參考一些範例。

但就現在在做的練習來說，我們暫時不需要著作權聲明。

## 步驟：把電腦上的 <n>repository</n> 和 <adj>remote</adj> <n>repository</n> 連結在一起

現在我們已經在 <n>remote</n>（GitHub 上）新建了一個 <n>repository</n>。在 <n>repository</n> 的頁面上你會看到一個 'Quick Setup' 的部份，確認選擇的網址是 'HTTP'，而不是 'SSH'，右邊的欄位就是這個 <adj>remote</adj> <n>repository</n> 在 GitHub 主機上的位址。

回到終端機，在我們剛剛初始化過 Git 的 'hello-world' 的資料夾裡頭，我們需要告訴 Git 這個 <n>remote</n> 的位址。同一個 Git 專案中，可以有很多不同的 <n>remote</n>，所以每一個 <n>remote</n> 都需要一個名字。而最主要、原始的那一個，通常都是叫做 `origin`。

`$ git remote add origin <URLFROMGITHUB>`

你電腦上的 <n>repository</n> 現在知道了專案有一個在 GitHub 上的 <n>remote</n>，叫做 'origin'。你可以想像這就好像是把一個電話號碼配上一個名字一樣，這樣當你要打電話的時候，就不用記得號碼了。

> 備註：

> 如果你有安裝 GitHub for Windows，Git 初始化的時候就會直接設定了一個叫做 'origin' 的 <n>remote</n>，所以你不需要新增，只要設定這個 'origin' <n>remote</n> 的位址就好了：

> `$ git remote set-url origin <URLFROMGITHUB>`

## 步驟：把你的修改 <v>Push</v> 到 <n>remote</n>

接下來你需要 <v>push</v>（傳送）所有你在電腦上做的修改到 GitHub 上的 <n>remote</n>。通常你會希望 <n>remote</n> 的程式版和電腦上的程式版本是一樣的。

Git 有一個 <n>branch</n> 系統，讓你可以同時修改一個程式的不同功能，之後會再深入介紹。系統會預設一個名稱給最初的 <n>branch</n>，通常就會叫做 'master'。當你 <v>push</v>（或之後 <v>pull</v>）一個專案的時候，你必須要告訴 Git 你想要的是哪一個 <n>remote</n> 上的哪一個 <n>branch</n> 的進度。

也就是說，我們現在想要把 'master' <n>branch</n> 的程式傳送到先前新增的 'origin' <n>remote</n>。

`$ git push origin master`

完成之後，你現在就可以回到 GitHub 的 <n>repository</n> 頁面，重新整理。哇哇哇！程式是不是都同步了呢？恭喜你建立了第一個公開的 <n>repository</n>！

{{{verify_directory_button}}}

## 撇步

- 新增 <n>remote</n> 連結
`$ git remote add <REMOTENAME> <URL>`
- 幫一個 <n>remote</n> 設定位址
`$ git remote set-url <REMOTENAME> <URL>`
- <v>Pull</v> <n>remote</n> 的程式
`$ git pull <REMOTENAME> <BRANCHNAME>`
- 看你有哪些 <n>remote</n> 連結
`$ git remote -v`
- <v>Push</v> 電腦上的程式到 <n>remote</n>
`$ git push <REMOTENAME> <BRANCH>`