← 上一章:GitHub 是什麼? 下一章:Pull 下載更新 →


Push 上傳到 GitHub

在 GitHub 上開新專案

要上傳檔案到 GitHub,需要先在上面開一個新的專案。請先在 GitHub 網站的右上角點選「+」號,並選擇「New repository」:

new repository

接著填寫專案名稱:

new repository

  1. Repository name 可填寫任意名稱,只要不重複即可。
  2. 存取權限選擇 Public 可免費使用,選擇 Private 則需收每個月 7 元美金的月費。

按下「Create repository」即可新增一新的 Repository。

接下來,會看到的這個引導畫面:

new repository

說明:

  1. 如果是全新開始,請依「create a new repository on the command line」的內容指示進行;如果是要上傳現存專案,則依照「push an existing repository from the command line」選項進行。
  2. 畫面中間上面,有兩個按鈕可以切換,分別是「HTTPS」以及「SSH」。至於要選擇哪一個可看個人喜好,但選擇 SSH 的話需要設定 SSH Key,SSH Key 的設定可參閱「GitHub 是什麼?」章節介紹。因為我已經有設定好 SSH Key,所以這裡我選擇「SSH」。

如果仔細觀察,便會發現選擇全新開始跟上傳現有專案這兩個選項的最後兩個步驟是一樣的。

假設我們現在什麼都沒有,要重新開始一個專案,找一個空的目錄,就照著它的說明進行。首先,先建立一個 README.md 檔案:

$ echo "# Practicing Git" > README.md

這個 README.md 是 GitHub 專案的預設說明頁面,附檔名 .md 表示它是一個 Markdown 格式,Markdown 語法可以很輕鬆的把純文字格式轉換成 HTML 的網頁格式,如果這是你第一次接觸這個語法,非常推薦花一點時間學習它。

接下來這段,就是我們熟悉的 Git 了:

$ git init
Initialized empty Git repository in /private/tmp/practice-git/.git/

$ git add README.md

$ git commit -m "first commit"
[master (root-commit) adc1a5a] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

到這裡,都還是 Git 的基本招式。如果忘記怎麼操作可參閱「把檔案交給 Git 控管」章節。

在這之前,我們所有的操作都是在自己電腦上,接下來就是要準備把東西推上遠端的 Git 伺服器了。首先,需要設定一個端節的節點,例如:

$ git remote add origin git@github.com:kaochenlong/practice-git.git

說明:

  1. git remote 指令,顧名思義,主要是跟遠端有關的操作。
  2. add 指令是指要加入一個遠端的節點。
  3. 在這裡的 origin 是一個「代名詞」,指的是後面那串 GitHub 伺服器的位置。

在慣例上,遠端的節點預設會使用 origin 這個名字。如果是從 Server 上 clone 下來的話,它的預設的遠端節點就會叫 origin。(關於 Clone 的使用,請參閱「從伺服器上取得 Repository」章節說明)

不過別擔心,這只是個慣例,不用這名字或是之後想要改也都可以,如果想改叫七龍珠 dragonball

$ git remote add dragonball git@github.com:kaochenlong/practice-git.git

總之,它就是只是指向某個位置的代名詞罷了。設定好遠端節點後,接下來,就是要把東西推上去了:

$ git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 228 bytes | 228.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:kaochenlong/practice-git.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

這個簡單的 Push 指令其實做了幾件事:

  1. master 這個分支的內容,推向 origin 這個位置。
  2. origin 那個遠端 Server 上,如果 master 不存在,就建立一個叫做 master 的同名分支。
  3. 但如果本來 Server 上就存在 master 分支,便會移動 Server 上 master 分支的位置,使它指到目前最新的進度上。
  4. 設定 upstream,就是那個 -u 參數做的好事,這個稍候說明。

如果你能理解上面這個指令的意思,你就可以再做一些變化。例如你的遠端節點叫做 dragonball,而且你想把 cat 分支推上去:

$ git push dragonball cat

這樣就會把 cat 分支推上 dragonball 這個遠端節點所代表的位置,並且在上面建立一個名為 cat 同名分支(或更新進度)。

回到 GitHub 網站,重新整理一下頁面,剛才那個引導指令的畫面,現在應該會變這樣:

new repository

恭喜你,看到這畫面表示你已經順利把你本地專案的東西推到這個遠端的專案裡了。

如果是使用 SourceTree,請按下右上角的「Settings」按鈕,跳出對話框後,選擇「Remote」頁籤:

new repository

點選「Add」按鈕:

new repository

填寫「Remote name」以及「URL」欄位後,按下 OK 按鈕後,遠端節點即設定完成。接下來要把東西往上推,請點選上面工具列的「Push」按鈕:

new repository

勾選你想推的分支,按下 OK 鈕之後就會開始把指定的分支往指定的遠端節點推。成功之後再回來看,現在在 master 分支旁邊就多了一個 origin/master 的分支了:

new repository

【冷知識】設定 upstream 是什麼意思

在前面進行 Push 的時候,有加入了一個 -u 參數,表示要設定 upstream 的意思。嗯…問題是,什麼是「upstream」?

upstream,中文翻譯成「上游」。不要被名詞嚇到了,這 upstream 的概念其實就只是另一個分支的名字而已。在 Git 裡,每個分支可以設定一個「上游」(但每個分支最多只能設定一個 upstream),它會指向並追蹤(track)某個分支。通常 upstream 會是遠端 Server 上的某個分支,但其實要設定在本地端的其它分支也可以。

如果有設定,當下次執行 git push 指令的時候,它就會用來當預設值。舉例來說:

$ git push -u origin master

就會把 origin/master 設定為本地 master 分支的 upstream,當下回執行 git push 指令而不加任何參數的時候,它就會猜你是要推往 origin 這個遠端節點,並且把 master 這個分支推上去。

反之,沒設定 upstream 的話,就必須在每次 Push 的時候都跟 Git 講清楚、說明白:

$ git push origin master

否則,光就執行 git push 指令而不帶其它參數的話,Git 會跟你埋怨說不知道該 Push 什麼分支以及要 Push 去哪裡:

$ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master

【冷知識】如果不想要同名的分支名字…

前面提到 Push 的指令是這樣:

$ git push origin master

其實上面這個指令跟下面這個指令是一樣的效果:

$ git push origin master:master

意思是「把本地的 master 分支推上去後,在 Server 上更新 master 分支的進度,或是如果不存在該分支的話,就建立一個 master 分支」。但如果你想推上去之後不要叫這個名字的話,可以把後面的那個名字改掉:

$ git push origin master:cat

這樣當把本地端的 master 分支推上去之後,就不會在線上建立 master 分支,而是建立(或更新進度)一個叫做 cat 的分支了。


← 上一章:GitHub 是什麼? 下一章:Pull 下載更新 →

Comments